Name: series-workflowth4pj Phase: Succeeded StartedAt: 2026-08-18 06:18:50 +0000 UTC FinishedAt: 2026-08-18 08:19:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[0] Phase: Succeeded StartedAt: 2026-08-18 06:18:50 +0000 UTC FinishedAt: 2026-08-18 06:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 06:18:50 +0000 UTC FinishedAt: 2026-08-18 06:49:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "09b7c00d55a8c1ec50c44e74d3edba0c0b317910", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_TCP", "NVME_TARGET", "NVME_TARGET_TCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "09b7c00d55a8c1ec50c44e74d3edba0c0b317910", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_TCP", "NVME_TARGET", "NVME_TARGET_TCP" ], "series_id": "d16a0175-22d6-420a-964d-221baca881e7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nvme_tcp_create_ctrl", "nvmet_tcp_add_port", "nvmet_tcp_accept_work" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX1RDUCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudm1lX3RjcF9jcmVhdGVfY3RybCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FjY2VwdF93b3JrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBvcHRpb24gc2V0dGluZyBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgYnkgcmVwbGFjaW5nIGRpcmVjdCBjYWxscyB0byBzcGVjaWZpYyBoZWxwZXJzIChsaWtlIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGBzb2NrX25vX2xpbmdlcmAsIGV0Yy4pIHdpdGggbG9jYWwgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBkb19zb2NrX3NldHNvY2tvcHRgLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoZS5nLiwgYGludCB2YWwgPSAxO2AsIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgYnkgdmFsdWUpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nLCBhbmQgbm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHNvY2tldCBvcHRpb25zIG9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCBhcmUgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3Qgc29ja2V0IG9wdGlvbiBhc3NpZ25tZW50cyAoZS5nLiwgdGNwX3NvY2tfc2V0X3N5bmNudCwgc29ja19ub19saW5nZXIpIHdpdGggZG9fc29ja19zZXRzb2Nrb3B0KCkgaW4gdGhlIE5WTWUgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBkb19zb2NrX3NldHNvY2tvcHQoKSBpbnZva2VzIExTTSBhbmQgQlBGIGNncm91cCBob29rcywgYWxsb3dpbmcgc2VjdXJpdHkgbW9kdWxlcyBhbmQgQlBGIHByb2dyYW1zIHRvIGludGVyY2VwdCwgbW9kaWZ5LCBvciBkZW55IHRoZXNlIHNvY2tldCBvcHRpb25zLiBJdCBhbHNvIGFkZHMgZXJyb3IgaGFuZGxpbmcgdGhhdCBmYWlscyBxdWV1ZSBhbGxvY2F0aW9uIGlmIHNldHRpbmcgdGhlIG9wdGlvbnMgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSByZWFjaGFibGUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyBpbiBOVk1lIG92ZXIgVENQIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzUzNDBmMjMxODZiZjMyYzkzNGI3NWI2NWU1ZDBhZjQwNDNjMDIxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA2OjMzOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbmluZGV4IGJhNWM3YjNlMmE3YzYuLjVmMzBiZTA0YTlkZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbkBAIC0xNzc0LDYgJiM0MzsxNzc0LDU4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfdGxzKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXG4mIzQzO1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG4mIzQzO1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULFxuJiM0MztcdFx0XHRcdCAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksXG4mIzQzO1x0XHRcdFx0ICBzdHJsZW4oaWZhY2UpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdGludCB2YWwgPSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLFxuJiM0MztcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXG4mIzQzO1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4mIzQzO1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcylcbiYjNDM7e1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuJiM0MztcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNixcbiYjNDM7XHRcdFx0XHRcdCAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRjbGFzcyksXG4mIzQzO1x0XHRcdFx0XHQgIHNpemVvZih0Y2xhc3MpKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiBcdFx0XHRcdGtleV9zZXJpYWxfdCBwc2tpZClcbiB7XG5AQCAtMTgxOSwyNCAmIzQzOzE4NzEsNjUgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiAjZW5kaWZcbiBcbiBcdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cbi1cdHRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4mIzQzO1x0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIDEpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtmYWlsZWQgdG8gc2V0IFRDUF9TWU5DTlQgb24gcXVldWUgJWQgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRxaWQsIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9zb2NrO1xuJiM0MztcdH1cbiBcbiBcdC8qIFNldCBUQ1Agbm8gZGVsYXkgKi9cbi1cdHRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuJiM0MztcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFwmIzM0O2ZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcXVldWUgJWQgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRxaWQsIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9zb2NrO1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBDbGVhbnVwIHdoYXRldmVyIGlzIHNpdHRpbmcgaW4gdGhlIFRDUCB0cmFuc21pdCBxdWV1ZSBvbiBzb2NrZXRcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuJiM0MztcdHJldCA9IG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtmYWlsZWQgdG8gc2V0IFNPX0xJTkdFUiBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHFpZCwgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3NvY2s7XG4mIzQzO1x0fVxuIFxuLVx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4mIzQzO1x0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcdFwmIzM0O2ZhaWxlZCB0byBzZXQgU09fUFJJT1JJVFkgb24gcXVldWUgJWQgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHFpZCwgcmV0KTtcbiYjNDM7XHRcdFx0Z290byBlcnJfc29jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHQvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqL1xuLVx0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zIFx1MDAzZT0gMClcbi1cdFx0aXBfc29ja19zZXRfdG9zKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zKTtcbiYjNDM7XHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0XHRcJiMzNDtmYWlsZWQgdG8gc2V0IElQX1RPUyBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cWlkLCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIGVycl9zb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIHNldCBJUFY2X1RDTEFTUyBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cWlkLCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIGVycl9zb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdC8qIFNldCAxMCBzZWNvbmRzIHRpbWVvdXQgZm9yIGljcmVzcCByZWN2bXNnICovXG4gXHRxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3JjdnRpbWVvID0gMTAgKiBIWjtcbkBAIC0xODY0LDEwICYjNDM7MTk1Nyw4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4gXG4gXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2VtYXNrIFx1MDAyNiBOVk1GX09QVF9IT1NUX0lGQUNFKSB7XG4gXHRcdGNoYXIgKmlmYWNlID0gbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2Vob3N0X2lmYWNlO1xuLVx0XHRzb2NrcHRyX3Qgb3B0dmFsID0gS0VSTkVMX1NPQ0tQVFIoaWZhY2UpO1xuIFxuLVx0XHRyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtXHUwMDNlc29jaywgU09MX1NPQ0tFVCwgU09fQklORFRPREVWSUNFLFxuLVx0XHRcdFx0ICAgICAgb3B0dmFsLCBzdHJsZW4oaWZhY2UpKTtcbiYjNDM7XHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBpZmFjZSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiBcdFx0XHQgIFwmIzM0O2ZhaWxlZCB0byBiaW5kIHRvIGludGVyZmFjZSAlcyBxdWV1ZSAlZCBlcnIgJWRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbmluZGV4IDc1YTI3NmQ3M2JlM2UuLmVkNDEzYWE1NjAxYzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG5AQCAtMTY5NiwxMCAmIzQzOzE2OTYsNjYgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLFxuJiM0MztcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbiYjNDM7XHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRpbnQgdmFsID0gU0tfQ0FOX1JFVVNFO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXG4mIzQzO1x0XHRcdFx0ICBTT19SRVVTRUFERFIsIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksXG4mIzQzO1x0XHRcdFx0ICBzaXplb2YodmFsKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbCA9IDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG4mIzQzO1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRpbnQgdG9zID0gaW5ldF9zayhzayktXHUwMDNlcmN2X3RvcztcbiYjNDM7XG4mIzQzO1x0aWYgKHRvcyBcdTAwM2UgMClcbiYjNDM7XHRcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4mIzQzO1x0XHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRpbnQgdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktXHUwMDNlcmN2X2Zsb3dpbmZvKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGNsYXNzIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsXG4mIzQzO1x0XHRcdFx0XHRcdCAgU09MX0lQVjYsIElQVjZfVENMQVNTLFxuJiM0MztcdFx0XHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRjbGFzcyksXG4mIzQzO1x0XHRcdFx0XHRcdCAgc2l6ZW9mKHRjbGFzcykpO1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpXG4ge1xuIFx0c3RydWN0IHNvY2tldCAqc29jayA9IHF1ZXVlLVx1MDAzZXNvY2s7XG4tXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLVx1MDAzZXNrKTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBrZXJuZWxfZ2V0c29ja25hbWUoc29jayxcbkBAIC0xNzE3LDE0ICYjNDM7MTc3MywyNCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuJiM0MztcdHJldCA9IG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMClcbi1cdFx0c29ja19zZXRfcHJpb3JpdHkoc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuJiM0MztcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMCkge1xuJiM0MztcdFx0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi9cbi1cdGlmIChpbmV0LVx1MDAzZXJjdl90b3MgXHUwMDNlIDApXG4tXHRcdGlwX3NvY2tfc2V0X3Rvcyhzb2NrLVx1MDAzZXNrLCBpbmV0LVx1MDAzZXJjdl90b3MpO1xuJiM0MztcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSAwO1xuIFx0d3JpdGVfbG9ja19iaChcdTAwMjZzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xuQEAgLTIwOTgsMTAgJiM0MzsyMTY0LDI2IEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydClcbiBcdHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBwb3J0O1xuIFx0cG9ydC1cdTAwM2VkYXRhX3JlYWR5ID0gcG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2RhdGFfcmVhZHk7XG4gXHRwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfZGF0YV9yZWFkeSA9IG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeTtcbi1cdHNvY2tfc2V0X3JldXNlYWRkcihwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuLVx0dGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbi1cdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMClcbi1cdFx0c29ja19zZXRfcHJpb3JpdHkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4mIzQzO1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gc2V0IFNPX1JFVVNFQUREUiBvbiBwb3J0IHNvY2tldCAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3NvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gc2V0IFRDUF9OT0RFTEFZIG9uIHBvcnQgc29ja2V0ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfc29jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMCkge1xuJiM0MztcdFx0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIHNldCBTT19QUklPUklUWSBvbiBwb3J0IHNvY2tldCAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHJldCk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3NvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0ga2VybmVsX2JpbmQocG9ydC1cdTAwM2Vzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZwb3J0LVx1MDAzZWFkZHIsXG4gXHRcdFx0c2l6ZW9mKHBvcnQtXHUwMDNlYWRkcikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX1RDUCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudm1lX3RjcF9jcmVhdGVfY3RybCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FjY2VwdF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGRpcmVjdCBzb2NrZXQgb3B0aW9uIGFzc2lnbm1lbnRzIChlLmcuLCB0Y3Bfc29ja19zZXRfc3luY250LCBzb2NrX25vX2xpbmdlcikgd2l0aCBkb19zb2NrX3NldHNvY2tvcHQoKSBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGRvX3NvY2tfc2V0c29ja29wdCgpIGludm9rZXMgTFNNIGFuZCBCUEYgY2dyb3VwIGhvb2tzLCBhbGxvd2luZyBzZWN1cml0eSBtb2R1bGVzIGFuZCBCUEYgcHJvZ3JhbXMgdG8gaW50ZXJjZXB0LCBtb2RpZnksIG9yIGRlbnkgdGhlc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGFsc28gYWRkcyBlcnJvciBoYW5kbGluZyB0aGF0IGZhaWxzIHF1ZXVlIGFsbG9jYXRpb24gaWYgc2V0dGluZyB0aGUgb3B0aW9ucyBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIHJlYWNoYWJsZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIGluIE5WTWUgb3ZlciBUQ1AgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NTM0MGYyMzE4NmJmMzJjOTM0Yjc1YjY1ZTVkMGFmNDA0M2MwMjE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDY6MzM6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCmluZGV4IGJhNWM3YjNlMmE3YzYuLjVmMzBiZTA0YTlkZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCkBAIC0xNzc0LDYgJiM0MzsxNzc0LDU4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfdGxzKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07CiYjNDM7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO2xpbmcpLCBzaXplb2YobGluZykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwKJiM0MzsJCQkJICBTT19CSU5EVE9ERVZJQ0UsIEtFUk5FTF9TT0NLUFRSKGlmYWNlKSwKJiM0MzsJCQkJICBzdHJsZW4oaWZhY2UpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSAxOwomIzQzOwomIzQzOwlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX1NZTkNOVCwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdG9zKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt0b3MpLCBzaXplb2YodG9zKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcykKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiYjNDM7CWlmIChzay0mZ3Q7c2tfZmFtaWx5ID09IEFGX0lORVQ2KQomIzQzOwkJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsCiYjNDM7CQkJCQkgIElQVjZfVENMQVNTLCBLRVJORUxfU09DS1BUUigmYW1wO3RjbGFzcyksCiYjNDM7CQkJCQkgIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCwKIAkJCQlrZXlfc2VyaWFsX3QgcHNraWQpCiB7CkBAIC0xODE5LDI0ICYjNDM7MTg3MSw2NSBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogI2VuZGlmCiAKIAkvKiBTaW5nbGUgc3luIHJldHJ5ICovCi0JdGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIDEpOwomIzQzOwlyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtJmd0O3NvY2stJmd0O3NrLCAxKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihuY3RybC0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHRvIHNldCBUQ1BfU1lOQ05UIG9uIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJcWlkLCByZXQpOwomIzQzOwkJZ290byBlcnJfc29jazsKJiM0MzsJfQogCiAJLyogU2V0IFRDUCBubyBkZWxheSAqLwotCXRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CXJldCA9IG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihuY3RybC0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHRvIHNldCBUQ1BfTk9ERUxBWSBvbiBxdWV1ZSAlZCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCXFpZCwgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CX0KIAogCS8qCiAJICogQ2xlYW51cCB3aGF0ZXZlciBpcyBzaXR0aW5nIGluIHRoZSBUQ1AgdHJhbnNtaXQgcXVldWUgb24gc29ja2V0CiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJcmV0ID0gbnZtZV90Y3Bfc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihuY3RybC0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHRvIHNldCBTT19MSU5HRVIgb24gcXVldWUgJWQgZXJyICVkXG4mIzM0OywKJiM0MzsJCQlxaWQsIHJldCk7CiYjNDM7CQlnb3RvIGVycl9zb2NrOwomIzQzOwl9CiAKLQlpZiAoc29fcHJpb3JpdHkgJmd0OyAwKQotCQlzb2NrX3NldF9wcmlvcml0eShxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkgewomIzQzOwkJcmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkocXVldWUtJmd0O3NvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X2VycihuY3RybC0mZ3Q7ZGV2aWNlLAomIzQzOwkJCQkmIzM0O2ZhaWxlZCB0byBzZXQgU09fUFJJT1JJVFkgb24gcXVldWUgJWQgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkJcWlkLCByZXQpOwomIzQzOwkJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CQl9CiYjNDM7CX0KIAogCS8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovCi0JaWYgKG5jdHJsLSZndDtvcHRzLSZndDt0b3MgJmd0Oz0gMCkKLQkJaXBfc29ja19zZXRfdG9zKHF1ZXVlLSZndDtzb2NrLSZndDtzaywgbmN0cmwtJmd0O29wdHMtJmd0O3Rvcyk7CiYjNDM7CWlmIChuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zICZndDs9IDApIHsKJiM0MzsJCXJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkJJiMzNDtmYWlsZWQgdG8gc2V0IElQX1RPUyBvbiBxdWV1ZSAlZCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCQlxaWQsIHJldCk7CiYjNDM7CQkJZ290byBlcnJfc29jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssCiYjNDM7CQkJCQkgICAgICAgbmN0cmwtJmd0O29wdHMtJmd0O3Rvcyk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X2VycihuY3RybC0mZ3Q7ZGV2aWNlLAomIzQzOwkJCQkmIzM0O2ZhaWxlZCB0byBzZXQgSVBWNl9UQ0xBU1Mgb24gcXVldWUgJWQgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkJcWlkLCByZXQpOwomIzQzOwkJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CQl9CiYjNDM7CX0KIAogCS8qIFNldCAxMCBzZWNvbmRzIHRpbWVvdXQgZm9yIGljcmVzcCByZWN2bXNnICovCiAJcXVldWUtJmd0O3NvY2stJmd0O3NrLSZndDtza19yY3Z0aW1lbyA9IDEwICogSFo7CkBAIC0xODY0LDEwICYjNDM7MTk1Nyw4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsCiAKIAlpZiAobmN0cmwtJmd0O29wdHMtJmd0O21hc2sgJmFtcDsgTlZNRl9PUFRfSE9TVF9JRkFDRSkgewogCQljaGFyICppZmFjZSA9IG5jdHJsLSZndDtvcHRzLSZndDtob3N0X2lmYWNlOwotCQlzb2NrcHRyX3Qgb3B0dmFsID0gS0VSTkVMX1NPQ0tQVFIoaWZhY2UpOwogCi0JCXJldCA9IHNvY2tfc2V0c29ja29wdChxdWV1ZS0mZ3Q7c29jaywgU09MX1NPQ0tFVCwgU09fQklORFRPREVWSUNFLAotCQkJCSAgICAgIG9wdHZhbCwgc3RybGVuKGlmYWNlKSk7CiYjNDM7CQlyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2UocXVldWUtJmd0O3NvY2stJmd0O3NrLCBpZmFjZSk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKIAkJCSAgJiMzNDtmYWlsZWQgdG8gYmluZCB0byBpbnRlcmZhY2UgJXMgcXVldWUgJWQgZXJyICVkXG4mIzM0OywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jCmluZGV4IDc1YTI3NmQ3M2JlM2UuLmVkNDEzYWE1NjAxYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYwpAQCAtMTY5NiwxMCAmIzQzOzE2OTYsNjYgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spCiAJcmVhZF91bmxvY2tfYmgoJmFtcDtzay0mZ3Q7c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9OwomIzQzOwomIzQzOwlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtsaW5nKSwgc2l6ZW9mKGxpbmcpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpCiYjNDM7ewomIzQzOwlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3ByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gU0tfQ0FOX1JFVVNFOwomIzQzOwomIzQzOwlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULAomIzQzOwkJCQkgIFNPX1JFVVNFQUREUiwgS0VSTkVMX1NPQ0tQVFIoJmFtcDt2YWwpLAomIzQzOwkJCQkgIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt2YWwpLCBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdG9zID0gaW5ldF9zayhzayktJmd0O3Jjdl90b3M7CiYjNDM7CiYjNDM7CWlmICh0b3MgJmd0OyAwKQomIzQzOwkJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsCiYjNDM7CQkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dG9zKSwgc2l6ZW9mKHRvcykpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiYjNDM7CWlmIChzay0mZ3Q7c2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7CiYjNDM7CQlpbnQgdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktJmd0O3Jjdl9mbG93aW5mbyk7CiYjNDM7CiYjNDM7CQlpZiAodGNsYXNzICZndDsgMCkKJiM0MzsJCQlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLAomIzQzOwkJCQkJCSAgU09MX0lQVjYsIElQVjZfVENMQVNTLAomIzQzOwkJCQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt0Y2xhc3MpLAomIzQzOwkJCQkJCSAgc2l6ZW9mKHRjbGFzcykpOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS0mZ3Q7c29jazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLSZndDtzayk7CiAJaW50IHJldDsKIAogCXJldCA9IGtlcm5lbF9nZXRzb2NrbmFtZShzb2NrLApAQCAtMTcxNywxNCAmIzQzOzE3NzMsMjQgQEAgc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpCiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwomIzQzOwlyZXQgPSBudm1ldF90Y3Bfc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAotCWlmIChzb19wcmlvcml0eSAmZ3Q7IDApCi0JCXNvY2tfc2V0X3ByaW9yaXR5KHNvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiYjNDM7CWlmIChzb19wcmlvcml0eSAmZ3Q7IDApIHsKJiM0MzsJCXJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKIAkvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqLwotCWlmIChpbmV0LSZndDtyY3ZfdG9zICZndDsgMCkKLQkJaXBfc29ja19zZXRfdG9zKHNvY2stJmd0O3NrLCBpbmV0LSZndDtyY3ZfdG9zKTsKJiM0MzsJcmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3Rvcyhzb2NrLSZndDtzayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHNvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlyZXQgPSAwOwogCXdyaXRlX2xvY2tfYmgoJmFtcDtzb2NrLSZndDtzay0mZ3Q7c2tfY2FsbGJhY2tfbG9jayk7CkBAIC0yMDk4LDEwICYjNDM7MjE2NCwyNiBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpCiAJcG9ydC0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YSA9IHBvcnQ7CiAJcG9ydC0mZ3Q7ZGF0YV9yZWFkeSA9IHBvcnQtJmd0O3NvY2stJmd0O3NrLSZndDtza19kYXRhX3JlYWR5OwogCXBvcnQtJmd0O3NvY2stJmd0O3NrLSZndDtza19kYXRhX3JlYWR5ID0gbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5OwotCXNvY2tfc2V0X3JldXNlYWRkcihwb3J0LSZndDtzb2NrLSZndDtzayk7Ci0JdGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC0mZ3Q7c29jay0mZ3Q7c2spOwotCWlmIChzb19wcmlvcml0eSAmZ3Q7IDApCi0JCXNvY2tfc2V0X3ByaW9yaXR5KHBvcnQtJmd0O3NvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiYjNDM7CXJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIocG9ydC0mZ3Q7c29jay0mZ3Q7c2spOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gc2V0IFNPX1JFVVNFQUREUiBvbiBwb3J0IHNvY2tldCAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9zb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNldCBUQ1BfTk9ERUxBWSBvbiBwb3J0IHNvY2tldCAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9zb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzb19wcmlvcml0eSAmZ3Q7IDApIHsKJiM0MzsJCXJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShwb3J0LSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXByX2VycigmIzM0O2ZhaWxlZCB0byBzZXQgU09fUFJJT1JJVFkgb24gcG9ydCBzb2NrZXQgJWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgICByZXQpOwomIzQzOwkJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXJldCA9IGtlcm5lbF9iaW5kKHBvcnQtJmd0O3NvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKSZhbXA7cG9ydC0mZ3Q7YWRkciwKIAkJCXNpemVvZihwb3J0LSZndDthZGRyKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU29ja2V0IE9wdGlvbiBQYXRjaCBpbiBOVk1lL1RDUCBEcml2ZXJzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jYCBhbmQgYGRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNgLiBJdCYjMzk7cyByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHRob3NlIHN0YW5kYXJkIFRDUCBzb2NrZXQgaGVscGVycywgbGlrZSBgdGNwX3NvY2tfc2V0X3N5bmNudGAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGFuZCB0aGUgb3RoZXJzLCB3aXRoIGN1c3RvbSB3cmFwcGVycyB0aGF0IGFyZSBub3cgY2FsbGluZyBgZG9fc29ja19zZXRzb2Nrb3B0YC4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgJiMzNDtXaHk/JiMzNDsuIFdoeSB0aGUgY2hhbmdlIGluIGFwcHJvYWNoPyBMZXQmIzM5O3MgZGlnIGludG8gYHRjcF9zb2NrX3NldF9zeW5jbnRgIGl0c2VsZiBpbiB0aGUga2VybmVsIGNvZGUuCgpSaWdodCwgc28gaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjb25zb2xpZGF0aW5nIHRoZXNlIHNvY2tldCBvcHRpb24gc2V0dGluZ3MgdGhyb3VnaCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gTm93LCBpcyB0aGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlPyBJcyBpdCByZWFjaGFibGUgYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGU/IEFic29sdXRlbHkuIFRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyBhcmUgZWFzaWx5IHNwdW4gdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBTbyB0aG9zZSBjb2RlIHBhdGhzIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyAqaG93KiBzb2NrZXQgb3B0aW9ucyBhcmUgc2V0LCB3aGljaCByYWlzZXMgZmxhZ3MgZm9yIG1lLgoKTGV0IG1lIHF1aWNrbHkgc2VhcmNoIGZvciBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGFuZCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYC4gWWVwLCBjb25maXJtZWQuIFRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgTlZNZSBvdmVyIFRDUC4gQW5kIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoICppcyogYWRkaW5nIGVycm9yIGNoZWNraW5nIG5vdyAobGlrZSB0aGUgYGlmIChyZXQpIHsgZGV2X2VyciguLi4pOyBnb3RvIGVycl9zb2NrOyB9YCBibG9ja3MpLiBQcmV2aW91c2x5LCB3ZXJlIHRoZXNlIHNvY2tldCBvcHRpb24gaGVscGVycyBsaWtlIGB0Y3Bfc29ja19zZXRfc3luY250YCB2b2lkIGZ1bmN0aW9ucyBvciBkaWQgdGhlIHJldHVybiB2YWx1ZSBnZXQgaWdub3JlZD8gR290dGEgY2hlY2sgYHRjcF9zb2NrX3NldF9zeW5jbnRgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc29ja19zZXRfc3luY250JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE3OTg9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA1LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgwNjpzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xODI5PXN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTg3My1cdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4NzQ6XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODc1LVx0aWYgKHJldCkge1xuLS1cbmluY2x1ZGUvbGludXgvdGNwLmg9NjUyPXZvaWQgdGNwX3NvY2tfc2V0X3F1aWNrYWNrKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCk7XG5pbmNsdWRlL2xpbnV4L3RjcC5oOjY1MzppbnQgdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xuaW5jbHVkZS9saW51eC90Y3AuaC02NTQtaW50IHRjcF9zb2NrX3NldF91c2VyX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0zNzA5PUVYUE9SVF9TWU1CT0wodGNwX3NvY2tfc2V0X3F1aWNrYWNrKTtcbm5ldC9pcHY0L3RjcC5jLTM3MTAtXG5uZXQvaXB2NC90Y3AuYzozNzExOmludCB0Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbm5ldC9pcHY0L3RjcC5jLTM3MTIte1xuLS1cbm5ldC9pcHY0L3RjcC5jLTM3MTgtfVxubmV0L2lwdjQvdGNwLmM6MzcxOTpFWFBPUlRfU1lNQk9MKHRjcF9zb2NrX3NldF9zeW5jbnQpO1xubmV0L2lwdjQvdGNwLmMtMzcyMC1cbi0tXG5uZXQvaXB2NC90Y3AuYz0zODM3PWludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdGNwLmMtMzkxNy1cdGNhc2UgVENQX1NZTkNOVDpcbm5ldC9pcHY0L3RjcC5jOjM5MTg6XHRcdHJldHVybiB0Y3Bfc29ja19zZXRfc3luY250KHNrLCB2YWwpO1xubmV0L2lwdjQvdGNwLmMtMzkxOS1cdGNhc2UgVENQX1VTRVJfVElNRU9VVDpcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz0yNDM9c3RhdGljIGludCB0Y3Bfd3JpdGVfdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtMjUzLVx0XHRcdF9fZHN0X25lZ2F0aXZlX2FkdmljZShzayk7XG5uZXQvaXB2NC90Y3BfdGltZXIuYzoyNTQ6XHRcdC8qIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiB0Y3Bfc29ja19zZXRfc3luY250KCkgKi9cbm5ldC9pcHY0L3RjcF90aW1lci5jLTI1NS1cdFx0cmV0cnlfdW50aWwgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz00NTk9c3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00NjctXHQvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuLlxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDY4Olx0ICogUGFpcmVkIHdpdGggV1JJVEVfT05DRSgpIGluIHRjcF9zb2NrX3NldF9zeW5jbnQoKVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDY5LVx0ICovXG4tLVxubmV0L3N1bnJwYy94cHJ0c29jay5jPTIyODA9c3RhdGljIHZvaWQgeHNfdGNwX3NldF9zb2NrZXRfdGltZW91dHMoc3RydWN0IHJwY194cHJ0ICp4cHJ0LFxuLS1cbm5ldC9zdW5ycGMveHBydHNvY2suYy0yMzE2LVx0aWYgKHQgXHUwMDNjPSBzeW5fcmV0cmllcylcbm5ldC9zdW5ycGMveHBydHNvY2suYzoyMzE3Olx0XHR0Y3Bfc29ja19zZXRfc3luY250KHNvY2stXHUwMDNlc2ssIHQgLSAxKTtcbm5ldC9zdW5ycGMveHBydHNvY2suYy0yMzE4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDAzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBOVk1lIFRDUCBTb2NrZXQgT3B0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IE5WTWUgVENQIGhhbmRsZXMgc29ja2V0IG9wdGlvbnMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgc2V0dGluZyB0aGUgc3luY2hyb25pemF0aW9uIGNvdW50LiBJbnN0ZWFkIG9mIGRpcmVjdGx5IGNhbGxpbmcgYHRjcF9zb2NrX3NldF9zeW5jbnRgLCBpdCYjMzk7cyBub3cgdXNpbmcgYG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGRvX3NvY2tfc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgYSBzaGlmdDsgSSYjMzk7bSBjdXJpb3VzIHdoeS4gV2h5IHRoZSBpbmRpcmVjdGlvbj8gU29tZXRoaW5nIG11c3QgYmUgZGlmZmVyZW50LiBBaCwgSSBzZWUsIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGBzb2NrX3NldHNvY2tvcHRgIGlzIHVuZGVyZ29pbmcgc29tZSBraW5kIG9mIGNoYW5nZSBvciBpcyBiZWluZyBkZXByZWNhdGVkIGVudGlyZWx5LiBSaWdodCwgbWFrZXMgc2Vuc2UuIFRvIGJlIHN1cmUsIEkgc2hvdWxkIHJlYWxseSB2ZXJpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBzZWUgd2hhdCB0aGUgdW5kZXJseWluZyBjaGFuZ2UgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc29ja19zZXRzb2Nrb3B0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE3Nzc9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc4MC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3ODE6XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3ODItXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE3ODU9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3ODYte1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc4NzpcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzg4LVx0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE3OTE9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyICppZmFjZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTIte1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc5MzpcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTQtXHRcdFx0XHQgIFNPX0JJTkRUT0RFVklDRSwgS0VSTkVMX1NPQ0tQVFIoaWZhY2UpLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE3OTg9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODAxLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgwMjpcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODAzLVx0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTgwNj1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA3LXtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4MDg6XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA5LVx0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTgxMj1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0b3MpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODEzLXtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4MTQ6XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgxNS1cdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE4MTg9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MjEtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgyMjpcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNixcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MjMtXHRcdFx0XHRcdCAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRjbGFzcyksXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNjk5PXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MDItXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3MDM6XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTcwNC1cdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzA3PXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzA4LXtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTcwOTpcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MTAtXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzEzPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzE2LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxNzE3Olx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzE4LVx0XHRcdFx0ICBTT19SRVVTRUFERFIsIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzIyPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTcyNS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTcyNjpcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MjctXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3MzA9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MzQtXHRpZiAodG9zIFx1MDAzZSAwKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxNzM1Olx0XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzM2LVx0XHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3NDA9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NDYtXHRcdGlmICh0Y2xhc3MgXHUwMDNlIDApXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3NDc6XHRcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzQ4LVx0XHRcdFx0XHRcdCAgU09MX0lQVjYsIElQVjZfVENMQVNTLFxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0xODg4PWludCBzb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3AsXG5pbmNsdWRlL25ldC9zb2NrLmgtMTg4OS1cdFx0ICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pO1xuaW5jbHVkZS9uZXQvc29jay5oOjE4OTA6aW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuaW5jbHVkZS9uZXQvc29jay5oLTE4OTEtXHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XG4tLVxuaW9fdXJpbmcvY21kX25ldC5jPTUyPXN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX2NtZF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxuaW9fdXJpbmcvY21kX25ldC5jLTY3LVxuaW9fdXJpbmcvY21kX25ldC5jOjY4Olx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWxfcyxcbmlvX3VyaW5nL2NtZF9uZXQuYy02OS1cdFx0XHRcdCAgb3B0bGVuKTtcbi0tXG5uZXQvc29ja2V0LmM9MjMzMD1zdGF0aWMgYm9vbCBzb2NrX3VzZV9jdXN0b21fc29sX3NvY2tldChjb25zdCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC9zb2NrZXQuYy0yMzM0LVxubmV0L3NvY2tldC5jOjIzMzU6aW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxubmV0L3NvY2tldC5jLTIzMzYtXHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbi0tXG5uZXQvc29ja2V0LmMtMjM3My19XG5uZXQvc29ja2V0LmM6MjM3NDpFWFBPUlRfU1lNQk9MKGRvX3NvY2tfc2V0c29ja29wdCk7XG5uZXQvc29ja2V0LmMtMjM3NS1cbi0tXG5uZXQvc29ja2V0LmM9MjM3OT1pbnQgX19zeXNfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICp1c2VyX29wdHZhbCxcbi0tXG5uZXQvc29ja2V0LmMtMjM5Mi1cbm5ldC9zb2NrZXQuYzoyMzkzOlx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvc29ja2V0LmMtMjM5NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOVk1lIFRDUCBQYXRjaCBSZXZpZXcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgTlZNZSBUQ1Agb3ZlciB0byB1c2luZyBgZG9fc29ja19zZXRzb2Nrb3B0YCBpbnN0ZWFkIG9mIHRoZSBtb3JlIGRpcmVjdCBoZWxwZXIgYHRjcF9zb2NrX3NldF9zeW5jbnRgLiBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgdGhpcyBjaG9pY2UuIFdoeSB0aGUgY2hhbmdlPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBtYXliZSBgdGNwX3NvY2tfc2V0X3N5bmNudGAgZG9lc24mIzM5O3QgcHJvdmlkZSBzdWZmaWNpZW50IGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIGl0IGRvZXNuJiMzOTt0IHBlcmZvcm0gdGhlIHNhbWUgY2hlY2tzIGFzIGBkb19zb2NrX3NldHNvY2tvcHRgLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgZGlyZWN0IGhlbHBlciBpcyBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbC4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBnbyBhbmQgc2VlIGhvdyBgdGNwX3NvY2tfc2V0X3N5bmNudGAgd29ya3MsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYG5ldC9pcHY0L3RjcC5jYCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgbGltaXRhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgdGNwX3NvY2tfc2V0X3N5bmNudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3RjcC5oPTY1Mj12b2lkIHRjcF9zb2NrX3NldF9xdWlja2FjayhzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xuaW5jbHVkZS9saW51eC90Y3AuaDo2NTM6aW50IHRjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcbmluY2x1ZGUvbGludXgvdGNwLmgtNjU0LWludCB0Y3Bfc29ja19zZXRfdXNlcl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCk7XG4tLVxubmV0L2lwdjQvdGNwLmM9MzcwOT1FWFBPUlRfU1lNQk9MKHRjcF9zb2NrX3NldF9xdWlja2Fjayk7XG5uZXQvaXB2NC90Y3AuYy0zNzEwLVxubmV0L2lwdjQvdGNwLmM6MzcxMTppbnQgdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG5uZXQvaXB2NC90Y3AuYy0zNzEyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA0MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgdGNwX3NvY2tfc2V0X3N5bmNudGAgaW4gYG5ldC9pcHY0L3RjcC5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYHRjcF9zb2NrX3NldF9zeW5jbnRgIGluIHRoZSBJUHY0IFRDUCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgU1lOIGZsb29kIHByb3RlY3Rpb24gYW5kIGNvbm5lY3Rpb24gcmF0ZSBsaW1pdGluZy4gSeKAmW0gYmV0dGluZyB0aGlzIGRpcmVjdGx5IGluZmx1ZW5jZXMgaG93IGFnZ3Jlc3NpdmVseSB3ZSByZXNwb25kIHRvIFNZTiBwYWNrZXRzLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgd2UmIzM5O3JlIHNldHRpbmcgb3IgY29uZmlndXJpbmcgYSBzeW5jaHJvbml6YXRpb24gY291bnQsIHdoaWNoIGxpa2VseSByZWxhdGVzIHRvIGhvdyBtYW55IG91dHN0YW5kaW5nIFNZTl9SRUNWIGNvbm5lY3Rpb25zIGFyZSBhbGxvd2VkIGJlZm9yZSB3ZSBzdGFydCBzaGVkZGluZyBpbmNvbWluZyBTWU5zLiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdmFyaWFibGVzIGludm9sdmVkLCBob3cgdGhlIGNvdW50IGlzIHVwZGF0ZWQgKGxpa2VseSBiYXNlZCBvbiBzb2NrZXQgc3RhdGUgYW5kIGV2ZW50cyksIGFuZCB3aGV0aGVyIGFueSBhZGFwdGl2ZSBtZWNoYW5pc21zIGFyZSBlbXBsb3llZC4gSSBleHBlY3QgdG8gc2VlIGNoZWNrcyBhZ2FpbnN0IGdsb2JhbCB0aHJlc2hvbGRzIG9yIHBlci1zb2NrZXQgc2V0dGluZ3MuIEtub3dpbmcgdGhpcyBnaXZlcyB0aGUgYWJpbGl0eSB0byBwcm9wZXJseSB0dW5lIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3MsIHBhcnRpY3VsYXJseSB1bmRlciBoZWF2eSBsb2FkIG9yIGluIHRoZSBwcmVzZW5jZSBvZiBtYWxpY2lvdXMgdHJhZmZpYy4gSSBhbSBsb29raW5nIGZvciB0aGUgY29uZGl0aW9uYWwgYnJhbmNoZXMsIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCAoaWYgYW55KSwgYW5kIGFueSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIGxpa2UgbWVtb3J5IG1hbmFnZW1lbnQgb3IgbmV0d29ya2luZyBkZXZpY2VzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcmV2ZWFscyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzcxMTpcdGludCB0Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbjM3MTI6XHR7XG4zNzEzOlx0XHRpZiAodmFsIFx1MDAzYyAxIHx8IHZhbCBcdTAwM2UgTUFYX1RDUF9TWU5DTlQpXG4zNzE0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzcxNTpcdFxuMzcxNjpcdFx0V1JJVEVfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19zeW5fcmV0cmllcywgdmFsKTtcbjM3MTc6XHRcdHJldHVybiAwO1xuMzcxODpcdH1cbjM3MTk6XHRFWFBPUlRfU1lNQk9MKHRjcF9zb2NrX3NldF9zeW5jbnQpO1xuMzcyMDpcdFxuMzcyMTpcdGludCB0Y3Bfc29ja19zZXRfdXNlcl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbjM3MjI6XHR7XG4zNzIzOlx0XHQvKiBDYXAgdGhlIG1heCB0aW1lIGluIG1zIFRDUCB3aWxsIHJldHJ5IG9yIHByb2JlIHRoZSB3aW5kb3dcbjM3MjQ6XHRcdCAqIGJlZm9yZSBnaXZpbmcgdXAgYW5kIGFib3J0aW5nIChFVElNRURPVVQpIGEgY29ubmVjdGlvbi5cbjM3MjU6XHRcdCAqL1xuMzcyNjpcdFx0aWYgKHZhbCBcdTAwM2MgMClcbjM3Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zNzI4Olx0XG4zNzI5Olx0XHRXUklURV9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX3VzZXJfdGltZW91dCwgdmFsKTtcbjM3MzA6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcxNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIFNvY2tldCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE5WTWUgVENQIGNvZGUsIGFuZCBzb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0IHdpdGggdGhpcyBzb2NrZXQgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIHR3byBmdW5jdGlvbiBjYWxsczogYHRjcF9zb2NrX3NldF9zeW5jbnRgIGFuZCBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLiBUaGUgZmlyc3Qgb25lLCBgdGNwX3NvY2tfc2V0X3N5bmNudGAsIHJldHVybnMgYW4gaW50ZWdlciwgcmlnaHQ/IFlldCwgdGhpcyBjb2RlIGlzIGp1c3QgYmxvd2luZyBvZmYgdGhlIHJldHVybiB2YWx1ZS4gSXMgdGhhdCBpbnRlbnRpb25hbD8gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHNvbWUga2luZCBvZiBlcnJvciBjaGVja2luZyBpZiBpdCYjMzk7cyByZXR1cm5pbmcgYSB2YWx1ZS4gSXQmIzM5O3Mgc2V0dGluZyB0aGUgU1lOIHJldHJ5IGNvdW50IHRvIDEsIHdoaWNoIG1pZ2h0IGJlIGZpbmUsIGJ1dCBpZ25vcmluZyBhIHBvdGVudGlhbCBmYWlsdXJlIHNlZW1zIHJpc2t5LgoKVGhlbiB0aGVyZSYjMzk7cyBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLiBSaWdodCwgdGhhdCYjMzk7cyBhIHZvaWQgZnVuY3Rpb24sIHNvIHRoZXJlJiMzOTtzIG5vIHJldHVybiB2YWx1ZSB0byBjaGVjay4gQXQgbGVhc3QsIHRoYXQmIzM5O3MgYXMgSSByZWNhbGwuIEl0JiMzOTtzIGFsd2F5cyBwb3NzaWJsZSBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBzbyBJIG5lZWQgdG8gZ28gbG9vayBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGNwX3NvY2tfc2V0X25vZGVsYXlgIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhIHBvdGVudGlhbCBpc3N1ZSBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgYW5kIHdoYXQgc2lkZSBlZmZlY3RzIGl0IG1pZ2h0IGhhdmUsIG9yIHdoYXQgaXQgY2FuIHJldHVybiBpbiB0ZXJtcyBvZiBpbnRlcm5hbCBzaWduYWxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgdGNwX3NvY2tfc2V0X25vZGVsYXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90Y3AuaD02NTA9dm9pZCBfX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaywgYm9vbCBvbik7XG5pbmNsdWRlL2xpbnV4L3RjcC5oOjY1MTp2b2lkIHRjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL2xpbnV4L3RjcC5oLTY1Mi12b2lkIHRjcF9zb2NrX3NldF9xdWlja2FjayhzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTM2Njg9dm9pZCBfX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaywgYm9vbCBvbilcbi0tXG5uZXQvaXB2NC90Y3AuYy0zNjc3LVxubmV0L2lwdjQvdGNwLmM6MzY3ODp2b2lkIHRjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcC5jLTM2Nzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMzNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNvY2tldCBPcHRpbWl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgb3V0IGB0Y3Bfc29ja19zZXRfbm9kZWxheShzaylgIGZvciBgZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwgS0VSTkVMX1NPQ0tQVFIoJmFtcDt2YWwpLCBzaXplb2YodmFsKSlgLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzICp3aHkqPyBXaGF0JiMzOTtzIHRoZSBkcml2aW5nIGZvcmNlIGJlaGluZCB0aGlzIGNoYW5nZT8gSXMgaXQgc2ltcGx5IGEgbWF0dGVyIG9mIGVuc3VyaW5nIHRoZSBzb2NrZXQgb3B0aW9uIGlzIHNldCB3aXRoIGFic29sdXRlIGNlcnRhaW50eSwgb3IgaXMgdGhlcmUgc29tZXRoaW5nIG1vcmUgc3VidGxlIGF0IHBsYXkgaGVyZT8KClJpZ2h0LCBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHRoZSBsYXR0ZXIuIGBkb19zb2NrX3NldHNvY2tvcHRgIHByb2JhYmx5IGhhbmRsZXMgbW9yZSB0aGFuIGp1c3QgdGhlIGRpcmVjdCBzZXR0aW5nIG9mIHRoZSBvcHRpb24uIEl0IGxpa2VseSBpbmNvcnBvcmF0ZXMgc29tZSB2aXRhbCBsb2NraW5nIG1lY2hhbmlzbXMgb3IgcGVyaGFwcyBjYWxscyBpbnRvIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgaG9va3MuIFRoYXQmIzM5O3MgdGhlIHJlYWwgcG90ZW50aWFsIHZhbHVlLWFkZCBoZXJlIOKAkyBpbnZva2luZyBCUEYgaG9va3MgaXMgYSBkZWZpbml0ZSBwb3NzaWJpbGl0eSEgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBodW5jaC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvc29ja2V0LmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbCBhbmQgc2VlIHdoYXQgaXMgYWN0dWFsbHkgZXhlY3V0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NvY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzM1Olx0aW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuMjMzNjpcdFx0XHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4yMzM3Olx0e1xuMjMzODpcdFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzO1xuMjMzOTpcdFx0Y2hhciAqa2VybmVsX29wdHZhbCA9IE5VTEw7XG4yMzQwOlx0XHRpbnQgZXJyO1xuMjM0MTpcdFxuMjM0MjpcdFx0aWYgKG9wdGxlbiBcdTAwM2MgMClcbjIzNDM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMzQ0Olx0XG4yMzQ1Olx0XHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7XG4yMzQ2Olx0XHRpZiAoZXJyKVxuMjM0NzpcdFx0XHRnb3RvIG91dF9wdXQ7XG4yMzQ4Olx0XG4yMzQ5Olx0XHRpZiAoIWNvbXBhdClcbjIzNTA6XHRcdFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIFx1MDAyNmxldmVsLCBcdTAwMjZvcHRuYW1lLFxuMjM1MTpcdFx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBcdTAwMjZvcHRsZW4sXG4yMzUyOlx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZrZXJuZWxfb3B0dmFsKTtcbjIzNTM6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yMzU0Olx0XHRcdGdvdG8gb3V0X3B1dDtcbjIzNTU6XHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbjIzNTY6XHRcdFx0ZXJyID0gMDtcbjIzNTc6XHRcdFx0Z290byBvdXRfcHV0O1xuMjM1ODpcdFx0fVxuMjM1OTpcdFxuMjM2MDpcdFx0aWYgKGtlcm5lbF9vcHR2YWwpXG4yMzYxOlx0XHRcdG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGtlcm5lbF9vcHR2YWwpO1xuMjM2MjpcdFx0b3BzID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKTtcbjIzNjM6XHRcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUIFx1MDAyNlx1MDAyNiAhc29ja191c2VfY3VzdG9tX3NvbF9zb2NrZXQoc29jaykpXG4yMzY0Olx0XHRcdGVyciA9IHNvY2tfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuMjM2NTpcdFx0ZWxzZSBpZiAodW5saWtlbHkoIW9wcy1cdTAwM2VzZXRzb2Nrb3B0KSlcbjIzNjY6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4yMzY3Olx0XHRlbHNlXG4yMzY4Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VzZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsXG4yMzY5Olx0XHRcdFx0XHRcdCAgICBvcHRsZW4pO1xuMjM3MDpcdFx0a2ZyZWUoa2VybmVsX29wdHZhbCk7XG4yMzcxOlx0b3V0X3B1dDpcbjIzNzI6XHRcdHJldHVybiBlcnI7XG4yMzczOlx0fVxuMjM3NDpcdEVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNzMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTWUgVENQIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIHNvIHRoZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmUuIEl0JiMzOTtzIGNhbGxpbmcgYHNlY3VyaXR5X3NvY2tldF9zZXRzb2Nrb3B0YCBhbmQsIGltcG9ydGFudGx5LCBgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgc2hpZnQuIE5vdywgdGhlIE5WTWUgVENQIGRyaXZlciByZXNwZWN0cyBMU01zIGFuZCBCUEYgY2dyb3VwIGhvb2tzIGZvciBzb2NrZXQgb3B0aW9ucywgbWVhbmluZyBCUEYgcHJvZ3JhbXMgY2FuIG5vdyBpbnRlcmNlcHQgYW5kICptb2RpZnkqIHRob3NlIG9wdGlvbnMsIG9yIExTTXMgY2FuIGZsYXQtb3V0IGRlbnkgdGhlbS4gVGhhdOKAmXMgYSBnYW1lIGNoYW5nZXIgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIQoKQW5kIGhlcmXigJlzIGFub3RoZXIgaW50ZXJlc3Rpbmcgd3JpbmtsZTogdGhpcyBwYXRjaCBpbmNsdWRlcyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIElmIGBkb19zb2NrX3NldHNvY2tvcHRgIGZhaWxzLCBpdCBub3cgZXJyb3JzIG91dCBhbmQgdGhlIHF1ZXVlIGFsbG9jYXRpb24gZmFpbHMuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgSSBhYnNvbHV0ZWx5IG5lZWQgdG8gZnV6eiwgZ2l2ZW4gaXRzIGludGVyYWN0aW9uIHdpdGggQlBGIGFuZCBMU01zIOKAkyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgcmlnaHQgdGhlcmUuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGU/IFllcywgTlZNZSBUQ1AgaXMgYSByZWFsIHRoaW5nLCBzbyBpdCAqaXMqIHJlYWNoYWJsZS4gVGltZSB0byBpZGVudGlmeSB0aGUgbWFpbiBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBMb29rcyBsaWtlIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAsIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBleGFtaW5lLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvY2tldCBvcHRpb24gc2V0dGluZyBvY2N1cnMuCgpCZWZvcmUgZGl2aW5nIGluLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBOVk1lIFRDUC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3IuIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfVENQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9Njc9Y29uZmlnIE5WTUVfRkNcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTgyLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo4Mzpjb25maWcgTlZNRV9UQ1BcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctODQtXHR0cmlzdGF0ZSBcJiMzNDtOVk0gRXhwcmVzcyBvdmVyIEZhYnJpY3MgVENQIGhvc3QgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy05OS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6MTAwOmNvbmZpZyBOVk1FX1RDUF9UTFNcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgVExTIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzExMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIExldCYjMzk7cyBkbyB0aGlzLiBJJiMzOTtsbCBkaXN0aWxsIHRob3NlIHRob3VnaHRzIGFuZCBwcmVzZW50IHRoZW0gYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZSwgZ2VhcmVkIHRvd2FyZHMgc29tZW9uZSB3aG8gKmdldHMqIGl0LiBIZXJlIHdlIGdvOgoKKipBbmFseXppbmcgdGhlIE9iamVjdGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvcmUgZnVuY3Rpb24gb3IgdGhlIG1haW4gb2JqZWN0IG9mIHRoZSB0YXNrIHRvIGJlIGRlZmluZWQuIEZyb20gdGhlIGluaXRpYWwgcHJvbXB0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byBnZXQgb3V0IG9mIHRoaXMgYW5kIHdoYXQgaXMgdGhlIGdvYWwuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGEgc3BlY2lmaWMgYXJlYSwgYW5kIGZvY3VzIG9uIHRoZSBwYXJhbWV0ZXJzIG9mIHRoYXQgYXJlYSwgdG8gZmluZCBhIG5pY2hlIGZvciB0aGUgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHlwZSBvZiByZXNwb25zZSBpcyBuZWVkZWQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGZhY3R1YWwgc3VtbWFyeSwgYSBudWFuY2VkIGludGVycHJldGF0aW9uLCBvciBhIGNvbXBsZXggc3ludGhlc2lzPyBUaGUgdG9uZSBhbmQgc3R5bGUgb2YgdGhlIHJlc3BvbnNlIGFyZSBqdXN0IGFzIGNydWNpYWwuIElzIHRoaXMgYW4gaW5mb3JtYWwgY2hhdCwgYSBmb3JtYWwgcmVwb3J0LCBvciBzb21ldGhpbmcgaW4gYmV0d2Vlbj8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byB0YWlsb3IgZXZlcnl0aGluZyB0byBtYXRjaCB0aGF0LiBBZnRlciBhbGwsIHRoZSBjb250ZXh0IHByb3ZpZGVkIGlzLCB3ZWxsLCBpdCBuZWVkcyBmdXJ0aGVyIGNvbnRleHQgZnJvbSB0aGUgdXNlciwgYnV0IHRoZSBnb2FsIHdpbGwgYmUgY2xlYXIuIEkgY2FuIHdvcmsgd2l0aCB0aGF0LCBob3dldmVyLCBhbmQgZXh0cmFwb2xhdGUsIGZvciBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVUX1RDUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzg4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBMaW51eCBrZXJuZWwgZXhwZXJ0OgoKKipLY29uZmlnIENoZWNrcG9pbnQ6IE5WTWUgVGFyZ2V0KioKCk9rYXksIGJlZm9yZSBkaXZpbmcgYW55IGRlZXBlciBpbnRvIHRoZSBjb2RlLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyBvYnZpb3VzIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGUgTlZNZSB0YXJnZXQgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYCBmaWxlLCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY2hlY2sgaWYgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vayBhIGNydWNpYWwgZGVwZW5kZW5jeSBvciBhbiBvdmVybG9va2VkIGZsYWcuIFBlcmhhcHMgYSBzcGVjaWZpYyBmZWF0dXJlIHJlbGF0ZWQgdG8gd2hhdCBJJiMzOTttIGxvb2tpbmcgaW50byBpcyBnYXRlZCBiZWhpbmQgYSBLY29uZmlnIG9wdGlvbiB0aGF0IGlzbiYjMzk7dCBzZXQgdGhlIHdheSBJIGV4cGVjdC4gT3IgbWF5YmUgdGhlcmUmIzM5O3MgYSBzZXR0aW5nIHRoYXQgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnN5c3RlbSBJJiMzOTttIGludGVyZXN0ZWQgaW4gYW5kIEkgZm9yZ290IHRvIGFjY291bnQgZm9yIGl0LiBUaW1lIGZvciBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgY2hhc2luZyBhIGdob3N0LiBJJiMzOTtsbCByZXZpZXcgaXQgYW5kIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGUgS2NvbmZpZyBvcHRpb25zLiBJIGRvIG5vdCB3YW50IHRvIHdhc3RlIG15IHRpbWUuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgYmFzaWMgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVk1FX1RBUkdFVF9UQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnPTc0PWNvbmZpZyBOVk1FX1RBUkdFVF9GQ0xPT1Bcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6ODc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk2LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjk3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BfVExTXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTgtXHRib29sIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgyMAoJCQkJCQkJb3V0cHV0OiA3MgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHdyaXR0ZW4gYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKk5WTWUgb3ZlciBUQ1AgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGNvbmZpZ3VyaW5nIE5WTWUgb3ZlciBUQ1AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgTlZNRV9UQ1BgIGFuZCBgTlZNRV9UQVJHRVRfVENQYC4gVGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIEkmIzM5O20gd29ya2luZyB3aXRoLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gV2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZXM/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbXVzdCBiZSBpbiBwbGFjZSBvciBlbmFibGVkIGZvciB0aGVzZSB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyByZXF1aXJlZD8gRG8gdGhleSByZWx5IG9uIGNlcnRhaW4gbmV0d29ya2luZyBwYXJhbWV0ZXJzIGJlaW5nIHNldD8gV2hhdCBhYm91dCBzZWN1cml0eSBwcm90b2NvbHMgYW5kIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgLSBob3cgZG8gdGhleSB0aWUgaW4/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIGEgc3RhYmxlIGFuZCBwZXJmb3JtYW50IE5WTWUtb0YgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODM6XHRjb25maWcgTlZNRV9UQ1BcbiAgODQ6XHRcdHRyaXN0YXRlIFwmIzM0O05WTSBFeHByZXNzIG92ZXIgRmFicmljcyBUQ1AgaG9zdCBkcml2ZXJcJiMzNDtcbiAgODU6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA4NjpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICA4NzpcdFx0c2VsZWN0IENSQzMyXG4gIDg4Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICA4OTpcdFx0c2VsZWN0IE5WTUVfRkFCUklDU1xuICA5MDpcdFx0aGVscFxuICA5MTpcdFx0ICBUaGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBOVk1lIG92ZXIgRmFicmljcyBwcm90b2NvbCB1c2luZ1xuICA5MjpcdFx0ICB0aGUgVENQIHRyYW5zcG9ydC4gIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgcmVtb3RlIGJsb2NrIGRldmljZXNcbiAgOTM6XHRcdCAgZXhwb3J0ZWQgdXNpbmcgdGhlIE5WTWUgcHJvdG9jb2wgc2V0LlxuICA5NDpcdFxuICA5NTpcdFx0ICBUbyBjb25maWd1cmUgYSBOVk1lIG92ZXIgRmFicmljcyBjb250cm9sbGVyIHVzZSB0aGUgbnZtZS1jbGkgdG9vbFxuICA5NjpcdFx0ICBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC1udm1lL252bWUtY2xpLlxuICA5NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODc6XHRjb25maWcgTlZNRV9UQVJHRVRfVENQXG4gIDg4Olx0XHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiAgODk6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA5MDpcdFx0ZGVwZW5kcyBvbiBOVk1FX1RBUkdFVFxuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBUaGlzIGVuYWJsZXMgdGhlIE5WTWUgVENQIHRhcmdldCBzdXBwb3J0LCB3aGljaCBhbGxvd3MgZXhwb3J0aW5nIE5WTWVcbiAgOTM6XHRcdCAgZGV2aWNlcyBvdmVyIFRDUC5cbiAgOTQ6XHRcbiAgOTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgOTY6XHRcbiAgOTc6XHRjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xuICA5ODpcdFx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcJiMzNDtcbiAgOTk6XHRcdGRlcGVuZHMgb24gTlZNRV9UQVJHRVRfVENQXG4gMTAwOlx0XHRzZWxlY3QgTkVUX0hBTkRTSEFLRVxuIDEwMTpcdFx0c2VsZWN0IFRMU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUwMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBzdW1tYXJpemVkIGFzIGEgdGhvdWdodCBwcm9jZXNzOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBOVk1FX1RDUGAgaGFzIGEgYml0IG9mIGEgY2hhaW4gZ29pbmcgb24uIEl0JiMzOTtzIGJ1aWx0IG9uIHRvcCBvZiBib3RoIGBJTkVUYCBhbmQgYEJMT0NLYC4gVGhhdCBtYWtlcyBzZW5zZTsgeW91IG5lZWQgdGhlIG5ldHdvcmsgZm9yIFRDUCBhbmQgdGhlIGJsb2NrIGRldmljZSBsYXllciBmb3IgdGhlIE5WTWUgZGF0YS4gTm93LCBgTlZNRV9UQVJHRVRfVENQYCBtaXJyb3JzIHRoYXQsIHJlbHlpbmcgb24gYElORVRgIGFnYWluIChmb3IgdGhlIFRDUCBwYXJ0KSBhbmQgYE5WTUVfVEFSR0VUYCBmb3IgdGhlIE5WTWUgdGFyZ2V0IGZ1bmN0aW9uYWxpdHkuIFNpbmNlIGBOVk1FX1RBUkdFVF9UQ1BgIGRpcmVjdGx5IGRlcGVuZHMgb24gYE5WTUVfVEFSR0VUYCwgd2hpY2ggaXMgYWxzbyBhIGRlcGVuZGVuY3kgb2YgYE5WTUVfVENQYCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBOVk1FX1RBUkdFVGAgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9UQVJHRVQkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0yLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjM6Y29uZmlnIE5WTUVfVEFSR0VUXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgVGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgTlZNZSBUYXJnZXQgRHJpdmVycyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGFyb3VuZCBsaW5lIDMsIHNpbmNlIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWNsYXJlZCwgb3IgYXQgbGVhc3Qgd2hlcmUgdGhlIGluaXRpYWwgb3ZlcnZpZXcgb2YgdGhlIG1vZHVsZSBpcyBwcmVzZW50ZWQuIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzIGZvciBOVk1lIHRhcmdldCBkcml2ZXIgY29uZmlndXJhdGlvbnMuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbW9kdWxlcyBhcmUgZW5hYmxlZCwgYW55IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGtub2JzIGF2YWlsYWJsZSB0byB0YWlsb3IgdGhpcyBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRjb25maWcgTlZNRV9UQVJHRVRcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O05WTWUgVGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDY6XHRcdHNlbGVjdCBDT05GSUdGU19GU1xuICAgNzpcdFx0c2VsZWN0IE5WTUVfS0VZUklORyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXG4gICA4Olx0XHRzZWxlY3QgS0VZUyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXG4gICA5Olx0XHRzZWxlY3QgU0dMX0FMTE9DXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoaXMgZW5hYmxlZCB0YXJnZXQgc2lkZSBzdXBwb3J0IGZvciB0aGUgTlZNZSBwcm90b2NvbCwgdGhhdCBpc1xuICAxMjpcdFx0ICBpdCBhbGxvd3MgdGhlIExpbnV4IGtlcm5lbCB0byBpbXBsZW1lbnQgTlZNZSBzdWJzeXN0ZW1zIGFuZFxuICAxMzpcdFx0ICBjb250cm9sbGVycyBhbmQgZXhwb3J0IExpbnV4IGJsb2NrIGRldmljZXMgYXMgTlZNZSBuYW1lc3BhY2VzLlxuICAxNDpcdFx0ICBZb3UgbmVlZCB0byBzZWxlY3QgYXQgbGVhc3Qgb25lIG9mIHRoZSB0cmFuc3BvcnRzIGJlbG93IHRvIG1ha2UgdGhpc1xuICAxNTpcdFx0ICBmdW5jdGlvbmFsaXR5IHVzZWZ1bC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBOVk1lIG92ZXIgVENQKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSAqZnVuZGFtZW50YWwqIGNvbmZpZ3VyYXRpb25zIGFyZSBjbGVhcmx5IGNlbnRlcmVkIGFyb3VuZCBOVk1lIG92ZXIgVENQLiBTbywgSSBzZWUgYE5WTUVfVENQYCwgYE5WTUVfVEFSR0VUYCwgYW5kIGBOVk1FX1RBUkdFVF9UQ1BgIGFzIGJlaW5nIHRoZSBjb3JlLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBkZWZpbmluZyB0aGUgVENQLXNwZWNpZmljIE5WTWUgZW52aXJvbm1lbnQuIEhvd2V2ZXIuLi4gaGFuZyBvbiBhIHNlY29uZC4gSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZywgYXJlbiYjMzk7dCBJPyBGb3IgYSBob3N0IG1hY2hpbmUgdG8gYWN0dWFsbHkgKnV0aWxpemUqIHRoaXMgTlZNZSBvdmVyIFRDUCBzZXR1cCwgYW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JlIE5WTWUgZnJhbWV3b3JrIGlzIHByb3Blcmx5IGluc3RhbnRpYXRlZCwgSSYjMzk7bSBhbG1vc3QgY2VydGFpbiB0aGF0IGBOVk1FX0NPUkVgIGlzIGdvaW5nIHRvIGJlIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBob3N0IHNpZGUgYXMgd2VsbC4gSXQmIzM5O3MgdG9vIGZ1bmRhbWVudGFsIHRvIG1pc3MuIEkgbmVlZCB0aGF0IGJhc2UgbGF5ZXIgdXAgYW5kIHJ1bm5pbmcuIEdvb2QgdG8gY2F0Y2ggdGhhdCEgSSB3aWxsIGFsc28gZW5zdXJlIHRoaXMgd2lsbCBub3QgY29uZmxpY3Qgd2l0aCB0aGUgZXhpc3Rpbmcgc2V0dXAsIGFuZCB0aGF0IEkgZGlkIG5vdCBuZWVkIHRvIGFkZCBhZGRpdGlvbmFsIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9DT1JFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6Mjpjb25maWcgTlZNRV9DT1JFXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU4OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipOVk1lIFRDUCBhbmQgQ29yZSBNb2R1bGUgRGVwZW5kZW5jeSBDaGVjayoqCgpPa2F5LCBzbyBgTlZNRV9UQ1BgIGhhcyBiZWVuIGNob3Nlbi4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGF0IGltcGxpZXMgdGhlIHNlbGVjdGlvbiBvZiBgTlZNRV9DT1JFYCBhcyB3ZWxsLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGVwZW5kZW5jeTsgaWYgVENQIGlzIGFjdGl2ZSwgd2UgYWJzb2x1dGVseSBuZWVkIHRoZSBjb3JlIE5WTWUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBhbmQgbWFrZSBzdXJlIHRoYXQgcmVsYXRpb25zaGlwIGlzIGJlaW5nIHByb3Blcmx5IGVuZm9yY2VkLCBhbmQgaWYgbm90LCB3aHkgbm90LiBUaGVyZSBtYXkgYmUgY29uZmlndXJhdGlvbiBmbGFncyB0byByZXZpZXcuIElmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIGhlcmUsIGl0IHdpbGwgYmUgYSBtYWpvciBibG9ja2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTlZNRV9DT1JFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NT1jb25maWcgQkxLX0RFVl9OVk1FXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IEJMT0NLXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjg6XHRzZWxlY3QgTlZNRV9DT1JFXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTktXHRoZWxwXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz00Nz1jb25maWcgTlZNRV9GQUJSSUNTXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjQ4Olx0c2VsZWN0IE5WTUVfQ09SRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00OS1cdHNlbGVjdCBOVk1FX0tFWVJJTkcgaWYgTlZNRV9UQ1BfVExTXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0xMjU9Y29uZmlnIE5WTUVfQVBQTEVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEyOS1cdGRlcGVuZHMgb24gQVJDSF9BUFBMRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6MTMwOlx0c2VsZWN0IE5WTUVfQ09SRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xMzEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDE1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5WTWUvVENQIENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGl0LiBgTlZNRV9UQ1BgICpkZWZpbml0ZWx5KiBwdWxscyBpbiBgTlZNRV9GQUJSSUNTYCwgd2hpY2ggdGhlbiBicmluZ3MgaW4gYE5WTUVfQ09SRWAuIFRoYXQgbWFrZXMgc2Vuc2UgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKUmlnaHQsIHNvIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBJJiMzOTttIGRlYWxpbmcgd2l0aCBgTlZNRV9UQ1BgLCBgTlZNRV9UQVJHRVRgLCBhbmQgYE5WTUVfVEFSR0VUX1RDUGAuIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24uIEkmIzM5O20gdGhpbmtpbmc6IGBudm1lX3RjcF9hbGxvY19xdWV1ZWAsIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIHRoaXMgVENQIGltcGxlbWVudGF0aW9uLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhvc2UgZnVuY3Rpb25zIHN0YXRpYz8gSSYjMzk7dmUgZ290IHRvIGRvdWJsZS1jaGVjayB0aGF0LiBXYWl0IGEgbWludXRlLi4uIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhciBvbiB0aGlzOiB0aGV5JiMzOTtyZSBwdXNoaW5nIG1lIHRvd2FyZHMgKm5vbi1zdGF0aWMqLCAqbm9uLWlubGluZWQqIGZ1bmN0aW9ucyBhcyBwcmVmZXJyZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCBnaXZlcyB0aGVtIGRpc3RpbmN0IHN5bWJvbHMsIHdoaWNoIGlzIG11Y2ggYmV0dGVyLiBPa2F5LCBzbyBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGlzICpzdGF0aWMqLiBIbW0uIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxlcnMgdG8gZGV0ZXJtaW5lIGl0IGlzIHRoZSBwcmVmZXJyZWQgY2hvaWNlLCBwZXIgdGhlIGRvY3VtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgaXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV90Y3BfYWxsb2NfcXVldWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTgxOD1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyOC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4Mjk6c3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MzAtXHRcdFx0XHRrZXlfc2VyaWFsX3QgcHNraWQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjE3OT1zdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE5Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxOTg6XHRyZXQgPSBudm1lX3RjcF9hbGxvY19xdWV1ZShjdHJsLCAwLCBwc2tpZCk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTk5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yMjEzPXN0YXRpYyBpbnQgX19udm1lX3RjcF9hbGxvY19pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjM4LVx0Zm9yIChpID0gMTsgaSBcdTAwM2MgY3RybC1cdTAwM2VxdWV1ZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIyMzk6XHRcdHJldCA9IG52bWVfdGNwX2FsbG9jX3F1ZXVlKGN0cmwsIGksXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjQwLVx0XHRcdFx0Y3RybC1cdTAwM2V0bHNfcHNraWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg5OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkZpbmRpbmcgTlZNZS1vRiBRdWV1ZSBBbGxvY2F0aW9uIENhbGxlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgYF9fbnZtZV90Y3BfYWxsb2NfaW9fcXVldWVzYCBhcmUgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgTlZNZS1vRiBzdGFjay4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgcXVldWUgc2V0dXAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQuIEkgc3VzcGVjdCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgaW4gdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgcG90ZW50aWFsbHkgd2l0aGluIGNvbm5lY3Rpb24gb3IgdHJhbnNwb3J0IGxheWVyIHNldHVwIGZ1bmN0aW9ucy4gVGhlIHVuZGVyc2NvcmUgcHJlZml4IG9uIGBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2Agc3Ryb25nbHkgc3VnZ2VzdHMgaXQmIzM5O3MgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIHByb2JhYmx5IGNhbGxlZCBieSBzb21ldGhpbmcgaGlnaGVyIHVwLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBpZGVudGlmeSAqYWxsKiBjYWxsIHNpdGVzLCBhcyB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBwYXRocyBkZXBlbmRpbmcgb24gaG93IHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCBvciBob3cgZXJyb3JzIGFyZSBoYW5kbGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbGNoYWluLCBsaWtlbHkgZ3JlcCBvciBhIG1vcmUgc29waGlzdGljYXRlZCBjb2RlIGJyb3dzZXIsIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlbiBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCByYXRpb25hbGUgYmVoaW5kIGVhY2ggY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleS4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHBhc3NlZCBpbj8gV2hhdCBhcmUgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzPyBXaGF0IGFyZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZD8gVGhlc2UgYXJlIGFsbCBpbXBvcnRhbnQgZGV0YWlscyBmb3IgdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yMTYwPXN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE3OC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxNzk6c3RhdGljIGludCBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE4MC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjM0OD1zdGF0aWMgaW50IG52bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzUxLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM1MjpcdGVycm9yID0gbnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWUoY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzUzLVx0aWYgKGVycm9yKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTI0MzM9c3RhdGljIHZvaWQgbnZtZV90Y3BfcmVjb25uZWN0X29yX3JlbW92ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0NjYtICpcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0Njc6ICogV2UgY2Fubm90IGFsd2F5cyByZXZva2UgdGhlIGtleSBhcyBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZSgpIGlzIGNhbGxlZFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ2OC0gKiB0d2ljZSBkdXJpbmcgc2VjdXJlIGNvbmNhdGVuYXRpb24sIG9uY2Ugb24gYSAmIzM5O25vcm1hbCYjMzk7IGNvbm5lY3Rpb24gdG8gcnVuIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgbnZtZV90Y3BfY29uZmlndXJlX2FkbWluX3F1ZXVlIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBudm1lX3RjcF9jb25maWd1cmVfYWRtaW5fcXVldWVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIGN1cmlvdXMuIFN0YXRpYyBmdW5jdGlvbnMsIGJ5IGRlZmluaXRpb24sIGhhdmUgbGltaXRlZCBzY29wZSwgd2hpY2ggdXN1YWxseSBoaW50cyBhdCB0aGVpciBiZWluZyBjcml0aWNhbCBmb3IgYSBzcGVjaWZpYywgZm9jdXNlZCBwYXJ0IG9mIHRoZSBkcml2ZXIuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB1bmRlcnN0YW5kaW5nIGl0cyBjYWxsIGNoYWluIHdpbGwgaWxsdW1pbmF0ZSBpdHMgcm9sZSB3aXRoaW4gdGhlIE5WTWUtb0YgVENQIGRyaXZlci4gS25vd2luZyBpdHMgY2FsbGVyIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdXNpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yMjc5PXN0YXRpYyBpbnQgbnZtZV90Y3BfY29uZmlndXJlX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzQ3LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM0ODpzdGF0aWMgaW50IG52bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzNDkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTI0Nzc9c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0ODEtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDgyOlx0cmV0ID0gbnZtZV90Y3BfY29uZmlndXJlX2FkbWluX3F1ZXVlKGN0cmwsIG5ldyk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDgzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDkwLVx0XHRudm1lX3RjcF90ZWFyZG93bl9hZG1pbl9xdWV1ZShjdHJsLCBmYWxzZSk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDkxOlx0XHRyZXQgPSBudm1lX3RjcF9jb25maWd1cmVfYWRtaW5fcXVldWUoY3RybCwgZmFsc2UpO1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ5Mi1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNDAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIE5WTWUtb0YgQ29udHJvbCBQYXRoIFNldHVwKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiB3aXRoaW4gdGhlIE5WTWUgb3ZlciBUQ1Agc3RhY2suIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBwZXJmb3JtaW5nIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBOVk1lIGNvbnRyb2xsZXIsIG9yICYjMzQ7Y3RybCYjMzQ7IGFzIGl0JiMzOTtzIHJlZmVycmVkIHRvIGhlcmUsIHdpdGhpbiB0aGUgVENQIHRyYW5zcG9ydCBsYXllci4gVGhlIGltcG9ydGFudCBwaWVjZSBoZXJlIGlzIHRoYXQgaXQgaXMgY2FsbGVkIGJ5IGBudm1lX3RjcF9jcmVhdGVfY3RybGAuIFRodXMsIGl0IGlzIGNhbGxlZCB3aGVuIHRoZSBjb250cm9sbGVyIGlzIGJlaW5nIGluaXRpYWxpemVkLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaXMgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGluc3RhbnRpYXRlcyB0aGUgY29udHJvbGxlciBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB0aGVuICppbW1lZGlhdGVseSogbmVlZHMgdG8gY2FsbCBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgdG8gZ2V0IGV2ZXJ5dGhpbmcgcHJvcGVybHkgY29uZmlndXJlZCBhbmQgcmVhZHkgdG8gaGFuZGxlIGNvbW1hbmRzLiBJJiMzOTtkIGV4cGVjdCBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgdG8gaGFuZGxlIHRhc2tzIGxpa2Ugc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGNvbm5lY3Rpb24sIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCByZWdpc3RlcmluZyB0aGUgY29udHJvbGxlciwgYW5kIGdldHRpbmcgdGhlIGNvbnRyb2xsZXIgcmVhZHkgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV90Y3Bfc2V0dXBfY3RybCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNDcyPXN0YXRpYyBib29sIG52bWVfdGNwX2tleV9yZXZva2VfbmVlZGVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ3Ni1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0Nzc6c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ3OC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjU2MD1zdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNvbm5lY3RfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTY4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjU2OTpcdHJldCA9IG52bWVfdGNwX3NldHVwX2N0cmwoY3RybCwgZmFsc2UpO1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU3MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjYzMD1zdGF0aWMgdm9pZCBudm1lX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY0OS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2NTA6XHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2NTEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTMwODU9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKm52bWVfdGNwX2NyZWF0ZV9jdHJsKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTA0LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzEwNTpcdHJldCA9IG52bWVfdGNwX3NldHVwX2N0cmwoXHUwMDI2Y3RybC1cdTAwM2VjdHJsLCB0cnVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMxMDYtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkwNQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgTlZNZS1vRiBDb250cm9sbGVyIENyZWF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBvZmYgdGhlIHdob2xlIGNvbnRyb2xsZXIgY3JlYXRpb24gcHJvY2VzcyBpbiB0aGUgTlZNZS1vRiBUQ1Agc3RhY2suIE15IGltbWVkaWF0ZSBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIGNvbnRyb2xsZXIgZ2V0cyBpdHMgbmV0d29yayBpbnRlcmZhY2Ugc2V0IHVwLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBmdW5jdGlvbnMgY2FsbCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBzb2NrZXQgYXNzb2NpYXRpb24gaGFwcGVucywgYmVjYXVzZSB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgaG93IHRoZSBjb250cm9sbGVyIHRhbGtzIG92ZXIgVENQLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGl0OyB0aGF0IHNob3VsZCBnaXZlIGEgbXVjaCBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgc2V0dXAgbG9naWMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWV0X3RjcF9zZXRfcXVldWVfc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3NDA9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NTUtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3NTY6c3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NTcte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MTg5MD1zdGF0aWMgdm9pZCBudm1ldF90Y3BfdGxzX2hhbmRzaGFrZV9kb25lKHZvaWQgKmRhdGEsIGludCBzdGF0dXMsXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xOTE0LVx0aWYgKCFzdGF0dXMpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE5MTU6XHRcdHN0YXR1cyA9IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhxdWV1ZSk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5MTYtXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xOTc3PXN0YXRpYyB2b2lkIG52bWV0X3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZXRfdGNwX3BvcnQgKnBvcnQsXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDU0LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMDU1Olx0cmV0ID0gbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHF1ZXVlKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjA1Ni1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDY5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIE5WTWUtb0YgVENQIGltcGxlbWVudGF0aW9uOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBRdWV1ZSBBbGxvY2F0aW9uIGluIHRoZSBOVk1lLW9GIFRDUCBTdGFjayoqCgpBbHJpZ2h0LCBzbyBoZXJlJiMzOTtzIHRoZSBkZWFsLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGZsb3cgaGVyZSwgYW5kIG15IGJyYWluIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAgYW5kIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXI6IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgICpjYWxscyogYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAuIFRoYXQgbWVhbnMgdGhlIGBhY2NlcHRfd29ya2AgZnVuY3Rpb24sIHdoaWNoIGlzIGhhbmRsaW5nIG5ldyBjb25uZWN0aW9uIGFjY2VwdGFuY2VzIG9uIHRoZSBUQ1Agc2lkZSwgaXMgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgbmV3IEkvTyBxdWV1ZXMuIFRoaXMgaXMgaG93IHRoZSBzeXN0ZW0gc2V0cyB1cCB0aGUgcmVzb3VyY2VzIGl0IG5lZWRzIHRvIGhhbmRsZSB0aGUgSS9PIGZvciBlYWNoIGluY29taW5nIE5WTWUtb0YgY29ubmVjdGlvbi4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIGEgbmV3IGNsaWVudCBpcyBnb2luZyB0byBzdGFydCB0YWxraW5nIHRvIHRoZSB0YXJnZXQuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFuZCBpdCBwb2ludHMgdG8gYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSDigJMgYW55IGJvdHRsZW5lY2sgdGhlcmUgd2lsbCBiZSBmZWx0IGFjcm9zcyBhbGwgY29ubmVjdGlvbiBhY2NlcHRhbmNlcy4gTWFrZXMgc2Vuc2UgdGhhdCB0aGlzIHdvdWxkIGJlIGEgZm9jdXMgZm9yIG9wdGltaXphdGlvbiBvciBzY3J1dGlueSBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyB3aXRoIGNvbm5lY3Rpb24gcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWV0X3RjcF9hbGxvY19xdWV1ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE5NzQ9c3RhdGljIHZvaWQgbnZtZXRfdGNwX3Rsc19oYW5kc2hha2VfdGltZW91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpIHt9XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xOTc2LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxOTc3OnN0YXRpYyB2b2lkIG52bWV0X3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZXRfdGNwX3BvcnQgKnBvcnQsXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5NzgtXHRcdHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0yMDg2PXN0YXRpYyB2b2lkIG52bWV0X3RjcF9hY2NlcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDk5LVx0XHR9XG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMDA6XHRcdG52bWV0X3RjcF9hbGxvY19xdWV1ZShwb3J0LCBuZXdzb2NrKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEwMS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBOVk1lLW9GIFRDUCBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYC4gSXQmIzM5O3MgY2xlYXJseSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIE5WTWUgb3ZlciBUQ1AgaW1wbGVtZW50YXRpb24sIGFuZCBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIG9wZXJhdGluZyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyB3b3JrcXVldWUgc3lzdGVtLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGhhbmRsaW5nIGFzeW5jaHJvbm91cyB0YXNrcywgbGlrZWx5IHJlbGF0ZWQgdG8gYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9ucy4gVGhhdCYjMzk7cyBhIHNvbGlkIHBpZWNlIG9mIGNvbnRleHQuIE5vdywgd2hhdCYjMzk7cyBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHBpY3R1cmU/IEkgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBsaWZlY3ljbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gcGxhY2UgaXQgaW4gdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnMgYSBOSUMgbXVzdCBwZXJmb3JtIHRvIGFjY2VwdCBhIGNvbm5lY3Rpb24uCgpBbmQgdGhhdCBicmluZ3MgYW5vdGhlciB0aG91Z2h0LiBXaGF0IGFib3V0IGBudm1ldF90Y3BfYWRkX3BvcnRgPyBJIGJldCB0aGF0IGZ1bmN0aW9uIGxpa2VseSBkb2VzIHNvbWUgaW5pdGlhbCBzZXR1cCByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIHBvcnQgYW5kIHByb2JhYmx5IHNldHMgdXAgdGhlIGZyYW1ld29yayBmb3IgYWNjZXB0aW5nIGNvbm5lY3Rpb25zLCBzbyBJIHNob3VsZCBzZWUgaG93IHRoaXMgZnVuY3Rpb24gYW5kIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRyb2wgZmxvdyB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCB3aGV0aGVyIHRoZXkmIzM5O3JlIGludm9rZWQgZGlyZWN0bHksIG9yIGJ5IHNvbWUgb3RoZXIgc3lzdGVtIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWV0X3RjcF9hZGRfcG9ydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIxMDQ9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMTktXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMjA6c3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMTIxLXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIzMTM9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyBudm1ldF90Y3Bfb3BzID0ge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjMxNi1cdC5tc2RiZFx0XHRcdD0gMSxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjMxNzpcdC5hZGRfcG9ydFx0XHQ9IG52bWV0X3RjcF9hZGRfcG9ydCxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjMxOC1cdC5yZW1vdmVfcG9ydFx0XHQ9IG52bWV0X3RjcF9yZW1vdmVfcG9ydCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NTIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBOVk1lLW9GL1RDUCBQb3J0IEFkZGl0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIE5WTWUtb0YvVENQIGZhYnJpYyBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgcG9ydCBhZGRpdGlvbiBwcm9jZXNzLiBUaGUgYG52bWV0X3RjcF9hZGRfcG9ydGAgZnVuY3Rpb24gaW1tZWRpYXRlbHkgc3RhbmRzIG91dCBhcyB0aGUgY29yZSBjYWxsYmFjayB3aXRoaW4gYG52bWV0X2ZhYnJpY3Nfb3BzYC4gVGhhdCBtZWFucyBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNvbnRyb2wgYW5kIHF1ZXVlIGNyZWF0aW9uLgoKU28sIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAuIEJ1dCBob2xkIG9uLi4uIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgIGlzICpzdGF0aWMqPyBIbW1tLCB0aGF0JiMzOTtzIGEgYml0IHVudXN1YWwgZm9yIGEga2V5IGZ1bmN0aW9uIGxpa2UgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkLiBJcyB0aGVyZSBzb21lIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgdGhhdCBjYWxscyBpdD8gQW5kIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGlzIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgc3RhdGljIHRvbz8gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhhdCBjb3VsZCBjaGFuZ2UgZXZlcnl0aGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV90Y3BfY3JlYXRlX2N0cmwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MzAwMz1zdGF0aWMgc3RydWN0IG52bWVfdGNwX2N0cmwgKm52bWVfdGNwX2FsbG9jX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwODQtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMDg1OnN0YXRpYyBzdHJ1Y3QgbnZtZV9jdHJsICpudm1lX3RjcF9jcmVhdGVfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDg2LVx0XHRzdHJ1Y3QgbnZtZl9jdHJsX29wdGlvbnMgKm9wdHMpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MzEyNz1zdGF0aWMgc3RydWN0IG52bWZfdHJhbnNwb3J0X29wcyBudm1lX3RjcF90cmFuc3BvcnQgPSB7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzEzNi1cdFx0XHQgIE5WTUZfT1BUX0tFWVJJTkcgfCBOVk1GX09QVF9UTFNfS0VZIHwgTlZNRl9PUFRfQ09OQ0FULFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzEzNzpcdC5jcmVhdGVfY3RybFx0PSBudm1lX3RjcF9jcmVhdGVfY3RybCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMxMzgtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExODAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE5WTWUtb0YgVHJhbnNwb3J0IE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIE5WTWUtb0YgZmFicmljIG9wZXJhdGlvbnMgYXJlIHN0cnVjdHVyZWQuIEl0JiMzOTtzIGJlY29taW5nIGNsZWFyIHRoYXQgdGhlc2UgY2FsbGJhY2sgZnVuY3Rpb25zIGFyZSBhbGwgc3RhdGljYWxseSByZWdpc3RlcmVkIHdpdGhpbiBgbnZtZl90cmFuc3BvcnRfb3BzYCBhbmQgYG52bWV0X2ZhYnJpY3Nfb3BzYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAgYXMgZXhhbXBsZXMgZnJvbSB0aGUgVENQIHRyYW5zcG9ydC4gSG1tLCBsZXQmIzM5O3Mgbm90IGZvcmdldCB0aGF0IGBudm1lX3RjcF9zZXR1cF9jdHJsYCBpcyBhbHNvIHN0YXRpYy4gR2l2ZW4gdGhpcyBzdGF0aWMgcmVnaXN0cmF0aW9uIHBhdHRlcm4sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55ICpub24qLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgYXJlYS4gSXQgd2lsbCBiZSBtdWNoIG1vcmUgaW50ZXJlc3RpbmcgaWYgSSBkaXNjb3ZlciBhbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbnZtZV90Y3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ2MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTlZNZS9UQ1AgU3ltYm9sIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBoaXRzIG1lIGlzIHRoZSBjb21wbGV0ZSBhYnNlbmNlIG9mIGFueSBleHBvcnRlZCBzeW1ib2xzIHNwZWNpZmljYWxseSBmb3IgTlZNZS9UQ1AuIFRoYXQmIzM5O3MuLi4gaW50ZXJlc3RpbmcuIFVzdWFsbHksIHlvdSYjMzk7ZCBleHBlY3QgYXQgbGVhc3QgKnNvbWUqIGVudHJ5IHBvaW50cywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgcHVibGljbHkgYWNjZXNzaWJsZSBpbnRlcmZhY2UuIFRoZSBsYWNrIG9mIHRoZW0gc3VnZ2VzdHMgYSBmZXcgcG9zc2liaWxpdGllcywgZWFjaCB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIENvdWxkIHRoaXMgbWVhbiBpdCYjMzk7cyBlbnRpcmVseSBrZXJuZWwtaW50ZXJuYWwsIG9yIGhlYXZpbHkgcmVsaWFudCBvbiBhIHNwZWNpZmljIGRyaXZlciBpbmZyYXN0cnVjdHVyZT8gSXMgdGhpcyBhbiBpbnRlbnRpb25hbCBkZXNpZ24gY2hvaWNlIHRvIG1haW50YWluIGEgdGlnaHQgY29udHJvbCBwbGFuZT8gSXQmIzM5O3MgZGVmaW5pdGVseSBhIHJlZCBmbGFnIGZvciBhbnkgc3RyYWlnaHRmb3J3YXJkIGludGVncmF0aW9uIHNjZW5hcmlvLgoKVGhlbiwgdGhlIG1pbmQgbmF0dXJhbGx5IHdhbmRlcnMgdG8gbm9uLXN0YXRpYyBmdW5jdGlvbnMuIE1heWJlIHRoZSBrZXkgZnVuY3Rpb25zICphcmVuJiMzOTt0KiBzdGF0aWMuIFRoYXQmIzM5O3MgdGhlIG90aGVyIGFuZ2xlIHRvIGNvbnNpZGVyLiBJZiB0aGUgY3JpdGljYWwgY29kZSBpc24mIzM5O3QgZGVjbGFyZWQgYHN0YXRpY2AsIGl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGZvciBsaW5raW5nIG9yIGFjY2VzcywgYWx0aG91Z2ggaXQgc3RpbGwgZG9lc27igJl0IHNvbHZlIHRoZSBvcmlnaW5hbCBwcm9ibGVtIG9mIG5vdCBoYXZpbmcgYSBjbGVhciwgb2J2aW91cyBBUEkuIFRoaXMgc2hpZnRzIHRoZSBmb2N1cyBmcm9tIGxvb2tpbmcgZm9yIGEgZGlyZWN0IGludGVyZmFjZSB0byBwb3RlbnRpYWxseSByZXZlcnNlIGVuZ2luZWVyaW5nIGludGVybmFsIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zIHdpdGhpbiB0aGUgdGFyZ2V0IGNvZGUuIElmIEkgY2FuIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGludGVyYWN0LCBJIG1pZ2h0IGJlIGFibGUgdG8gcGllY2UgdG9nZXRoZXIgdGhlIHBpZWNlcyB3aXRob3V0IGhhdmluZyB0byBkaXJlY3RseSBpbnRlcmZhY2Ugd2l0aCBhbiBleHBvcnRlZCBBUEkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKm52bWVfdGNwXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjM4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2OnN0cnVjdCBudm1lX3RjcF9xdWV1ZTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3LVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTUzPU1PRFVMRV9QQVJNX0RFU0ModGxzX2hhbmRzaGFrZV90aW1lb3V0LFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTc6c3RhdGljIGF0b21pY190IG52bWVfdGNwX2NwdV9xdWV1ZXNbTlJfQ1BVU107XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01OC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjU5OmVudW0gbnZtZV90Y3Bfc2VuZF9zdGF0ZSB7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02MC1cdE5WTUVfVENQX1NFTkRfQ01EX1BEVSA9IDAsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjUtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo2NjpzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCB7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02Ny1cdHN0cnVjdCBudm1lX3JlcXVlc3RcdHJlcTtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy04OS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjkwOmVudW0gbnZtZV90Y3BfcXVldWVfZmxhZ3Mge1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTEtXHROVk1FX1RDUF9RX0FMTE9DQVRFRFx0PSAwLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTk2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6OTc6ZW51bSBudm1lX3RjcF9yZWN2X3N0YXRlIHtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTk4LVx0TlZNRV9UQ1BfUkVDVl9QRFUgPSAwLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwMi1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwMzpzdHJ1Y3QgbnZtZV90Y3BfY3RybDtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwNDpzdHJ1Y3QgbnZtZV90Y3BfcXVldWUge1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA1LVx0c3RydWN0IHNvY2tldFx0XHQqc29jaztcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNTEtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNTI6c3RydWN0IG52bWVfdGNwX2N0cmwge1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTUzLVx0LyogcmVhZCBvbmx5IGluIHRoZSBob3QgcGF0aCAqL1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2OS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3MDpzdGF0aWMgTElTVF9IRUFEKG52bWVfdGNwX2N0cmxfbGlzdCk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzE6c3RhdGljIERFRklORV9NVVRFWChudm1lX3RjcF9jdHJsX211dGV4KTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3MjpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm52bWVfdGNwX3dxO1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBudm1lX3RjcF9tcV9vcHM7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG52bWVfdGNwX2FkbWluX21xX29wcztcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3NTpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9zZW5kKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpO1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc2LVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4My0gKi9cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4NDpzdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTg1LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDktXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTA6c3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV90Y3BfY3RybCAqdG9fdGNwX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxMS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE0LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE1OnN0YXRpYyBpbmxpbmUgaW50IG52bWVfdGNwX3F1ZXVlX2lkKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTYte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxOS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIyMDpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV90Y3BfcmVjdl9wZHVfc3VwcG9ydGVkKGVudW0gbnZtZV90Y3BfcGR1X3R5cGUgdHlwZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyMS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjM1LSAqL1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM2OnN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX3RjcF9xdWV1ZV90bHMoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzNy17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ2LSAqL1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjQ3OnN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX3RjcF90bHNfY29uZmlndXJlZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTQtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNTU6c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX3RhZ3MgKm52bWVfdGNwX3RhZ3NldChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU2LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNjQ6c3RhdGljIGlubGluZSB1OCBudm1lX3RjcF9oZGdzdF9sZW4oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2NS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY5OnN0YXRpYyBpbmxpbmUgdTggbnZtZV90Y3BfZGRnc3RfbGVuKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNzAte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3My1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI3NDpzdGF0aWMgaW5saW5lIHZvaWQgKm52bWVfdGNwX3JlcV9jbWRfcGR1KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNzUte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3OC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI3OTpzdGF0aWMgaW5saW5lIHZvaWQgKm52bWVfdGNwX3JlcV9kYXRhX3BkdShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjgwLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yODUtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyODY6c3RhdGljIGlubGluZSBzaXplX3QgbnZtZV90Y3BfaW5saW5lX2RhdGFfc2l6ZShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjg3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yOTItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyOTM6c3RhdGljIGlubGluZSBib29sIG52bWVfdGNwX2FzeW5jX3JlcShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjk0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yOTctXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyOTg6c3RhdGljIGlubGluZSBib29sIG52bWVfdGNwX2hhc19pbmxpbmVfZGF0YShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjk5LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTAtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqbnZtZV90Y3BfcmVxX2N1cl9wYWdlKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTIte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMxNS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMxNjpzdGF0aWMgaW5saW5lIHNpemVfdCBudm1lX3RjcF9yZXFfY3VyX29mZnNldChzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzE3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMjAtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMjE6c3RhdGljIGlubGluZSBzaXplX3QgbnZtZV90Y3BfcmVxX2N1cl9sZW5ndGgoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMyMi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzI2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzI3OnN0YXRpYyBpbmxpbmUgc2l6ZV90IG52bWVfdGNwX3BkdV9kYXRhX2xlZnQoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMyOC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzMyLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzMzOnN0YXRpYyBpbmxpbmUgc2l6ZV90IG52bWVfdGNwX3BkdV9sYXN0X3NlbmQoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMzNC1cdFx0aW50IGxlbilcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMzgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMzk6c3RhdGljIHZvaWQgbnZtZV90Y3BfaW5pdF9pdGVyKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zNDAtXHRcdHVuc2lnbmVkIGludCBkaXIpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzYzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzY0OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9hZHZhbmNlX3JlcShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzY1LVx0XHRpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTM3Ni1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjM3NzpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV90Y3Bfc2VuZF9hbGwoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTM3OC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzg2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6Mzg3OnN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX3RjcF9xdWV1ZV9oYXNfcGVuZGluZyhzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzg4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zOTItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozOTM6c3RhdGljIGlubGluZSBib29sIG52bWVfdGNwX3F1ZXVlX21vcmUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTM5NC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzk4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6Mzk5OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00MDAtXHRcdGJvb2wgbGFzdClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00MjItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0MjM6c3RhdGljIHZvaWQgbnZtZV90Y3BfcHJvY2Vzc19yZXFfbGlzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDI0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00MzMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0MzQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0MzU6bnZtZV90Y3BfZmV0Y2hfcmVxdWVzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDM2LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00NTUtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0NTY6c3RhdGljIGlubGluZSB2b2lkIG52bWVfdGNwX2RkZ3N0X3VwZGF0ZSh1MzIgKmNyY3AsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00NTctXHRcdHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQ3Mi1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQ3MzpzdGF0aWMgaW5saW5lIF9fbGUzMiBudm1lX3RjcF9kZGdzdF9maW5hbCh1MzIgY3JjKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDc0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00NzctXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0Nzg6c3RhdGljIGlubGluZSBfX2xlMzIgbnZtZV90Y3BfaGRnc3QoY29uc3Qgdm9pZCAqcGR1LCBzaXplX3QgbGVuKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDc5LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00ODItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0ODM6c3RhdGljIGlubGluZSB2b2lkIG52bWVfdGNwX3NldF9oZGdzdCh2b2lkICpwZHUsIHNpemVfdCBsZW4pXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00ODQte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQ4Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQ4ODpzdGF0aWMgaW50IG52bWVfdGNwX3ZlcmlmeV9oZGdzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDg5LVx0XHR2b2lkICpwZHUsIHNpemVfdCBwZHVfbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTUxMy1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjUxNDpzdGF0aWMgaW50IG52bWVfdGNwX2NoZWNrX2RkZ3N0KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsIHZvaWQgKnBkdSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTUxNS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTMzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTM0OnN0YXRpYyB2b2lkIG52bWVfdGNwX2V4aXRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTUzNS1cdFx0c3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBpbnQgaGN0eF9pZHgpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTQxLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTQyOnN0YXRpYyBpbnQgbnZtZV90Y3BfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTQzLVx0XHRzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGludCBoY3R4X2lkeCxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NjgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1Njk6c3RhdGljIGludCBudm1lX3RjcF9pbml0X2hjdHgoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHZvaWQgKmRhdGEsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NzAtXHRcdHVuc2lnbmVkIGludCBoY3R4X2lkeClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NzgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1Nzk6c3RhdGljIGludCBudm1lX3RjcF9pbml0X2FkbWluX2hjdHgoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHZvaWQgKmRhdGEsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01ODAtXHRcdHVuc2lnbmVkIGludCBoY3R4X2lkeClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01ODgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1ODk6c3RhdGljIGVudW0gbnZtZV90Y3BfcmVjdl9zdGF0ZVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTkwOm52bWVfdGNwX3JlY3Zfc3RhdGUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU5MS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTk2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTk3OnN0YXRpYyB2b2lkIG52bWVfdGNwX2luaXRfcmVjdl9jdHgoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU5OC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjA1LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NjA2OnN0YXRpYyB2b2lkIG52bWVfdGNwX2Vycm9yX3JlY292ZXJ5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02MDcte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTYxNC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjYxNTpzdGF0aWMgaW50IG52bWVfdGNwX3Byb2Nlc3NfbnZtZV9jcWUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTYxNi1cdFx0c3RydWN0IG52bWVfY29tcGxldGlvbiAqY3FlKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTY0MC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjY0MTpzdGF0aWMgaW50IG52bWVfdGNwX2hhbmRsZV9jMmhfZGF0YShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjQyLVx0XHRzdHJ1Y3QgbnZtZV90Y3BfZGF0YV9wZHUgKnBkdSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02NzQtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo2NzU6c3RhdGljIGludCBudm1lX3RjcF9oYW5kbGVfY29tcChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjc2LVx0XHRzdHJ1Y3QgbnZtZV90Y3BfcnNwX3BkdSAqcGR1KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTY5Ni1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjY5NzpzdGF0aWMgdm9pZCBudm1lX3RjcF9zZXR1cF9oMmNfZGF0YV9wZHUoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTY5OC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNzMwLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NzMxOnN0YXRpYyBpbnQgbnZtZV90Y3BfaGFuZGxlX3IydChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNzMyLVx0XHRzdHJ1Y3QgbnZtZV90Y3BfcjJ0X3BkdSAqcGR1KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTc4OS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjc5MDpzdGF0aWMgdm9pZCBudm1lX3RjcF9oYW5kbGVfYzJoX3Rlcm0oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTc5MS1cdFx0c3RydWN0IG52bWVfdGNwX3Rlcm1fcGR1ICpwZHUpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtODIzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6ODI0OnN0YXRpYyBpbnQgbnZtZV90Y3BfcmVjdl9wZHUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTgyNS1cdFx0dW5zaWduZWQgaW50ICpvZmZzZXQsIHNpemVfdCAqbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTg5NS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjg5NjpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV90Y3BfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCB1MTYgc3RhdHVzKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtODk3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy05MDMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo5MDQ6c3RhdGljIGludCBudm1lX3RjcF9yZWN2X2RhdGEoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTkwNS1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgKm9mZnNldCwgc2l6ZV90ICpsZW4pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTc0LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6OTc1OnN0YXRpYyBpbnQgbnZtZV90Y3BfcmVjdl9kZGdzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTc2LVx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgKm9mZnNldCwgc2l6ZV90ICpsZW4pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTAxOS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwMjA6c3RhdGljIGludCBudm1lX3RjcF9yZWN2X3NrYihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwMjEtXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwNTUtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMDU2OnN0YXRpYyB2b2lkIG52bWVfdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA1Ny17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA2OS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwNzA6c3RhdGljIHZvaWQgbnZtZV90Y3Bfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA3MS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA4NS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwODY6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwODcte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTExMTMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMTE0OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9kb25lX3NlbmRfcmVxKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTE1LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTE4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTExOTpzdGF0aWMgdm9pZCBudm1lX3RjcF9mYWlsX3JlcXVlc3Qoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTExMjAte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTExMzEtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMTMyOnN0YXRpYyBpbnQgbnZtZV90Y3BfdHJ5X3NlbmRfZGF0YShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTEzMy17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTE5NC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjExOTU6c3RhdGljIGludCBudm1lX3RjcF90cnlfc2VuZF9jbWRfcGR1KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTk2LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjM1LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTIzNjpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9zZW5kX2RhdGFfcGR1KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjM3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjY5LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTI3MDpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9zZW5kX2RkZ3N0KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjcxLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzAyLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTMwMzpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9zZW5kKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzA0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzUyLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTM1MzpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9yZWN2KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzU0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzY4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTM2OTpzdGF0aWMgdm9pZCBudm1lX3RjcF9pb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEzNzAte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE0MDYtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNDA3OnN0YXRpYyB2b2lkIG52bWVfdGNwX2ZyZWVfYXN5bmNfcmVxKHN0cnVjdCBudm1lX3RjcF9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQwOC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQxMy1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE0MTQ6c3RhdGljIGludCBudm1lX3RjcF9hbGxvY19hc3luY19yZXEoc3RydWN0IG52bWVfdGNwX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNDE1LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNDI5LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTQzMDpzdGF0aWMgdm9pZCBudm1lX3RjcF9mcmVlX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQzMS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQ3MC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE0NzE6c3RhdGljIGludCBudm1lX3RjcF9pbml0X2Nvbm5lY3Rpb24oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE0NzIte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2MDEtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNjAyOnN0YXRpYyBib29sIG52bWVfdGNwX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjAzLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjA2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTYwNzpzdGF0aWMgYm9vbCBudm1lX3RjcF9kZWZhdWx0X3F1ZXVlKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjA4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjE1LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTYxNjpzdGF0aWMgYm9vbCBudm1lX3RjcF9yZWFkX3F1ZXVlKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjE3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjI2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTYyNzpzdGF0aWMgYm9vbCBudm1lX3RjcF9wb2xsX3F1ZXVlKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjI4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjQ4LSAqL1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTY0OTpzdGF0aWMgdm9pZCBudm1lX3RjcF9zZXRfcXVldWVfaW9fY3B1KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjUwLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjkxLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTY5MjpzdGF0aWMgdm9pZCBudm1lX3RjcF90bHNfZG9uZSh2b2lkICpkYXRhLCBpbnQgc3RhdHVzLCBrZXlfc2VyaWFsX3QgcHNraWQpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjkzLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzIzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTcyNDpzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3RscyhzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3MjUtXHRcdFx0ICAgICAgc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzc2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc3NzpzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3Nzgte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3ODQtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzg1OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzg2LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzkwLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc5MTpzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc5Mi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc5Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3OTg6c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MDUtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODA2OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MDcte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTEtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODEyOnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTMte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTctXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODE4OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MjgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODI5OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODMwLVx0XHRcdFx0a2V5X3NlcmlhbF90IHBza2lkKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwMjQtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDI1OnN0YXRpYyB2b2lkIG52bWVfdGNwX3Jlc3RvcmVfc29ja19vcHMoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwMjYte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwMzYtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDM3OnN0YXRpYyB2b2lkIF9fbnZtZV90Y3Bfc3RvcF9xdWV1ZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjAzOC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA0My1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIwNDQ6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9xdWV1ZV9ub3dhaXQoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDQ1LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDYyLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjA2MzpzdGF0aWMgdm9pZCBudm1lX3RjcF93YWl0X3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA2NC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA4MC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIwODE6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwODIte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwODctXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDg4OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldHVwX3NvY2tfb3BzKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDg5LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTAzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjEwNDpzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgaWR4KVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjEwNS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjEzMC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxMzE6c3RhdGljIHZvaWQgbnZtZV90Y3BfZnJlZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjEzMi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE0MS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxNDI6c3RhdGljIHZvaWQgbnZtZV90Y3BfZnJlZV9pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNDMte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNDktXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTUwOnN0YXRpYyB2b2lkIG52bWVfdGNwX3N0b3BfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTUxLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTU5LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE2MDpzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE2MS1cdFx0XHRcdCAgICBpbnQgZmlyc3QsIGludCBsYXN0KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNzgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTc5OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxODAte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyMTItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMjEzOnN0YXRpYyBpbnQgX19udm1lX3RjcF9hbGxvY19pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyMTQte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyNTMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMjU0OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjU1LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjc4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjI3OTpzdGF0aWMgaW50IG52bWVfdGNwX2NvbmZpZ3VyZV9pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBuZXcpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjgwLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzQ3LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM0ODpzdGF0aWMgaW50IG52bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzNDkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzOTctXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMzk4OnN0YXRpYyB2b2lkIG52bWVfdGNwX3RlYXJkb3duX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzk5LVx0XHRib29sIHJlbW92ZSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDE2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjQxNzpzdGF0aWMgdm9pZCBudm1lX3RjcF90ZWFyZG93bl9pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0MTgtXHRcdGJvb2wgcmVtb3ZlKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0MzItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDMzOnN0YXRpYyB2b2lkIG52bWVfdGNwX3JlY29ubmVjdF9vcl9yZW1vdmUoc3RydWN0IG52bWVfY3RybCAqY3RybCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0MzQtXHRcdGludCBzdGF0dXMpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ3MS0gKi9cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0NzI6c3RhdGljIGJvb2wgbnZtZV90Y3Bfa2V5X3Jldm9rZV9uZWVkZWQoc3RydWN0IG52bWVfY3RybCAqY3RybClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0NzMte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0NzYtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDc3OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc2V0dXBfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0Nzgte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1NTktXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNTYwOnN0YXRpYyB2b2lkIG52bWVfdGNwX3JlY29ubmVjdF9jdHJsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU2MS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU4Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI1ODg6c3RhdGljIHZvaWQgbnZtZV90Y3BfZXJyb3JfcmVjb3Zlcnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTg5LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjE2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjYxNzpzdGF0aWMgdm9pZCBudm1lX3RjcF90ZWFyZG93bl9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgc2h1dGRvd24pXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjE4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjI0LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjYyNTpzdGF0aWMgdm9pZCBudm1lX3RjcF9kZWxldGVfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjYyNi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjYzMD1zdGF0aWMgdm9pZCBudm1lX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY2MC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2NjE6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjYyLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjY2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY2NzpzdGF0aWMgdm9pZCBudm1lX3RjcF9mcmVlX2N0cmwoc3RydWN0IG52bWVfY3RybCAqbmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjY4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjgzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY4NDpzdGF0aWMgdm9pZCBudm1lX3RjcF9zZXRfc2dfbnVsbChzdHJ1Y3QgbnZtZV9jb21tYW5kICpjKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY4NS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY5My1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2OTQ6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc2V0X3NnX2lubGluZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY5NS1cdFx0c3RydWN0IG52bWVfY29tbWFuZCAqYywgdTMyIGRhdGFfbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3MDMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNzA0OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldF9zZ19ob3N0X2RhdGEoc3RydWN0IG52bWVfY29tbWFuZCAqYyxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3MDUtXHRcdHUzMiBkYXRhX2xlbilcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNzE0LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjcxNTpzdGF0aWMgdm9pZCBudm1lX3RjcF9zdWJtaXRfYXN5bmNfZXZlbnQoc3RydWN0IG52bWVfY3RybCAqYXJnKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjcxNi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjc0NC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI3NDU6c3RhdGljIHZvaWQgbnZtZV90Y3BfY29tcGxldGVfdGltZWRfb3V0KHN0cnVjdCByZXF1ZXN0ICpycSlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ5MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZXZpc2VkIFN5bWJvbCBGb2N1cyoqCgpPa2F5LCBob2xkIG9uLiBJIHdhcyBpbml0aWFsbHkgZml4YXRlZCBvbiB3aGV0aGVyIGBudm1lX3RjcF9pbml0X2Nvbm5lY3Rpb25gIG9yIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAgd2VyZSBzdGF0aWMuIFJpZ2h0LCB0aG9zZSBhcmUgc3RhdGljLiBCdXQsIEkgdGhpbmsgSSBjYW4gcmVmaW5lIHRoaXMuIEkgY2FuIGFic29sdXRlbHkgdXNlIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAsIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAgYXMgbXkga2V5IEZvY3VzU3ltYm9scy4gVGhlIGd1aWRlbGluZXMgc3BlY2lmaWNhbGx5IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gSG93ZXZlciwgaWYgdGhhdCBpZGVhbCBpc24mIzM5O3QgcG9zc2libGUsIHRoZW4gSSYjMzk7bSBmaW5lIHdpdGggbGlzdGluZyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGZpdCB0aGUgYmlsbC4KClRoaW5raW5nIGZ1cnRoZXIsICpudm1lX3RjcF9jcmVhdGVfY3RybCogaXMsIGluIGZhY3QsIHRoZSBlbnRyeSBwb2ludCBmb3IgY29udHJvbGxlciBjcmVhdGlvbi4gSXQgaXMgc3RhdGljLCBidXQgYmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiBkdXJpbmcgdGhlIHJlZ2lzdHJhdGlvbiBhcyBhIGNhbGxiYWNrIGluIGBudm1mX3RyYW5zcG9ydF9vcHNgLCB0aGUgY29tcGlsZXIgd2lsbCBub3QgaW5saW5lIGl0LiBFeGNlbGxlbnQuIFRoYXQgZml0cy4gU2ltaWxhcmx5LCBgbnZtZXRfdGNwX2FkZF9wb3J0YCBpcyBhbHNvIHJlZ2lzdGVyZWQsIGluIGBudm1ldF9mYWJyaWNzX29wc2AuCgpgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGNvdWxkIGJlIGlubGluZWQgc2luY2UgaXQmIzM5O3MgY2FsbGVkIGluIGEgbG9vcCwgYnV0IGBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZWAgYW5kIGBudm1lX3RjcF9hbGxvY19pb19xdWV1ZXNgIGFyZSBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkLgoKU28sIGxldCYjMzk7cyBzdGljayB3aXRoIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgYW5kIGBudm1ldF90Y3BfYWRkX3BvcnRgIGFzIHRoZSBwcmltYXJ5IEZvY3VzU3ltYm9scyBmb3Igbm93LgoKTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYG52bWV0X3RjcF9hZGRfcG9ydGAgd2l0aGluIGBkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZXRfdGNwX2FkZF9wb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjEwND1zdGF0aWMgdm9pZCBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjExOS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjEyMDpzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMjEte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjMxMz1zdGF0aWMgY29uc3Qgc3RydWN0IG52bWV0X2ZhYnJpY3Nfb3BzIG52bWV0X3RjcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMzE2LVx0Lm1zZGJkXHRcdFx0PSAxLFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMzE3Olx0LmFkZF9wb3J0XHRcdD0gbnZtZXRfdGNwX2FkZF9wb3J0LFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMzE4LVx0LnJlbW92ZV9wb3J0XHRcdD0gbnZtZXRfdGNwX3JlbW92ZV9wb3J0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ0NQoJCQkJCQkJb3V0cHV0OiAyMDcKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTWUgVENQIFNvY2tldCBPcHRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIGBudm1ldF90Y3BfYWRkX3BvcnRgIGlzIGRlZmluaXRlbHkgYSBjYWxsYmFjaywgd2hpY2ggaXMgZ29vZCB0byBub3RlIGZvciBsYXRlciBhbmFseXNpcy4gTm93LCB3aGF0IGFib3V0IGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgPyBBaCwgeWVzLCB0aGF0JiMzOTtzIGNhbGxlZCB3aXRoaW4gYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLiBBbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIG1lYW5pbmcgd2UmIzM5O3JlIHRha2luZyBpdHMgYWRkcmVzcy4gSXQgd29uJiMzOTt0IGJlIGlubGluZWQuIFNvIHdlIG5lZWQgdG8gYWRkIHRoYXQgb25lIHRvIHRoZSBsaXN0IGFzIHdlbGwuCgpUaGVyZWZvcmUsIGZvciBvdXIgRm9jdXNTeW1ib2xzLCB3ZSBoYXZlOgoKKiAgIGBudm1lX3RjcF9jcmVhdGVfY3RybGAKKiAgIGBudm1ldF90Y3BfYWRkX3BvcnRgCiogICBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYAoKTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb25zIHdlIHNob3VsZCBjYXJlIGFib3V0OgoKKiAgIGBOVk1FX1RDUGAKKiAgIGBOVk1FX1RBUkdFVGAKKiAgIGBOVk1FX1RBUkdFVF9UQ1BgCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AgYW5kIGBkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jYC4gSXQmIzM5O3MgcmVwbGFjaW5nIGRpcmVjdCBzb2NrZXQgb3B0aW9uIHNldHRpbmcgd2l0aCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBhZGRzIGNydWNpYWwgZXJyb3IgY2hlY2tpbmcsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBpdCBpbnRyb2R1Y2VzIHRoZSBhYmlsaXR5IGZvciBCUEYvTFNNIGhvb2tzIHRvIGludGVyY2VwdCBhbmQgaW5mbHVlbmNlIHRoZSBzb2NrZXQgb3B0aW9uIHNldHRpbmdzLiBUaGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHRoZSBzb2NrZXRzIGFyZSBzZXQgdXAgYW5kIHRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGNoYW5nZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIGRvdWJsZS1jaGVja2VkIGlmIGBkb19zb2NrX3NldHNvY2tvcHRgIGlzIGV4cG9ydGVkLCBhbmQgeWVzLCB0aGUgZ3JlcCBvdXRwdXQgY29uZmlybXMgYEVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtgLgoKTXkgUmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCByZXBsYWNlcyBkaXJlY3Qgc29ja2V0IG9wdGlvbiBhc3NpZ25tZW50cyAodGhpbmdzIGxpa2UgYHRjcF9zb2NrX3NldF9zeW5jbnRgIGFuZCBgc29ja19ub19saW5nZXJgKSB3aXRoIGBkb19zb2NrX3NldHNvY2tvcHQoKWAgaW4gYm90aCB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMuIFRoZSBzaWduaWZpY2FuY2UgaXMgdGhhdCBgZG9fc29ja19zZXRzb2Nrb3B0KClgIHdpbGwgaW52b2tlIHRoZSBMU00gYW5kIEJQRiBjZ3JvdXAgaG9va3MgKGBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdGAgYW5kIGBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFRgKS4gVGhpcyBhbGxvd3Mgc2VjdXJpdHkgbW9kdWxlcyBhbmQgQlBGIHByb2dyYW1zIHRvIGFjdGl2ZWx5IGludGVyY2VwdCwgcG90ZW50aWFsbHkgbW9kaWZ5LCBvciBmbGF0LW91dCBkZW55IHRoZXNlIHNvY2tldCBvcHRpb25zLiBJdCBhbHNvIGFkZHMgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcXVldWUgYWxsb2NhdGlvbiBmYWlsaW5nIGlmIHNldHRpbmcgdGhlIG9wdGlvbnMgZmFpbHMuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IGhvdyBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQgaW4gTlZNZSBvdmVyIFRDUCwgc28gZnV6emluZyB0aG9zZSBwYXRocyBpcyBlc3NlbnRpYWwuCgpNeSBmaW5hbCBjb25zb2xpZGF0ZWQgdmlldyBpczoKCkNvbmZpZ3M6CmBOVk1FX1RDUGAKYE5WTUVfVEFSR0VUYApgTlZNRV9UQVJHRVRfVENQYAoKRm9jdXNTeW1ib2xzOgpgbnZtZV90Y3BfY3JlYXRlX2N0cmxgCmBudm1ldF90Y3BfYWRkX3BvcnRgCmBudm1ldF90Y3BfYWNjZXB0X3dvcmtgCgpMZXQmIzM5O3MgY2FsbCB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX1RDUCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudm1lX3RjcF9jcmVhdGVfY3RybCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FjY2VwdF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGRpcmVjdCBzb2NrZXQgb3B0aW9uIGFzc2lnbm1lbnRzIChlLmcuLCB0Y3Bfc29ja19zZXRfc3luY250LCBzb2NrX25vX2xpbmdlcikgd2l0aCBkb19zb2NrX3NldHNvY2tvcHQoKSBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGRvX3NvY2tfc2V0c29ja29wdCgpIGludm9rZXMgTFNNIGFuZCBCUEYgY2dyb3VwIGhvb2tzLCBhbGxvd2luZyBzZWN1cml0eSBtb2R1bGVzIGFuZCBCUEYgcHJvZ3JhbXMgdG8gaW50ZXJjZXB0LCBtb2RpZnksIG9yIGRlbnkgdGhlc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGFsc28gYWRkcyBlcnJvciBoYW5kbGluZyB0aGF0IGZhaWxzIHF1ZXVlIGFsbG9jYXRpb24gaWYgc2V0dGluZyB0aGUgb3B0aW9ucyBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIHJlYWNoYWJsZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIGluIE5WTWUgb3ZlciBUQ1AgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05WTUVfVENQJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1RDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O252bWVfdGNwX2NyZWF0ZV9jdHJsJiMzNDssCiAgICAmIzM0O252bWV0X3RjcF9hZGRfcG9ydCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWNjZXB0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgZGlyZWN0IHNvY2tldCBvcHRpb24gYXNzaWdubWVudHMgKGUuZy4sIHRjcF9zb2NrX3NldF9zeW5jbnQsIHNvY2tfbm9fbGluZ2VyKSB3aXRoIGRvX3NvY2tfc2V0c29ja29wdCgpIGluIHRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgZG9fc29ja19zZXRzb2Nrb3B0KCkgaW52b2tlcyBMU00gYW5kIEJQRiBjZ3JvdXAgaG9va3MsIGFsbG93aW5nIHNlY3VyaXR5IG1vZHVsZXMgYW5kIEJQRiBwcm9ncmFtcyB0byBpbnRlcmNlcHQsIG1vZGlmeSwgb3IgZGVueSB0aGVzZSBzb2NrZXQgb3B0aW9ucy4gSXQgYWxzbyBhZGRzIGVycm9yIGhhbmRsaW5nIHRoYXQgZmFpbHMgcXVldWUgYWxsb2NhdGlvbiBpZiBzZXR0aW5nIHRoZSBvcHRpb25zIGZhaWxzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgcmVhY2hhYmxlIGNvbm5lY3Rpb24gc2V0dXAgcGF0aHMgaW4gTlZNZSBvdmVyIFRDUCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBzb2NrZXQgb3B0aW9uIHNldHRpbmcgaW4gdGhlIE5WTWUgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIGJ5IHJlcGxhY2luZyBkaXJlY3QgY2FsbHMgdG8gc3BlY2lmaWMgaGVscGVycyAobGlrZSBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLCBgc29ja19ub19saW5nZXJgLCBldGMuKSB3aXRoIGxvY2FsIHdyYXBwZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyBwYXNzZWQgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgKGUuZy4sIGBpbnQgdmFsID0gMTtgLCBgc3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtgLCBvciBmdW5jdGlvbiBhcmd1bWVudHMgcGFzc2VkIGJ5IHZhbHVlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZywgYW5kIG5vIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSByZWxhdGVkIHRvIGluY29ycmVjdCBzb2NrZXQgb3B0aW9ucyBvciBlcnJvciBoYW5kbGluZywgd2hpY2ggYXJlIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYW5kIGRvIG5vdCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzUzNDBmMjMxODZiZjMyYzkzNGI3NWI2NWU1ZDBhZjQwNDNjMDIxOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDA2OjMzOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuYwppbmRleCBiYTVjN2IzZTJhN2M2Li41ZjMwYmUwNGE5ZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuYwpAQCAtMTc3NCw2ICYjNDM7MTc3NCw1OCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3RscyhzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9OwomIzQzOwomIzQzOwlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtsaW5nKSwgc2l6ZW9mKGxpbmcpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSkKJiM0Mzt7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLAomIzQzOwkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7cHJpb3JpdHkpLCBzaXplb2YocHJpb3JpdHkpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyICppZmFjZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsCiYjNDM7CQkJCSAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksCiYjNDM7CQkJCSAgc3RybGVuKGlmYWNlKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt2YWwpLCBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCkKJiM0Mzt7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt2YWwpLCBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcykKJiM0Mzt7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLAomIzQzOwkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dG9zKSwgc2l6ZW9mKHRvcykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikKJiM0MzsJCXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUFY2LAomIzQzOwkJCQkJICBJUFY2X1RDTEFTUywgS0VSTkVMX1NPQ0tQVFIoJmFtcDt0Y2xhc3MpLAomIzQzOwkJCQkJICBzaXplb2YodGNsYXNzKSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsCiAJCQkJa2V5X3NlcmlhbF90IHBza2lkKQogewpAQCAtMTgxOSwyNCAmIzQzOzE4NzEsNjUgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCwKICNlbmRpZgogCiAJLyogU2luZ2xlIHN5biByZXRyeSAqLwotCXRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtJmd0O3NvY2stJmd0O3NrLCAxKTsKJiM0MzsJcmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgMSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2ZhaWxlZCB0byBzZXQgVENQX1NZTkNOVCBvbiBxdWV1ZSAlZCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCXFpZCwgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CX0KIAogCS8qIFNldCBUQ1Agbm8gZGVsYXkgKi8KLQl0Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2spOwomIzQzOwlyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2ZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcXVldWUgJWQgZXJyICVkXG4mIzM0OywKJiM0MzsJCQlxaWQsIHJldCk7CiYjNDM7CQlnb3RvIGVycl9zb2NrOwomIzQzOwl9CiAKIAkvKgogCSAqIENsZWFudXAgd2hhdGV2ZXIgaXMgc2l0dGluZyBpbiB0aGUgVENQIHRyYW5zbWl0IHF1ZXVlIG9uIHNvY2tldAogCSAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGQKIAkgKiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGJlIHJlc3RvcmVkIGJlZm9yZSBUQ1AgdGltZXMgb3V0LgogCSAqLwotCXNvY2tfbm9fbGluZ2VyKHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CXJldCA9IG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2ZhaWxlZCB0byBzZXQgU09fTElOR0VSIG9uIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJcWlkLCByZXQpOwomIzQzOwkJZ290byBlcnJfc29jazsKJiM0MzsJfQogCi0JaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkKLQkJc29ja19zZXRfcHJpb3JpdHkocXVldWUtJmd0O3NvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiYjNDM7CWlmIChzb19wcmlvcml0eSAmZ3Q7IDApIHsKJiM0MzsJCXJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkJJiMzNDtmYWlsZWQgdG8gc2V0IFNPX1BSSU9SSVRZIG9uIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJCXFpZCwgcmV0KTsKJiM0MzsJCQlnb3RvIGVycl9zb2NrOwomIzQzOwkJfQomIzQzOwl9CiAKIAkvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqLwotCWlmIChuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zICZndDs9IDApCi0JCWlwX3NvY2tfc2V0X3RvcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwlpZiAobmN0cmwtJmd0O29wdHMtJmd0O3RvcyAmZ3Q7PSAwKSB7CiYjNDM7CQlyZXQgPSBudm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtJmd0O3NvY2stJmd0O3NrLCBuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlkZXZfZXJyKG5jdHJsLSZndDtkZXZpY2UsCiYjNDM7CQkJCSYjMzQ7ZmFpbGVkIHRvIHNldCBJUF9UT1Mgb24gcXVldWUgJWQgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkJcWlkLCByZXQpOwomIzQzOwkJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgPSBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtJmd0O3NvY2stJmd0O3NrLAomIzQzOwkJCQkJICAgICAgIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkJJiMzNDtmYWlsZWQgdG8gc2V0IElQVjZfVENMQVNTIG9uIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJCXFpZCwgcmV0KTsKJiM0MzsJCQlnb3RvIGVycl9zb2NrOwomIzQzOwkJfQomIzQzOwl9CiAKIAkvKiBTZXQgMTAgc2Vjb25kcyB0aW1lb3V0IGZvciBpY3Jlc3AgcmVjdm1zZyAqLwogCXF1ZXVlLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfcmN2dGltZW8gPSAxMCAqIEhaOwpAQCAtMTg2NCwxMCAmIzQzOzE5NTcsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogCiAJaWYgKG5jdHJsLSZndDtvcHRzLSZndDttYXNrICZhbXA7IE5WTUZfT1BUX0hPU1RfSUZBQ0UpIHsKIAkJY2hhciAqaWZhY2UgPSBuY3RybC0mZ3Q7b3B0cy0mZ3Q7aG9zdF9pZmFjZTsKLQkJc29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTsKIAotCQlyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtJmd0O3NvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwKLQkJCQkgICAgICBvcHR2YWwsIHN0cmxlbihpZmFjZSkpOwomIzQzOwkJcmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHF1ZXVlLSZndDtzb2NrLSZndDtzaywgaWZhY2UpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKG5jdHJsLSZndDtkZXZpY2UsCiAJCQkgICYjMzQ7ZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYwppbmRleCA3NWEyNzZkNzNiZTNlLi5lZDQxM2FhNTYwMWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKQEAgLTE2OTYsMTAgJiM0MzsxNjk2LDY2IEBAIHN0YXRpYyB2b2lkIG52bWV0X3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKQogCXJlYWRfdW5sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2NhbGxiYWNrX2xvY2spOwogfQogCiYjNDM7c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLAomIzQzOwkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7bGluZyksIHNpemVvZihsaW5nKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJaW50IHZhbCA9IFNLX0NBTl9SRVVTRTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwKJiM0MzsJCQkJICBTT19SRVVTRUFERFIsIEtFUk5FTF9TT0NLUFRSKCZhbXA7dmFsKSwKJiM0MzsJCQkJICBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJaW50IHZhbCA9IDE7CiYjNDM7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLAomIzQzOwkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dmFsKSwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJaW50IHRvcyA9IGluZXRfc2soc2spLSZndDtyY3ZfdG9zOwomIzQzOwomIzQzOwlpZiAodG9zICZndDsgMCkKJiM0MzsJCXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLAomIzQzOwkJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3RvcyksIHNpemVvZih0b3MpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikgewomIzQzOwkJaW50IHRjbGFzcyA9IGlwNl90Y2xhc3MoaW5ldDZfc2soc2spLSZndDtyY3ZfZmxvd2luZm8pOwomIzQzOwomIzQzOwkJaWYgKHRjbGFzcyAmZ3Q7IDApCiYjNDM7CQkJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwKJiM0MzsJCQkJCQkgIFNPTF9JUFY2LCBJUFY2X1RDTEFTUywKJiM0MzsJCQkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dGNsYXNzKSwKJiM0MzsJCQkJCQkgIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSkKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcXVldWUtJmd0O3NvY2s7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc29jay0mZ3Q7c2spOwogCWludCByZXQ7CiAKIAlyZXQgPSBrZXJuZWxfZ2V0c29ja25hbWUoc29jaywKQEAgLTE3MTcsMTQgJiM0MzsxNzczLDI0IEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKQogCSAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGQKIAkgKiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGJlIHJlc3RvcmVkIGJlZm9yZSBUQ1AgdGltZXMgb3V0LgogCSAqLwotCXNvY2tfbm9fbGluZ2VyKHNvY2stJmd0O3NrKTsKJiM0MzsJcmV0ID0gbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHNvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKLQlpZiAoc29fcHJpb3JpdHkgJmd0OyAwKQotCQlzb2NrX3NldF9wcmlvcml0eShzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwlpZiAoc29fcHJpb3JpdHkgJmd0OyAwKSB7CiYjNDM7CQlyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJLyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi8KLQlpZiAoaW5ldC0mZ3Q7cmN2X3RvcyAmZ3Q7IDApCi0JCWlwX3NvY2tfc2V0X3Rvcyhzb2NrLSZndDtzaywgaW5ldC0mZ3Q7cmN2X3Rvcyk7CiYjNDM7CXJldCA9IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay0mZ3Q7c2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLSZndDtzayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gMDsKIAl3cml0ZV9sb2NrX2JoKCZhbXA7c29jay0mZ3Q7c2stJmd0O3NrX2NhbGxiYWNrX2xvY2spOwpAQCAtMjA5OCwxMCAmIzQzOzIxNjQsMjYgQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KQogCXBvcnQtJmd0O3NvY2stJmd0O3NrLSZndDtza191c2VyX2RhdGEgPSBwb3J0OwogCXBvcnQtJmd0O2RhdGFfcmVhZHkgPSBwb3J0LSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfZGF0YV9yZWFkeTsKIAlwb3J0LSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfZGF0YV9yZWFkeSA9IG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeTsKLQlzb2NrX3NldF9yZXVzZWFkZHIocG9ydC0mZ3Q7c29jay0mZ3Q7c2spOwotCXRjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtJmd0O3NvY2stJmd0O3NrKTsKLQlpZiAoc29fcHJpb3JpdHkgJmd0OyAwKQotCQlzb2NrX3NldF9wcmlvcml0eShwb3J0LSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwlyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNldCBTT19SRVVTRUFERFIgb24gcG9ydCBzb2NrZXQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfc29jazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LSZndDtzb2NrLSZndDtzayk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByX2VycigmIzM0O2ZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcG9ydCBzb2NrZXQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfc29jazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc29fcHJpb3JpdHkgJmd0OyAwKSB7CiYjNDM7CQlyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkocG9ydC0mZ3Q7c29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gc2V0IFNPX1BSSU9SSVRZIG9uIHBvcnQgc29ja2V0ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgcmV0KTsKJiM0MzsJCQlnb3RvIGVycl9zb2NrOwomIzQzOwkJfQomIzQzOwl9CiAKIAlyZXQgPSBrZXJuZWxfYmluZChwb3J0LSZndDtzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKikmYW1wO3BvcnQtJmd0O2FkZHIsCiAJCQlzaXplb2YocG9ydC0mZ3Q7YWRkcikpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjExbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODMKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMTM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5WTWUgVENQIFNvY2tldCBPcHRpb24gUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBib3RoIHRoZSBob3N0IGFuZCB0YXJnZXQgVENQIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gdGhlIE5WTWUgZHJpdmVycy4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyBkaXJlY3QgY2FsbHMgdG8gdGhvc2Ugc3BlY2lmaWMgc29ja2V0IG9wdGlvbiBzZXR0aW5nIGZ1bmN0aW9ucyDigJMgdGhpbmdzIGxpa2UgYHRjcF9zb2NrX3NldF9ub2RlbGF5YCBhbmQgYHNvY2tfbm9fbGluZ2VyYCDigJMgd2l0aCB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IHVuaWZvcm1seSB1c2UgYGRvX3NvY2tfc2V0c29ja29wdGAuIFRoZSBnb2FsLCBJIGFzc3VtZSwgaXMgY2xlYW5lciBjb2RlIGFuZCBwb3RlbnRpYWxseSBlYXNpZXIgbWFpbnRlbmFuY2UgYnkgY2VudHJhbGl6aW5nIHRoZSBzb2NrZXQgb3B0aW9uIHNldHRpbmcgbG9naWMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgdXMgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBJIHNlZSB0aGVzZSB3cmFwcGVyIGZ1bmN0aW9ucywgYW5kIEkmIzM5O20gd2Fsa2luZyB0aHJvdWdoIHRoZW0uIEl0JiMzOTtzIGNsZWFyIHRoYXQgYWxsIHRoZSB2YXJpYWJsZXMgcGFzc2VkIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIGFyZSAqZnVsbHkqIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQuIFdlIGhhdmUgYGludCB2YWwgPSAxO2AsIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIGFuZCBmdW5jdGlvbiBhcmd1bWVudHMgcGFzc2VkIGJ5IHZhbHVlLgoKU3BlY2lmaWNhbGx5LCB0aGF0IGBsaW5nZXJgIHN0cnVjdCBpcyBzb21ldGhpbmcgdG8gZG91YmxlLWNoZWNrLiBTbyBJJiMzOTttIHB1bGxpbmcgdXAgdGhlIGRlZmluaXRpb24gKG1vc3QgbGlrZWx5IGluIGBpbmNsdWRlL3VhcGkvbGludXgvc29ja2V0LmhgKS4gQWgsIHllcywgdHdvIGludHMsIG5vIHBhZGRpbmcuIFRoZSBvdGhlciB2YXJpYWJsZXMgYXJlIHNpbXBseSBpbnRlZ2VycyBvciB1bnNpZ25lZCBpbnRlZ2Vycy4gTm8gY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHRoZSBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWthZ2UgZnJvbSB0aGUga2VybmVsIHRvIHVzZXIgc3BhY2UuCgpUaGUgd3JhcHBlcnMgdXNlIGBLRVJORUxfU09DS1BUUmAgdG8gY3JlYXRlIGEgYHNvY2twdHJfdGAsIGJ1dCB0aGlzIGlzIGEgKmtlcm5lbCogcG9pbnRlciwgYW5kIGl0JiMzOTtzIHBvaW50aW5nIHRvIGluaXRpYWxpemVkIGRhdGEgb24gdGhlIHN0YWNrLiBUaGVyZSYjMzk7cyB6ZXJvIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCB3aGljaCBpcyB3aGF0IHdlIGFyZSBjb25jZXJuZWQgYWJvdXQuCgpFc3NlbnRpYWxseSwgYWxsIGRhdGEgcGFzc2VkIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIGlzIGluaXRpYWxpemVkLiBUaGVzZSBjaGFuZ2VzLCBhdCB3b3JzdCwgY291bGQgaW50cm9kdWNlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgKmxvZ2ljKiBvZiB0aGUgc29ja2V0IG9wdGlvbnMgb3IgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIHdvdWxkbiYjMzk7dCBiZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBzYWZlIHRvIHNheTogYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlIGRvbiYjMzk7dCBuZWVkIEtNU0FOIGhlcmU7IHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBvcHRpb24gc2V0dGluZyBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgYnkgcmVwbGFjaW5nIGRpcmVjdCBjYWxscyB0byBzcGVjaWZpYyBoZWxwZXJzIChsaWtlIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGBzb2NrX25vX2xpbmdlcmAsIGV0Yy4pIHdpdGggbG9jYWwgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBkb19zb2NrX3NldHNvY2tvcHRgLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoZS5nLiwgYGludCB2YWwgPSAxO2AsIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgYnkgdmFsdWUpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nLCBhbmQgbm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHNvY2tldCBvcHRpb25zIG9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCBhcmUgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBvcHRpb24gc2V0dGluZyBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgYnkgcmVwbGFjaW5nIGRpcmVjdCBjYWxscyB0byBzcGVjaWZpYyBoZWxwZXJzIChsaWtlIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGBzb2NrX25vX2xpbmdlcmAsIGV0Yy4pIHdpdGggbG9jYWwgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBkb19zb2NrX3NldHNvY2tvcHRgLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoZS5nLiwgYGludCB2YWwgPSAxO2AsIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgYnkgdmFsdWUpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nLCBhbmQgbm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHNvY2tldCBvcHRpb25zIG9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCBhcmUgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzoxMC4zMDI3NTk5NTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDI5Njc4OTUzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlZNRV9UQ1BcIixcbiAgICBcIk5WTUVfVEFSR0VUXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudm1lX3RjcF9jcmVhdGVfY3RybFwiLFxuICAgIFwibnZtZXRfdGNwX2FkZF9wb3J0XCIsXG4gICAgXCJudm1ldF90Y3BfYWNjZXB0X3dvcmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBzb2NrZXQgb3B0aW9uIHNldHRpbmcgaW4gdGhlIE5WTWUgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIGJ5IHJlcGxhY2luZyBkaXJlY3QgY2FsbHMgdG8gc3BlY2lmaWMgaGVscGVycyAobGlrZSBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLCBgc29ja19ub19saW5nZXJgLCBldGMuKSB3aXRoIGxvY2FsIHdyYXBwZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyBwYXNzZWQgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgKGUuZy4sIGBpbnQgdmFsID0gMTtgLCBgc3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtgLCBvciBmdW5jdGlvbiBhcmd1bWVudHMgcGFzc2VkIGJ5IHZhbHVlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZywgYW5kIG5vIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSByZWxhdGVkIHRvIGluY29ycmVjdCBzb2NrZXQgb3B0aW9ucyBvciBlcnJvciBoYW5kbGluZywgd2hpY2ggYXJlIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYW5kIGRvIG5vdCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3Qgc29ja2V0IG9wdGlvbiBhc3NpZ25tZW50cyAoZS5nLiwgdGNwX3NvY2tfc2V0X3N5bmNudCwgc29ja19ub19saW5nZXIpIHdpdGggZG9fc29ja19zZXRzb2Nrb3B0KCkgaW4gdGhlIE5WTWUgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBkb19zb2NrX3NldHNvY2tvcHQoKSBpbnZva2VzIExTTSBhbmQgQlBGIGNncm91cCBob29rcywgYWxsb3dpbmcgc2VjdXJpdHkgbW9kdWxlcyBhbmQgQlBGIHByb2dyYW1zIHRvIGludGVyY2VwdCwgbW9kaWZ5LCBvciBkZW55IHRoZXNlIHNvY2tldCBvcHRpb25zLiBJdCBhbHNvIGFkZHMgZXJyb3IgaGFuZGxpbmcgdGhhdCBmYWlscyBxdWV1ZSBhbGxvY2F0aW9uIGlmIHNldHRpbmcgdGhlIG9wdGlvbnMgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSByZWFjaGFibGUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyBpbiBOVk1lIG92ZXIgVENQIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzoxMC4zMDI3NjUwMzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NTEzNDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc1MzQwZjIzMTg2YmYzMmM5MzRiNzViNjVlNWQwYWY0MDQzYzAyMThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDY6MzM6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xcbmluZGV4IGJhNWM3YjNlMmE3YzYuLjVmMzBiZTA0YTlkZGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xcbkBAIC0xNzc0LDYgKzE3NzQsNTggQEAgc3RhdGljIGludCBudm1lX3RjcF9zdGFydF90bHMoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07XFxuK1xcbitcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXFxuK1xcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxcbit7XFxuK1xcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLFxcbitcXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxcbit7XFxuK1xcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXFxuK1xcdFxcdFxcdFxcdCAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksXFxuK1xcdFxcdFxcdFxcdCAgc3RybGVuKGlmYWNlKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0aW50IHZhbCA9IDE7XFxuK1xcbitcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcXG4rXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuK3tcXG4rXFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX1NZTkNOVCxcXG4rXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0b3MpXFxuK3tcXG4rXFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXFxuK1xcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxcbit7XFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbitcXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4rXFx0XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ0Y2xhc3MpLFxcbitcXHRcXHRcXHRcXHRcXHQgIHNpemVvZih0Y2xhc3MpKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxcbiBcXHRcXHRcXHRcXHRrZXlfc2VyaWFsX3QgcHNraWQpXFxuIHtcXG5AQCAtMTgxOSwyNCArMTg3MSw2NSBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxcbiAjZW5kaWZcXG4gXFxuIFxcdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cXG4tXFx0dGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIDEpO1xcbitcXHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrLCAxKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKG5jdHJsLVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdFxcXCJmYWlsZWQgdG8gc2V0IFRDUF9TWU5DTlQgb24gcXVldWUgJWQgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRxaWQsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX3NvY2s7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFNldCBUQ1Agbm8gZGVsYXkgKi9cXG4tXFx0dGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4rXFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIobmN0cmwtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcImZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcXVldWUgJWQgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRxaWQsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX3NvY2s7XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIENsZWFudXAgd2hhdGV2ZXIgaXMgc2l0dGluZyBpbiB0aGUgVENQIHRyYW5zbWl0IHF1ZXVlIG9uIHNvY2tldFxcbiBcXHQgKiBjbG9zZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgc2hvdWxkXFxuIFxcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXFxuIFxcdCAqL1xcbi1cXHRzb2NrX25vX2xpbmdlcihxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbitcXHRyZXQgPSBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIobmN0cmwtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcImZhaWxlZCB0byBzZXQgU09fTElOR0VSIG9uIHF1ZXVlICVkIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cWlkLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9zb2NrO1xcbitcXHR9XFxuIFxcbi1cXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKVxcbi1cXHRcXHRzb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcXG4rXFx0aWYgKHNvX3ByaW9yaXR5IFxcdTAwM2UgMCkge1xcbitcXHRcXHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKG5jdHJsLVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcXCJmYWlsZWQgdG8gc2V0IFNPX1BSSU9SSVRZIG9uIHF1ZXVlICVkIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cWlkLCByZXQpO1xcbitcXHRcXHRcXHRnb3RvIGVycl9zb2NrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXFxuLVxcdGlmIChuY3RybC1cXHUwMDNlb3B0cy1cXHUwMDNldG9zIFxcdTAwM2U9IDApXFxuLVxcdFxcdGlwX3NvY2tfc2V0X3RvcyhxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIG5jdHJsLVxcdTAwM2VvcHRzLVxcdTAwM2V0b3MpO1xcbitcXHRpZiAobmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZXRvcyBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIG5jdHJsLVxcdTAwM2VvcHRzLVxcdTAwM2V0b3MpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGRldl9lcnIobmN0cmwtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFx0XFxcImZhaWxlZCB0byBzZXQgSVBfVE9TIG9uIHF1ZXVlICVkIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cWlkLCByZXQpO1xcbitcXHRcXHRcXHRnb3RvIGVycl9zb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZXRvcyk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihuY3RybC1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIHNldCBJUFY2X1RDTEFTUyBvbiBxdWV1ZSAlZCBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHFpZCwgcmV0KTtcXG4rXFx0XFx0XFx0Z290byBlcnJfc29jaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHQvKiBTZXQgMTAgc2Vjb25kcyB0aW1lb3V0IGZvciBpY3Jlc3AgcmVjdm1zZyAqL1xcbiBcXHRxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX3JjdnRpbWVvID0gMTAgKiBIWjtcXG5AQCAtMTg2NCwxMCArMTk1Nyw4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXFxuIFxcbiBcXHRpZiAobmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZW1hc2sgXFx1MDAyNiBOVk1GX09QVF9IT1NUX0lGQUNFKSB7XFxuIFxcdFxcdGNoYXIgKmlmYWNlID0gbmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZWhvc3RfaWZhY2U7XFxuLVxcdFxcdHNvY2twdHJfdCBvcHR2YWwgPSBLRVJORUxfU09DS1BUUihpZmFjZSk7XFxuIFxcbi1cXHRcXHRyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtXFx1MDAzZXNvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgb3B0dmFsLCBzdHJsZW4oaWZhY2UpKTtcXG4rXFx0XFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgaWZhY2UpO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGRldl9lcnIobmN0cmwtXFx1MDAzZWRldmljZSxcXG4gXFx0XFx0XFx0ICBcXFwiZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcXG5pbmRleCA3NWEyNzZkNzNiZTNlLi5lZDQxM2FhNTYwMWM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXFxuQEAgLTE2OTYsMTAgKzE2OTYsNjYgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xcbitcXG4rXFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLFxcbitcXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXFxuK3tcXG4rXFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXFxuK1xcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0aW50IHZhbCA9IFNLX0NBTl9SRVVTRTtcXG4rXFxuK1xcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXFxuK1xcdFxcdFxcdFxcdCAgU09fUkVVU0VBRERSLCBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSxcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2YodmFsKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdGludCB2YWwgPSAxO1xcbitcXG4rXFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXFxuK1xcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRpbnQgdG9zID0gaW5ldF9zayhzayktXFx1MDAzZXJjdl90b3M7XFxuK1xcbitcXHRpZiAodG9zIFxcdTAwM2UgMClcXG4rXFx0XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuK1xcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuK1xcdFxcdGludCB0Y2xhc3MgPSBpcDZfdGNsYXNzKGluZXQ2X3NrKHNrKS1cXHUwMDNlcmN2X2Zsb3dpbmZvKTtcXG4rXFxuK1xcdFxcdGlmICh0Y2xhc3MgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFNPTF9JUFY2LCBJUFY2X1RDTEFTUyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2dGNsYXNzKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzaXplb2YodGNsYXNzKSk7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcXVldWUtXFx1MDAzZXNvY2s7XFxuLVxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNvY2stXFx1MDAzZXNrKTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJldCA9IGtlcm5lbF9nZXRzb2NrbmFtZShzb2NrLFxcbkBAIC0xNzE3LDE0ICsxNzczLDI0IEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxcbiBcXHQgKiBjbG9zZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgc2hvdWxkXFxuIFxcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXFxuIFxcdCAqL1xcbi1cXHRzb2NrX25vX2xpbmdlcihzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdHJldCA9IG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKVxcbi1cXHRcXHRzb2NrX3NldF9wcmlvcml0eShzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbitcXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbiBcXHQvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqL1xcbi1cXHRpZiAoaW5ldC1cXHUwMDNlcmN2X3RvcyBcXHUwMDNlIDApXFxuLVxcdFxcdGlwX3NvY2tfc2V0X3Rvcyhzb2NrLVxcdTAwM2VzaywgaW5ldC1cXHUwMDNlcmN2X3Rvcyk7XFxuK1xcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay1cXHUwMDNlc2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSAwO1xcbiBcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuQEAgLTIwOTgsMTAgKzIxNjQsMjYgQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxcbiBcXHRwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhID0gcG9ydDtcXG4gXFx0cG9ydC1cXHUwMDNlZGF0YV9yZWFkeSA9IHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19kYXRhX3JlYWR5O1xcbiBcXHRwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSA9IG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeTtcXG4tXFx0c29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4tXFx0dGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbi1cXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKVxcbi1cXHRcXHRzb2NrX3NldF9wcmlvcml0eShwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbitcXHRyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBzZXQgU09fUkVVU0VBRERSIG9uIHBvcnQgc29ja2V0ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9zb2NrO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gc2V0IFRDUF9OT0RFTEFZIG9uIHBvcnQgc29ja2V0ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9zb2NrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIHNldCBTT19QUklPUklUWSBvbiBwb3J0IHNvY2tldCAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHJldCk7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3NvY2s7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0ga2VybmVsX2JpbmQocG9ydC1cXHUwMDNlc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopXFx1MDAyNnBvcnQtXFx1MDAzZWFkZHIsXFxuIFxcdFxcdFxcdHNpemVvZihwb3J0LVxcdTAwM2VhZGRyKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjMzOjEwLjY1ODY2MzQzNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI0NTE1MjAxNDk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVk1FX1RDUFwiLFxuICAgIFwiTlZNRV9UQVJHRVRcIixcbiAgICBcIk5WTUVfVEFSR0VUX1RDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm52bWVfdGNwX2NyZWF0ZV9jdHJsXCIsXG4gICAgXCJudm1ldF90Y3BfYWRkX3BvcnRcIixcbiAgICBcIm52bWV0X3RjcF9hY2NlcHRfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGRpcmVjdCBzb2NrZXQgb3B0aW9uIGFzc2lnbm1lbnRzIChlLmcuLCB0Y3Bfc29ja19zZXRfc3luY250LCBzb2NrX25vX2xpbmdlcikgd2l0aCBkb19zb2NrX3NldHNvY2tvcHQoKSBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGRvX3NvY2tfc2V0c29ja29wdCgpIGludm9rZXMgTFNNIGFuZCBCUEYgY2dyb3VwIGhvb2tzLCBhbGxvd2luZyBzZWN1cml0eSBtb2R1bGVzIGFuZCBCUEYgcHJvZ3JhbXMgdG8gaW50ZXJjZXB0LCBtb2RpZnksIG9yIGRlbnkgdGhlc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGFsc28gYWRkcyBlcnJvciBoYW5kbGluZyB0aGF0IGZhaWxzIHF1ZXVlIGFsbG9jYXRpb24gaWYgc2V0dGluZyB0aGUgb3B0aW9ucyBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIHJlYWNoYWJsZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIGluIE5WTWUgb3ZlciBUQ1AgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc1MzQwZjIzMTg2YmYzMmM5MzRiNzViNjVlNWQwYWY0MDQzYzAyMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwNjozMzowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbmluZGV4IGJhNWM3YjNlMmE3YzYuLjVmMzBiZTA0YTlkZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbkBAIC0xNzc0LDYgKzE3NzQsNTggQEAgc3RhdGljIGludCBudm1lX3RjcF9zdGFydF90bHMoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuK1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHN0cnVjdCBzb2NrICpzaywgY2hhciAqaWZhY2UpXG4re1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULFxuK1x0XHRcdFx0ICBTT19CSU5EVE9ERVZJQ0UsIEtFUk5FTF9TT0NLUFRSKGlmYWNlKSxcbitcdFx0XHRcdCAgc3RybGVuKGlmYWNlKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0aW50IHZhbCA9IDE7XG4rXG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLFxuK1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbit7XG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdG9zKVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4rXHRcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsXG4rXHRcdFx0XHRcdCAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRjbGFzcyksXG4rXHRcdFx0XHRcdCAgc2l6ZW9mKHRjbGFzcykpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4gXHRcdFx0XHRrZXlfc2VyaWFsX3QgcHNraWQpXG4ge1xuQEAgLTE4MTksMjQgKzE4NzEsNjUgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiAjZW5kaWZcbiBcbiBcdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cbi1cdHRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4rXHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwiZmFpbGVkIHRvIHNldCBUQ1BfU1lOQ05UIG9uIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuK1x0XHRcdHFpZCwgcmV0KTtcbitcdFx0Z290byBlcnJfc29jaztcbitcdH1cbiBcbiBcdC8qIFNldCBUQ1Agbm8gZGVsYXkgKi9cbi1cdHRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuK1x0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJmYWlsZWQgdG8gc2V0IFRDUF9OT0RFTEFZIG9uIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuK1x0XHRcdHFpZCwgcmV0KTtcbitcdFx0Z290byBlcnJfc29jaztcbitcdH1cbiBcbiBcdC8qXG4gXHQgKiBDbGVhbnVwIHdoYXRldmVyIGlzIHNpdHRpbmcgaW4gdGhlIFRDUCB0cmFuc21pdCBxdWV1ZSBvbiBzb2NrZXRcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuK1x0cmV0ID0gbnZtZV90Y3Bfc29ja19ub19saW5nZXIocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwiZmFpbGVkIHRvIHNldCBTT19MSU5HRVIgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0cWlkLCByZXQpO1xuK1x0XHRnb3RvIGVycl9zb2NrO1xuK1x0fVxuIFxuLVx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRpZiAoc29fcHJpb3JpdHkgXHUwMDNlIDApIHtcbitcdFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XHRcImZhaWxlZCB0byBzZXQgU09fUFJJT1JJVFkgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0XHRxaWQsIHJldCk7XG4rXHRcdFx0Z290byBlcnJfc29jaztcbitcdFx0fVxuK1x0fVxuIFxuIFx0LyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi9cbi1cdGlmIChuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyBcdTAwM2U9IDApXG4tXHRcdGlwX3NvY2tfc2V0X3RvcyhxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyk7XG4rXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MgXHUwMDNlPSAwKSB7XG4rXHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbitcdFx0XHRcdFwiZmFpbGVkIHRvIHNldCBJUF9UT1Mgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0XHRxaWQsIHJldCk7XG4rXHRcdFx0Z290byBlcnJfc29jaztcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzayxcbitcdFx0XHRcdFx0ICAgICAgIG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFx0XCJmYWlsZWQgdG8gc2V0IElQVjZfVENMQVNTIG9uIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuK1x0XHRcdFx0cWlkLCByZXQpO1xuK1x0XHRcdGdvdG8gZXJyX3NvY2s7XG4rXHRcdH1cbitcdH1cbiBcbiBcdC8qIFNldCAxMCBzZWNvbmRzIHRpbWVvdXQgZm9yIGljcmVzcCByZWN2bXNnICovXG4gXHRxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3JjdnRpbWVvID0gMTAgKiBIWjtcbkBAIC0xODY0LDEwICsxOTU3LDggQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiBcbiBcdGlmIChuY3RybC1cdTAwM2VvcHRzLVx1MDAzZW1hc2sgXHUwMDI2IE5WTUZfT1BUX0hPU1RfSUZBQ0UpIHtcbiBcdFx0Y2hhciAqaWZhY2UgPSBuY3RybC1cdTAwM2VvcHRzLVx1MDAzZWhvc3RfaWZhY2U7XG4tXHRcdHNvY2twdHJfdCBvcHR2YWwgPSBLRVJORUxfU09DS1BUUihpZmFjZSk7XG4gXG4tXHRcdHJldCA9IHNvY2tfc2V0c29ja29wdChxdWV1ZS1cdTAwM2Vzb2NrLCBTT0xfU09DS0VULCBTT19CSU5EVE9ERVZJQ0UsXG4tXHRcdFx0XHQgICAgICBvcHR2YWwsIHN0cmxlbihpZmFjZSkpO1xuK1x0XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2UocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgaWZhY2UpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4gXHRcdFx0ICBcImZhaWxlZCB0byBiaW5kIHRvIGludGVyZmFjZSAlcyBxdWV1ZSAlZCBlcnIgJWRcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuaW5kZXggNzVhMjc2ZDczYmUzZS4uZWQ0MTNhYTU2MDFjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbkBAIC0xNjk2LDEwICsxNjk2LDY2IEBAIHN0YXRpYyB2b2lkIG52bWV0X3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxuIFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuK1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSlcbit7XG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLFxuK1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdGludCB2YWwgPSBTS19DQU5fUkVVU0U7XG4rXG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXG4rXHRcdFx0XHQgIFNPX1JFVVNFQUREUiwgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSxcbitcdFx0XHRcdCAgc2l6ZW9mKHZhbCkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdG9zID0gaW5ldF9zayhzayktXHUwMDNlcmN2X3RvcztcbitcbitcdGlmICh0b3MgXHUwMDNlIDApXG4rXHRcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spXG4re1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuK1x0XHRpbnQgdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktXHUwMDNlcmN2X2Zsb3dpbmZvKTtcbitcbitcdFx0aWYgKHRjbGFzcyBcdTAwM2UgMClcbitcdFx0XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsXG4rXHRcdFx0XHRcdFx0ICBTT0xfSVBWNiwgSVBWNl9UQ0xBU1MsXG4rXHRcdFx0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLFxuK1x0XHRcdFx0XHRcdCAgc2l6ZW9mKHRjbGFzcykpO1xuK1x0fVxuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS1cdTAwM2Vzb2NrO1xuLVx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc29jay1cdTAwM2Vzayk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0ga2VybmVsX2dldHNvY2tuYW1lKHNvY2ssXG5AQCAtMTcxNywxNCArMTc3MywyNCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuK1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMClcbi1cdFx0c29ja19zZXRfcHJpb3JpdHkoc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuK1x0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKSB7XG4rXHRcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXG4tXHRpZiAoaW5ldC1cdTAwM2VyY3ZfdG9zIFx1MDAzZSAwKVxuLVx0XHRpcF9zb2NrX3NldF90b3Moc29jay1cdTAwM2VzaywgaW5ldC1cdTAwM2VyY3ZfdG9zKTtcbitcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay1cdTAwM2Vzayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSAwO1xuIFx0d3JpdGVfbG9ja19iaChcdTAwMjZzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xuQEAgLTIwOTgsMTAgKzIxNjQsMjYgQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxuIFx0cG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSA9IHBvcnQ7XG4gXHRwb3J0LVx1MDAzZWRhdGFfcmVhZHkgPSBwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfZGF0YV9yZWFkeTtcbiBcdHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza19kYXRhX3JlYWR5ID0gbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5O1xuLVx0c29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4tXHR0Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuLVx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNldCBTT19SRVVTRUFERFIgb24gcG9ydCBzb2NrZXQgJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfc29jaztcbitcdH1cbitcbitcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByX2VycihcImZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcG9ydCBzb2NrZXQgJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfc29jaztcbitcdH1cbitcbitcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMCkge1xuK1x0XHRyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gc2V0IFNPX1BSSU9SSVRZIG9uIHBvcnQgc29ja2V0ICVkXFxuXCIsXG4rXHRcdFx0ICAgICAgIHJldCk7XG4rXHRcdFx0Z290byBlcnJfc29jaztcbitcdFx0fVxuK1x0fVxuIFxuIFx0cmV0ID0ga2VybmVsX2JpbmQocG9ydC1cdTAwM2Vzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZwb3J0LVx1MDAzZWFkZHIsXG4gXHRcdFx0c2l6ZW9mKHBvcnQtXHUwMDNlYWRkcikpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6MTAuNjU4NjY0OTQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4OTM0NjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTb2NrZXQgT3B0aW9uIFBhdGNoIGluIE5WTWUvVENQIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AgYW5kIGBkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jYC4gSXQncyByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHRob3NlIHN0YW5kYXJkIFRDUCBzb2NrZXQgaGVscGVycywgbGlrZSBgdGNwX3NvY2tfc2V0X3N5bmNudGAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGFuZCB0aGUgb3RoZXJzLCB3aXRoIGN1c3RvbSB3cmFwcGVycyB0aGF0IGFyZSBub3cgY2FsbGluZyBgZG9fc29ja19zZXRzb2Nrb3B0YC4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgXCJXaHk/XCIuIFdoeSB0aGUgY2hhbmdlIGluIGFwcHJvYWNoPyBMZXQncyBkaWcgaW50byBgdGNwX3NvY2tfc2V0X3N5bmNudGAgaXRzZWxmIGluIHRoZSBrZXJuZWwgY29kZS5cblxuUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgdGhleSdyZSBjb25zb2xpZGF0aW5nIHRoZXNlIHNvY2tldCBvcHRpb24gc2V0dGluZ3MgdGhyb3VnaCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gTm93LCBpcyB0aGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlPyBJcyBpdCByZWFjaGFibGUgYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGU/IEFic29sdXRlbHkuIFRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyBhcmUgZWFzaWx5IHNwdW4gdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBTbyB0aG9zZSBjb2RlIHBhdGhzIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyAqaG93KiBzb2NrZXQgb3B0aW9ucyBhcmUgc2V0LCB3aGljaCByYWlzZXMgZmxhZ3MgZm9yIG1lLlxuXG5MZXQgbWUgcXVpY2tseSBzZWFyY2ggZm9yIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAgYW5kIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLiBZZXAsIGNvbmZpcm1lZC4gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiBOVk1lIG92ZXIgVENQLiBBbmQgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggKmlzKiBhZGRpbmcgZXJyb3IgY2hlY2tpbmcgbm93IChsaWtlIHRoZSBgaWYgKHJldCkgeyBkZXZfZXJyKC4uLik7IGdvdG8gZXJyX3NvY2s7IH1gIGJsb2NrcykuIFByZXZpb3VzbHksIHdlcmUgdGhlc2Ugc29ja2V0IG9wdGlvbiBoZWxwZXJzIGxpa2UgYHRjcF9zb2NrX3NldF9zeW5jbnRgIHZvaWQgZnVuY3Rpb25zIG9yIGRpZCB0aGUgcmV0dXJuIHZhbHVlIGdldCBpZ25vcmVkPyBHb3R0YSBjaGVjayBgdGNwX3NvY2tfc2V0X3N5bmNudGAgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjg2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6MTYuODQ4MDE1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUyODIxMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9zb2NrX3NldF9zeW5jbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTc5OD1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgwNS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODA2OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE4Mjk9c3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4NzMtXFx0LyogU2luZ2xlIHN5biByZXRyeSAqL1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4NzQ6XFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgMSk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTg3NS1cXHRpZiAocmV0KSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RjcC5oPTY1Mj12b2lkIHRjcF9zb2NrX3NldF9xdWlja2FjayhzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xcbmluY2x1ZGUvbGludXgvdGNwLmg6NjUzOmludCB0Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCk7XFxuaW5jbHVkZS9saW51eC90Y3AuaC02NTQtaW50IHRjcF9zb2NrX3NldF91c2VyX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM3MDk9RVhQT1JUX1NZTUJPTCh0Y3Bfc29ja19zZXRfcXVpY2thY2spO1xcbm5ldC9pcHY0L3RjcC5jLTM3MTAtXFxubmV0L2lwdjQvdGNwLmM6MzcxMTppbnQgdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxubmV0L2lwdjQvdGNwLmMtMzcxMi17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zNzE4LX1cXG5uZXQvaXB2NC90Y3AuYzozNzE5OkVYUE9SVF9TWU1CT0wodGNwX3NvY2tfc2V0X3N5bmNudCk7XFxubmV0L2lwdjQvdGNwLmMtMzcyMC1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM4Mzc9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM5MTctXFx0Y2FzZSBUQ1BfU1lOQ05UOlxcbm5ldC9pcHY0L3RjcC5jOjM5MTg6XFx0XFx0cmV0dXJuIHRjcF9zb2NrX3NldF9zeW5jbnQoc2ssIHZhbCk7XFxubmV0L2lwdjQvdGNwLmMtMzkxOS1cXHRjYXNlIFRDUF9VU0VSX1RJTUVPVVQ6XFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYz0yNDM9c3RhdGljIGludCB0Y3Bfd3JpdGVfdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYy0yNTMtXFx0XFx0XFx0X19kc3RfbmVnYXRpdmVfYWR2aWNlKHNrKTtcXG5uZXQvaXB2NC90Y3BfdGltZXIuYzoyNTQ6XFx0XFx0LyogUGFpcmVkIHdpdGggV1JJVEVfT05DRSgpIGluIHRjcF9zb2NrX3NldF9zeW5jbnQoKSAqL1xcbm5ldC9pcHY0L3RjcF90aW1lci5jLTI1NS1cXHRcXHRyZXRyeV91bnRpbCA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcXG4tLVxcbm5ldC9pcHY0L3RjcF90aW1lci5jPTQ1OT1zdGF0aWMgdm9pZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDY3LVxcdC8qIEFkZCBvbmUgbW9yZSByZXRyeSBmb3IgZmFzdG9wZW4uXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDY4OlxcdCAqIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiB0Y3Bfc29ja19zZXRfc3luY250KClcXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00NjktXFx0ICovXFxuLS1cXG5uZXQvc3VucnBjL3hwcnRzb2NrLmM9MjI4MD1zdGF0aWMgdm9pZCB4c190Y3Bfc2V0X3NvY2tldF90aW1lb3V0cyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsXFxuLS1cXG5uZXQvc3VucnBjL3hwcnRzb2NrLmMtMjMxNi1cXHRpZiAodCBcXHUwMDNjPSBzeW5fcmV0cmllcylcXG5uZXQvc3VucnBjL3hwcnRzb2NrLmM6MjMxNzpcXHRcXHR0Y3Bfc29ja19zZXRfc3luY250KHNvY2stXFx1MDAzZXNrLCB0IC0gMSk7XFxubmV0L3N1bnJwYy94cHJ0c29jay5jLTIzMTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzoxOC43MDA4NDMwNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk2ODI3Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTlZNZSBUQ1AgU29ja2V0IE9wdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IE5WTWUgVENQIGhhbmRsZXMgc29ja2V0IG9wdGlvbnMuIFNwZWNpZmljYWxseSwgaXQncyBhYm91dCBzZXR0aW5nIHRoZSBzeW5jaHJvbml6YXRpb24gY291bnQuIEluc3RlYWQgb2YgZGlyZWN0bHkgY2FsbGluZyBgdGNwX3NvY2tfc2V0X3N5bmNudGAsIGl0J3Mgbm93IHVzaW5nIGBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnRgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBkb19zb2NrX3NldHNvY2tvcHRgLiBUaGF0J3MgYSBzaGlmdDsgSSdtIGN1cmlvdXMgd2h5LiBXaHkgdGhlIGluZGlyZWN0aW9uPyBTb21ldGhpbmcgbXVzdCBiZSBkaWZmZXJlbnQuIEFoLCBJIHNlZSwgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgYHNvY2tfc2V0c29ja29wdGAgaXMgdW5kZXJnb2luZyBzb21lIGtpbmQgb2YgY2hhbmdlIG9yIGlzIGJlaW5nIGRlcHJlY2F0ZWQgZW50aXJlbHkuIFJpZ2h0LCBtYWtlcyBzZW5zZS4gVG8gYmUgc3VyZSwgSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIHNlZSB3aGF0IHRoZSB1bmRlcmx5aW5nIGNoYW5nZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAwMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjMzOjIyLjA5NzY3NDA5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU4NzcwNDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3NvY2tfc2V0c29ja29wdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xNzc3PXN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc4MC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzgxOlxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzgyLVxcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTc4NT1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3ODYte1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3ODc6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc4OC1cXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTc5MT1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTIte1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3OTM6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzk0LVxcdFxcdFxcdFxcdCAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xNzk4PXN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODAxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4MDI6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgwMy1cXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xODA2PXN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA3LXtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODA4OlxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgwOS1cXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xODEyPXN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcylcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODEzLXtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODE0OlxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTUtXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTgxOD1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODIxLVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4MjI6XFx0XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyMy1cXHRcXHRcXHRcXHRcXHQgIElQVjZfVENMQVNTLCBLRVJORUxfU09DS1BUUihcXHUwMDI2dGNsYXNzKSxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MTY5OT1zdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MDItXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxNzAzOlxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MDQtXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3MDc9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzA4LXtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3MDk6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzEwLVxcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3MTM9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTcxNi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3MTc6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MTgtXFx0XFx0XFx0XFx0ICBTT19SRVVTRUFERFIsIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ2YWwpLFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzIyPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzI1LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTcyNjpcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MjctXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzMwPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MzQtXFx0aWYgKHRvcyBcXHUwMDNlIDApXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxNzM1OlxcdFxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTczNi1cXHRcXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3NDA9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTc0Ni1cXHRcXHRpZiAodGNsYXNzIFxcdTAwM2UgMClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3NDc6XFx0XFx0XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NDgtXFx0XFx0XFx0XFx0XFx0XFx0ICBTT0xfSVBWNiwgSVBWNl9UQ0xBU1MsXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MTg4OD1pbnQgc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wLFxcbmluY2x1ZGUvbmV0L3NvY2suaC0xODg5LVxcdFxcdCAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKTtcXG5pbmNsdWRlL25ldC9zb2NrLmg6MTg5MDppbnQgZG9fc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXFxuaW5jbHVkZS9uZXQvc29jay5oLTE4OTEtXFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKTtcXG4tLVxcbmlvX3VyaW5nL2NtZF9uZXQuYz01Mj1zdGF0aWMgaW5saW5lIGludCBpb191cmluZ19jbWRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxuaW9fdXJpbmcvY21kX25ldC5jLTY3LVxcbmlvX3VyaW5nL2NtZF9uZXQuYzo2ODpcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbF9zLFxcbmlvX3VyaW5nL2NtZF9uZXQuYy02OS1cXHRcXHRcXHRcXHQgIG9wdGxlbik7XFxuLS1cXG5uZXQvc29ja2V0LmM9MjMzMD1zdGF0aWMgYm9vbCBzb2NrX3VzZV9jdXN0b21fc29sX3NvY2tldChjb25zdCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3NvY2tldC5jLTIzMzQtXFxubmV0L3NvY2tldC5jOjIzMzU6aW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbm5ldC9zb2NrZXQuYy0yMzM2LVxcdFxcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9zb2NrZXQuYy0yMzczLX1cXG5uZXQvc29ja2V0LmM6MjM3NDpFWFBPUlRfU1lNQk9MKGRvX3NvY2tfc2V0c29ja29wdCk7XFxubmV0L3NvY2tldC5jLTIzNzUtXFxuLS1cXG5uZXQvc29ja2V0LmM9MjM3OT1pbnQgX19zeXNfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICp1c2VyX29wdHZhbCxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yMzkyLVxcbm5ldC9zb2NrZXQuYzoyMzkzOlxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9zb2NrZXQuYy0yMzk0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6MjMuOTU2NDUwNDc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4OTc5MjUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOVk1lIFRDUCBQYXRjaCBSZXZpZXcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN3aXRjaGluZyBOVk1lIFRDUCBvdmVyIHRvIHVzaW5nIGBkb19zb2NrX3NldHNvY2tvcHRgIGluc3RlYWQgb2YgdGhlIG1vcmUgZGlyZWN0IGhlbHBlciBgdGNwX3NvY2tfc2V0X3N5bmNudGAuIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IHRoaXMgY2hvaWNlLiBXaHkgdGhlIGNoYW5nZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgbWF5YmUgYHRjcF9zb2NrX3NldF9zeW5jbnRgIGRvZXNuJ3QgcHJvdmlkZSBzdWZmaWNpZW50IGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIGl0IGRvZXNuJ3QgcGVyZm9ybSB0aGUgc2FtZSBjaGVja3MgYXMgYGRvX3NvY2tfc2V0c29ja29wdGAuIEl0J3MgcG9zc2libGUgdGhlIGRpcmVjdCBoZWxwZXIgaXMgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBnbyBhbmQgc2VlIGhvdyBgdGNwX3NvY2tfc2V0X3N5bmNudGAgd29ya3MsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYG5ldC9pcHY0L3RjcC5jYCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgbGltaXRhdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6MjcuODQ2MjQ2NzQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDIxNDI3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHRjcF9zb2NrX3NldF9zeW5jbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC90Y3AuaD02NTI9dm9pZCB0Y3Bfc29ja19zZXRfcXVpY2thY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcXG5pbmNsdWRlL2xpbnV4L3RjcC5oOjY1MzppbnQgdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xcbmluY2x1ZGUvbGludXgvdGNwLmgtNjU0LWludCB0Y3Bfc29ja19zZXRfdXNlcl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0zNzA5PUVYUE9SVF9TWU1CT0wodGNwX3NvY2tfc2V0X3F1aWNrYWNrKTtcXG5uZXQvaXB2NC90Y3AuYy0zNzEwLVxcbm5ldC9pcHY0L3RjcC5jOjM3MTE6aW50IHRjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbm5ldC9pcHY0L3RjcC5jLTM3MTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzoyOS41ODgzOTU2OTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODIxNzM4NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgdGNwX3NvY2tfc2V0X3N5bmNudGAgaW4gYG5ldC9pcHY0L3RjcC5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgdGNwX3NvY2tfc2V0X3N5bmNudGAgaW4gdGhlIElQdjQgVENQIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3RhY2suIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIFNZTiBmbG9vZCBwcm90ZWN0aW9uIGFuZCBjb25uZWN0aW9uIHJhdGUgbGltaXRpbmcuIEnigJltIGJldHRpbmcgdGhpcyBkaXJlY3RseSBpbmZsdWVuY2VzIGhvdyBhZ2dyZXNzaXZlbHkgd2UgcmVzcG9uZCB0byBTWU4gcGFja2V0cy4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHdlJ3JlIHNldHRpbmcgb3IgY29uZmlndXJpbmcgYSBzeW5jaHJvbml6YXRpb24gY291bnQsIHdoaWNoIGxpa2VseSByZWxhdGVzIHRvIGhvdyBtYW55IG91dHN0YW5kaW5nIFNZTl9SRUNWIGNvbm5lY3Rpb25zIGFyZSBhbGxvd2VkIGJlZm9yZSB3ZSBzdGFydCBzaGVkZGluZyBpbmNvbWluZyBTWU5zLiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdmFyaWFibGVzIGludm9sdmVkLCBob3cgdGhlIGNvdW50IGlzIHVwZGF0ZWQgKGxpa2VseSBiYXNlZCBvbiBzb2NrZXQgc3RhdGUgYW5kIGV2ZW50cyksIGFuZCB3aGV0aGVyIGFueSBhZGFwdGl2ZSBtZWNoYW5pc21zIGFyZSBlbXBsb3llZC4gSSBleHBlY3QgdG8gc2VlIGNoZWNrcyBhZ2FpbnN0IGdsb2JhbCB0aHJlc2hvbGRzIG9yIHBlci1zb2NrZXQgc2V0dGluZ3MuIEtub3dpbmcgdGhpcyBnaXZlcyB0aGUgYWJpbGl0eSB0byBwcm9wZXJseSB0dW5lIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3MsIHBhcnRpY3VsYXJseSB1bmRlciBoZWF2eSBsb2FkIG9yIGluIHRoZSBwcmVzZW5jZSBvZiBtYWxpY2lvdXMgdHJhZmZpYy4gSSBhbSBsb29raW5nIGZvciB0aGUgY29uZGl0aW9uYWwgYnJhbmNoZXMsIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCAoaWYgYW55KSwgYW5kIGFueSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIGxpa2UgbWVtb3J5IG1hbmFnZW1lbnQgb3IgbmV0d29ya2luZyBkZXZpY2VzLiBMZXQncyBzZWUgaWYgdGhpcyByZXZlYWxzIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gUmlnaHQsIGxldCdzIHN0YXJ0IHJlYWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6MzUuNDEwMTM2NDI3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzExLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzExOlxcdGludCB0Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG4zNzEyOlxcdHtcXG4zNzEzOlxcdFxcdGlmICh2YWwgXFx1MDAzYyAxIHx8IHZhbCBcXHUwMDNlIE1BWF9UQ1BfU1lOQ05UKVxcbjM3MTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzcxNTpcXHRcXG4zNzE2OlxcdFxcdFdSSVRFX09OQ0UoaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX3N5bl9yZXRyaWVzLCB2YWwpO1xcbjM3MTc6XFx0XFx0cmV0dXJuIDA7XFxuMzcxODpcXHR9XFxuMzcxOTpcXHRFWFBPUlRfU1lNQk9MKHRjcF9zb2NrX3NldF9zeW5jbnQpO1xcbjM3MjA6XFx0XFxuMzcyMTpcXHRpbnQgdGNwX3NvY2tfc2V0X3VzZXJfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuMzcyMjpcXHR7XFxuMzcyMzpcXHRcXHQvKiBDYXAgdGhlIG1heCB0aW1lIGluIG1zIFRDUCB3aWxsIHJldHJ5IG9yIHByb2JlIHRoZSB3aW5kb3dcXG4zNzI0OlxcdFxcdCAqIGJlZm9yZSBnaXZpbmcgdXAgYW5kIGFib3J0aW5nIChFVElNRURPVVQpIGEgY29ubmVjdGlvbi5cXG4zNzI1OlxcdFxcdCAqL1xcbjM3MjY6XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuMzcyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNzI4OlxcdFxcbjM3Mjk6XFx0XFx0V1JJVEVfT05DRShpbmV0X2NzayhzayktXFx1MDAzZWljc2tfdXNlcl90aW1lb3V0LCB2YWwpO1xcbjM3MzA6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjMzOjM1LjQxMDM0NDE1N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQ4OTQ0MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgU29ja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCB0aGlzIE5WTWUgVENQIGNvZGUsIGFuZCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQgd2l0aCB0aGlzIHNvY2tldCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGVzZSB0d28gZnVuY3Rpb24gY2FsbHM6IGB0Y3Bfc29ja19zZXRfc3luY250YCBhbmQgYHRjcF9zb2NrX3NldF9ub2RlbGF5YC4gVGhlIGZpcnN0IG9uZSwgYHRjcF9zb2NrX3NldF9zeW5jbnRgLCByZXR1cm5zIGFuIGludGVnZXIsIHJpZ2h0PyBZZXQsIHRoaXMgY29kZSBpcyBqdXN0IGJsb3dpbmcgb2ZmIHRoZSByZXR1cm4gdmFsdWUuIElzIHRoYXQgaW50ZW50aW9uYWw/IEknZCBleHBlY3QgdG8gc2VlIHNvbWUga2luZCBvZiBlcnJvciBjaGVja2luZyBpZiBpdCdzIHJldHVybmluZyBhIHZhbHVlLiBJdCdzIHNldHRpbmcgdGhlIFNZTiByZXRyeSBjb3VudCB0byAxLCB3aGljaCBtaWdodCBiZSBmaW5lLCBidXQgaWdub3JpbmcgYSBwb3RlbnRpYWwgZmFpbHVyZSBzZWVtcyByaXNreS5cblxuVGhlbiB0aGVyZSdzIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAuIFJpZ2h0LCB0aGF0J3MgYSB2b2lkIGZ1bmN0aW9uLCBzbyB0aGVyZSdzIG5vIHJldHVybiB2YWx1ZSB0byBjaGVjay4gQXQgbGVhc3QsIHRoYXQncyBhcyBJIHJlY2FsbC4gSXQncyBhbHdheXMgcG9zc2libGUgSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBzbyBJIG5lZWQgdG8gZ28gbG9vayBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGNwX3NvY2tfc2V0X25vZGVsYXlgIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGEgcG90ZW50aWFsIGlzc3VlIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyBhbmQgd2hhdCBzaWRlIGVmZmVjdHMgaXQgbWlnaHQgaGF2ZSwgb3Igd2hhdCBpdCBjYW4gcmV0dXJuIGluIHRlcm1zIG9mIGludGVybmFsIHNpZ25hbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzo0Mi4zNTkyOTEzNDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjU0ODg2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB0Y3Bfc29ja19zZXRfbm9kZWxheVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3RjcC5oPTY1MD12b2lkIF9fdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrLCBib29sIG9uKTtcXG5pbmNsdWRlL2xpbnV4L3RjcC5oOjY1MTp2b2lkIHRjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9saW51eC90Y3AuaC02NTItdm9pZCB0Y3Bfc29ja19zZXRfcXVpY2thY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM2Njg9dm9pZCBfX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaywgYm9vbCBvbilcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM2NzctXFxubmV0L2lwdjQvdGNwLmM6MzY3ODp2b2lkIHRjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3AuYy0zNjc5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6NDQuMjg0Nzg2NDMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjAwMzU1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrZXQgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgb3V0IGB0Y3Bfc29ja19zZXRfbm9kZWxheShzaylgIGZvciBgZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLCBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSlgLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzICp3aHkqPyBXaGF0J3MgdGhlIGRyaXZpbmcgZm9yY2UgYmVoaW5kIHRoaXMgY2hhbmdlPyBJcyBpdCBzaW1wbHkgYSBtYXR0ZXIgb2YgZW5zdXJpbmcgdGhlIHNvY2tldCBvcHRpb24gaXMgc2V0IHdpdGggYWJzb2x1dGUgY2VydGFpbnR5LCBvciBpcyB0aGVyZSBzb21ldGhpbmcgbW9yZSBzdWJ0bGUgYXQgcGxheSBoZXJlP1xuXG5SaWdodCwgSSdtIGxlYW5pbmcgdG93YXJkIHRoZSBsYXR0ZXIuIGBkb19zb2NrX3NldHNvY2tvcHRgIHByb2JhYmx5IGhhbmRsZXMgbW9yZSB0aGFuIGp1c3QgdGhlIGRpcmVjdCBzZXR0aW5nIG9mIHRoZSBvcHRpb24uIEl0IGxpa2VseSBpbmNvcnBvcmF0ZXMgc29tZSB2aXRhbCBsb2NraW5nIG1lY2hhbmlzbXMgb3IgcGVyaGFwcyBjYWxscyBpbnRvIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgaG9va3MuIFRoYXQncyB0aGUgcmVhbCBwb3RlbnRpYWwgdmFsdWUtYWRkIGhlcmUg4oCTIGludm9raW5nIEJQRiBob29rcyBpcyBhIGRlZmluaXRlIHBvc3NpYmlsaXR5ISBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGh1bmNoLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIGBuZXQvc29ja2V0LmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbCBhbmQgc2VlIHdoYXQgaXMgYWN0dWFsbHkgZXhlY3V0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzM0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjMzOjQ5LjEwNDgyNzMyMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMzU6XFx0aW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbjIzMzY6XFx0XFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbjIzMzc6XFx0e1xcbjIzMzg6XFx0XFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzO1xcbjIzMzk6XFx0XFx0Y2hhciAqa2VybmVsX29wdHZhbCA9IE5VTEw7XFxuMjM0MDpcXHRcXHRpbnQgZXJyO1xcbjIzNDE6XFx0XFxuMjM0MjpcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2MgMClcXG4yMzQzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIzNDQ6XFx0XFxuMjM0NTpcXHRcXHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7XFxuMjM0NjpcXHRcXHRpZiAoZXJyKVxcbjIzNDc6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbjIzNDg6XFx0XFxuMjM0OTpcXHRcXHRpZiAoIWNvbXBhdClcXG4yMzUwOlxcdFxcdFxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLVxcdTAwM2VzaywgXFx1MDAyNmxldmVsLCBcXHUwMDI2b3B0bmFtZSxcXG4yMzUxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLFxcbjIzNTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a2VybmVsX29wdHZhbCk7XFxuMjM1MzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4yMzU0OlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4yMzU1OlxcdFxcdGlmIChlcnIgXFx1MDAzZSAwKSB7XFxuMjM1NjpcXHRcXHRcXHRlcnIgPSAwO1xcbjIzNTc6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbjIzNTg6XFx0XFx0fVxcbjIzNTk6XFx0XFxuMjM2MDpcXHRcXHRpZiAoa2VybmVsX29wdHZhbClcXG4yMzYxOlxcdFxcdFxcdG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGtlcm5lbF9vcHR2YWwpO1xcbjIzNjI6XFx0XFx0b3BzID0gUkVBRF9PTkNFKHNvY2stXFx1MDAzZW9wcyk7XFxuMjM2MzpcXHRcXHRpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCBcXHUwMDI2XFx1MDAyNiAhc29ja191c2VfY3VzdG9tX3NvbF9zb2NrZXQoc29jaykpXFxuMjM2NDpcXHRcXHRcXHRlcnIgPSBzb2NrX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4yMzY1OlxcdFxcdGVsc2UgaWYgKHVubGlrZWx5KCFvcHMtXFx1MDAzZXNldHNvY2tvcHQpKVxcbjIzNjY6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuMjM2NzpcXHRcXHRlbHNlXFxuMjM2ODpcXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZXNldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCxcXG4yMzY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBvcHRsZW4pO1xcbjIzNzA6XFx0XFx0a2ZyZWUoa2VybmVsX29wdHZhbCk7XFxuMjM3MTpcXHRvdXRfcHV0OlxcbjIzNzI6XFx0XFx0cmV0dXJuIGVycjtcXG4yMzczOlxcdH1cXG4yMzc0OlxcdEVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6NDkuMTA1MDc2NDIxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzE2NzYzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTWUgVENQIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIGBkb19zb2NrX3NldHNvY2tvcHRgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgaGVyZS4gSXQncyBjYWxsaW5nIGBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdGAgYW5kLCBpbXBvcnRhbnRseSwgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0LiBOb3csIHRoZSBOVk1lIFRDUCBkcml2ZXIgcmVzcGVjdHMgTFNNcyBhbmQgQlBGIGNncm91cCBob29rcyBmb3Igc29ja2V0IG9wdGlvbnMsIG1lYW5pbmcgQlBGIHByb2dyYW1zIGNhbiBub3cgaW50ZXJjZXB0IGFuZCAqbW9kaWZ5KiB0aG9zZSBvcHRpb25zLCBvciBMU01zIGNhbiBmbGF0LW91dCBkZW55IHRoZW0uIFRoYXTigJlzIGEgZ2FtZSBjaGFuZ2VyIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSFcblxuQW5kIGhlcmXigJlzIGFub3RoZXIgaW50ZXJlc3Rpbmcgd3JpbmtsZTogdGhpcyBwYXRjaCBpbmNsdWRlcyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIElmIGBkb19zb2NrX3NldHNvY2tvcHRgIGZhaWxzLCBpdCBub3cgZXJyb3JzIG91dCBhbmQgdGhlIHF1ZXVlIGFsbG9jYXRpb24gZmFpbHMuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgSSBhYnNvbHV0ZWx5IG5lZWQgdG8gZnV6eiwgZ2l2ZW4gaXRzIGludGVyYWN0aW9uIHdpdGggQlBGIGFuZCBMU01zIOKAkyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgcmlnaHQgdGhlcmUuXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gWWVzLCBOVk1lIFRDUCBpcyBhIHJlYWwgdGhpbmcsIHNvIGl0ICppcyogcmVhY2hhYmxlLiBUaW1lIHRvIGlkZW50aWZ5IHRoZSBtYWluIGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIExvb2tzIGxpa2UgYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCwgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AsIGFuZCBgbnZtZXRfdGNwX2FkZF9wb3J0YCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGV4YW1pbmUuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB3aGVyZSB0aGUgc29ja2V0IG9wdGlvbiBzZXR0aW5nIG9jY3Vycy5cblxuQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgTlZNZSBUQ1Atc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yLiBJIGRvbid0IHdhbnQgdG8gbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzo1NC41NzY3NTU0NzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTkyNzkzMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5WTUVfVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9Njc9Y29uZmlnIE5WTUVfRkNcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctODItXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo4Mzpjb25maWcgTlZNRV9UQ1BcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTg0LVxcdHRyaXN0YXRlIFxcXCJOVk0gRXhwcmVzcyBvdmVyIEZhYnJpY3MgVENQIGhvc3QgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy05OS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjEwMDpjb25maWcgTlZNRV9UQ1BfVExTXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgVENQIFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjMzOjU2LjE5NjA0MjE4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk3Mzk0MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIGRvIHRoaXMuIEknbGwgZGlzdGlsbCB0aG9zZSB0aG91Z2h0cyBhbmQgcHJlc2VudCB0aGVtIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIGdlYXJlZCB0b3dhcmRzIHNvbWVvbmUgd2hvICpnZXRzKiBpdC4gSGVyZSB3ZSBnbzpcblxuKipBbmFseXppbmcgdGhlIE9iamVjdGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb3JlIGZ1bmN0aW9uIG9yIHRoZSBtYWluIG9iamVjdCBvZiB0aGUgdGFzayB0byBiZSBkZWZpbmVkLiBGcm9tIHRoZSBpbml0aWFsIHByb21wdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgdXNlciBpcyB0cnlpbmcgdG8gZ2V0IG91dCBvZiB0aGlzIGFuZCB3aGF0IGlzIHRoZSBnb2FsLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBhIHNwZWNpZmljIGFyZWEsIGFuZCBmb2N1cyBvbiB0aGUgcGFyYW1ldGVycyBvZiB0aGF0IGFyZWEsIHRvIGZpbmQgYSBuaWNoZSBmb3IgdGhlIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHR5cGUgb2YgcmVzcG9uc2UgaXMgbmVlZGVkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBmYWN0dWFsIHN1bW1hcnksIGEgbnVhbmNlZCBpbnRlcnByZXRhdGlvbiwgb3IgYSBjb21wbGV4IHN5bnRoZXNpcz8gVGhlIHRvbmUgYW5kIHN0eWxlIG9mIHRoZSByZXNwb25zZSBhcmUganVzdCBhcyBjcnVjaWFsLiBJcyB0aGlzIGFuIGluZm9ybWFsIGNoYXQsIGEgZm9ybWFsIHJlcG9ydCwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEknbGwgcHJvYmFibHkgbmVlZCB0byB0YWlsb3IgZXZlcnl0aGluZyB0byBtYXRjaCB0aGF0LiBBZnRlciBhbGwsIHRoZSBjb250ZXh0IHByb3ZpZGVkIGlzLCB3ZWxsLCBpdCBuZWVkcyBmdXJ0aGVyIGNvbnRleHQgZnJvbSB0aGUgdXNlciwgYnV0IHRoZSBnb2FsIHdpbGwgYmUgY2xlYXIuIEkgY2FuIHdvcmsgd2l0aCB0aGF0LCBob3dldmVyLCBhbmQgZXh0cmFwb2xhdGUsIGZvciBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTEzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzo1OS41OTM0MzkzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3Mzg5MTM3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5WTUVUX1RDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzQ6MDEuMjY3MzQ1MDQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTI4MzM2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhIExpbnV4IGtlcm5lbCBleHBlcnQ6XG5cbioqS2NvbmZpZyBDaGVja3BvaW50OiBOVk1lIFRhcmdldCoqXG5cbk9rYXksIGJlZm9yZSBkaXZpbmcgYW55IGRlZXBlciBpbnRvIHRoZSBjb2RlLCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcgb2J2aW91cyBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhlIE5WTWUgdGFyZ2V0IGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AgZmlsZSwgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNoZWNrIGlmIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0J3MgZWFzeSB0byBvdmVybG9vayBhIGNydWNpYWwgZGVwZW5kZW5jeSBvciBhbiBvdmVybG9va2VkIGZsYWcuIFBlcmhhcHMgYSBzcGVjaWZpYyBmZWF0dXJlIHJlbGF0ZWQgdG8gd2hhdCBJJ20gbG9va2luZyBpbnRvIGlzIGdhdGVkIGJlaGluZCBhIEtjb25maWcgb3B0aW9uIHRoYXQgaXNuJ3Qgc2V0IHRoZSB3YXkgSSBleHBlY3QuIE9yIG1heWJlIHRoZXJlJ3MgYSBzZXR0aW5nIHRoYXQgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnN5c3RlbSBJJ20gaW50ZXJlc3RlZCBpbiBhbmQgSSBmb3Jnb3QgdG8gYWNjb3VudCBmb3IgaXQuIFRpbWUgZm9yIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJJ20gbm90IGNoYXNpbmcgYSBnaG9zdC4gSSdsbCByZXZpZXcgaXQgYW5kIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGUgS2NvbmZpZyBvcHRpb25zLiBJIGRvIG5vdCB3YW50IHRvIHdhc3RlIG15IHRpbWUuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGJhc2ljIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjA2LjEyMDE4MTk0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNzM3MzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9UQVJHRVRfVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZz03ND1jb25maWcgTlZNRV9UQVJHRVRfRkNMT09QXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjg3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6OTc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUF9UTFNcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTgtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBUTFMgZW5jcnlwdGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDowNy43NTc1NjAzMDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5NTU4MDQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHdyaXR0ZW4gYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTlZNZSBvdmVyIFRDUCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGNvbmZpZ3VyaW5nIE5WTWUgb3ZlciBUQ1AuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBOVk1FX1RDUGAgYW5kIGBOVk1FX1RBUkdFVF9UQ1BgLiBUaG9zZSBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSdtIHdvcmtpbmcgd2l0aC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFdoYXQgYXJlIHRoZSBwcmVyZXF1aXNpdGVzPyBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG11c3QgYmUgaW4gcGxhY2Ugb3IgZW5hYmxlZCBmb3IgdGhlc2UgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBBcmUgdGhlcmUgc3BlY2lmaWMga2VybmVsIG1vZHVsZXMgcmVxdWlyZWQ/IERvIHRoZXkgcmVseSBvbiBjZXJ0YWluIG5ldHdvcmtpbmcgcGFyYW1ldGVycyBiZWluZyBzZXQ/IFdoYXQgYWJvdXQgc2VjdXJpdHkgcHJvdG9jb2xzIGFuZCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIC0gaG93IGRvIHRoZXkgdGllIGluPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZWlyIGludGVyZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSBhIHN0YWJsZSBhbmQgcGVyZm9ybWFudCBOVk1lLW9GIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgyMCwiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjEzLjI1MzE0NDMwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgzOlxcdGNvbmZpZyBOVk1FX1RDUFxcbiAgODQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIG92ZXIgRmFicmljcyBUQ1AgaG9zdCBkcml2ZXJcXFwiXFxuICA4NTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDg2OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gIDg3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgODg6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDg5OlxcdFxcdHNlbGVjdCBOVk1FX0ZBQlJJQ1NcXG4gIDkwOlxcdFxcdGhlbHBcXG4gIDkxOlxcdFxcdCAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTlZNZSBvdmVyIEZhYnJpY3MgcHJvdG9jb2wgdXNpbmdcXG4gIDkyOlxcdFxcdCAgdGhlIFRDUCB0cmFuc3BvcnQuICBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIHJlbW90ZSBibG9jayBkZXZpY2VzXFxuICA5MzpcXHRcXHQgIGV4cG9ydGVkIHVzaW5nIHRoZSBOVk1lIHByb3RvY29sIHNldC5cXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0ICBUbyBjb25maWd1cmUgYSBOVk1lIG92ZXIgRmFicmljcyBjb250cm9sbGVyIHVzZSB0aGUgbnZtZS1jbGkgdG9vbFxcbiAgOTY6XFx0XFx0ICBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC1udm1lL252bWUtY2xpLlxcbiAgOTc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjEzLjI1MzIxMjIwNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODcsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODc6XFx0Y29uZmlnIE5WTUVfVEFSR0VUX1RDUFxcbiAgODg6XFx0XFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgc3VwcG9ydFxcXCJcXG4gIDg5OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgOTA6XFx0XFx0ZGVwZW5kcyBvbiBOVk1FX1RBUkdFVFxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBUaGlzIGVuYWJsZXMgdGhlIE5WTWUgVENQIHRhcmdldCBzdXBwb3J0LCB3aGljaCBhbGxvd3MgZXhwb3J0aW5nIE5WTWVcXG4gIDkzOlxcdFxcdCAgZGV2aWNlcyBvdmVyIFRDUC5cXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgOTY6XFx0XFxuICA5NzpcXHRjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xcbiAgOTg6XFx0XFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBUTFMgZW5jcnlwdGlvbiBzdXBwb3J0XFxcIlxcbiAgOTk6XFx0XFx0ZGVwZW5kcyBvbiBOVk1FX1RBUkdFVF9UQ1BcXG4gMTAwOlxcdFxcdHNlbGVjdCBORVRfSEFORFNIQUtFXFxuIDEwMTpcXHRcXHRzZWxlY3QgVExTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjEzLjI1MzI0NDMwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTkyMDI1OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYE5WTUVfVENQYCBoYXMgYSBiaXQgb2YgYSBjaGFpbiBnb2luZyBvbi4gSXQncyBidWlsdCBvbiB0b3Agb2YgYm90aCBgSU5FVGAgYW5kIGBCTE9DS2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHlvdSBuZWVkIHRoZSBuZXR3b3JrIGZvciBUQ1AgYW5kIHRoZSBibG9jayBkZXZpY2UgbGF5ZXIgZm9yIHRoZSBOVk1lIGRhdGEuIE5vdywgYE5WTUVfVEFSR0VUX1RDUGAgbWlycm9ycyB0aGF0LCByZWx5aW5nIG9uIGBJTkVUYCBhZ2FpbiAoZm9yIHRoZSBUQ1AgcGFydCkgYW5kIGBOVk1FX1RBUkdFVGAgZm9yIHRoZSBOVk1lIHRhcmdldCBmdW5jdGlvbmFsaXR5LiBTaW5jZSBgTlZNRV9UQVJHRVRfVENQYCBkaXJlY3RseSBkZXBlbmRzIG9uIGBOVk1FX1RBUkdFVGAsIHdoaWNoIGlzIGFsc28gYSBkZXBlbmRlbmN5IG9mIGBOVk1FX1RDUGAsIGxldCdzIGp1c3QgbWFrZSBzdXJlIGBOVk1FX1RBUkdFVGAgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUwMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzQ6MTguNDQ1MjcyODA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM2NDc4NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVCRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTItXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjM6Y29uZmlnIE5WTUVfVEFSR0VUXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIk5WTWUgVGFyZ2V0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjIwLjc4MTc1NzMzMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjUwMzMwNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgTlZNZSBUYXJnZXQgRHJpdmVycyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGFyb3VuZCBsaW5lIDMsIHNpbmNlIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlY2xhcmVkLCBvciBhdCBsZWFzdCB3aGVyZSB0aGUgaW5pdGlhbCBvdmVydmlldyBvZiB0aGUgbW9kdWxlIGlzIHByZXNlbnRlZC4gSSB3YW50IHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGVzc2VudGlhbCBidWlsZGluZyBibG9ja3MgZm9yIE5WTWUgdGFyZ2V0IGRyaXZlciBjb25maWd1cmF0aW9ucy4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBlbmFibGVkLCBhbnkgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZSwgYW5kIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24ga25vYnMgYXZhaWxhYmxlIHRvIHRhaWxvciB0aGlzIGNvZGUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDoyNy4wMzIwOTA3NDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBOVk1FX1RBUkdFVFxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5WTWUgVGFyZ2V0IHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuICAgNjpcXHRcXHRzZWxlY3QgQ09ORklHRlNfRlNcXG4gICA3OlxcdFxcdHNlbGVjdCBOVk1FX0tFWVJJTkcgaWYgTlZNRV9UQVJHRVRfVENQX1RMU1xcbiAgIDg6XFx0XFx0c2VsZWN0IEtFWVMgaWYgTlZNRV9UQVJHRVRfVENQX1RMU1xcbiAgIDk6XFx0XFx0c2VsZWN0IFNHTF9BTExPQ1xcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBUaGlzIGVuYWJsZWQgdGFyZ2V0IHNpZGUgc3VwcG9ydCBmb3IgdGhlIE5WTWUgcHJvdG9jb2wsIHRoYXQgaXNcXG4gIDEyOlxcdFxcdCAgaXQgYWxsb3dzIHRoZSBMaW51eCBrZXJuZWwgdG8gaW1wbGVtZW50IE5WTWUgc3Vic3lzdGVtcyBhbmRcXG4gIDEzOlxcdFxcdCAgY29udHJvbGxlcnMgYW5kIGV4cG9ydCBMaW51eCBibG9jayBkZXZpY2VzIGFzIE5WTWUgbmFtZXNwYWNlcy5cXG4gIDE0OlxcdFxcdCAgWW91IG5lZWQgdG8gc2VsZWN0IGF0IGxlYXN0IG9uZSBvZiB0aGUgdHJhbnNwb3J0cyBiZWxvdyB0byBtYWtlIHRoaXNcXG4gIDE1OlxcdFxcdCAgZnVuY3Rpb25hbGl0eSB1c2VmdWwuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjI3LjAzMjE2MTcyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDIxNzc2NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBOVk1lIG92ZXIgVENQKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgKmZ1bmRhbWVudGFsKiBjb25maWd1cmF0aW9ucyBhcmUgY2xlYXJseSBjZW50ZXJlZCBhcm91bmQgTlZNZSBvdmVyIFRDUC4gU28sIEkgc2VlIGBOVk1FX1RDUGAsIGBOVk1FX1RBUkdFVGAsIGFuZCBgTlZNRV9UQVJHRVRfVENQYCBhcyBiZWluZyB0aGUgY29yZS4gVGhhdCdzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBkZWZpbmluZyB0aGUgVENQLXNwZWNpZmljIE5WTWUgZW52aXJvbm1lbnQuIEhvd2V2ZXIuLi4gaGFuZyBvbiBhIHNlY29uZC4gSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBhcmVuJ3QgST8gRm9yIGEgaG9zdCBtYWNoaW5lIHRvIGFjdHVhbGx5ICp1dGlsaXplKiB0aGlzIE5WTWUgb3ZlciBUQ1Agc2V0dXAsIGFuZCB0byBlbnN1cmUgdGhhdCB0aGUgY29yZSBOVk1lIGZyYW1ld29yayBpcyBwcm9wZXJseSBpbnN0YW50aWF0ZWQsIEknbSBhbG1vc3QgY2VydGFpbiB0aGF0IGBOVk1FX0NPUkVgIGlzIGdvaW5nIHRvIGJlIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBob3N0IHNpZGUgYXMgd2VsbC4gSXQncyB0b28gZnVuZGFtZW50YWwgdG8gbWlzcy4gSSBuZWVkIHRoYXQgYmFzZSBsYXllciB1cCBhbmQgcnVubmluZy4gR29vZCB0byBjYXRjaCB0aGF0ISBJIHdpbGwgYWxzbyBlbnN1cmUgdGhpcyB3aWxsIG5vdCBjb25mbGljdCB3aXRoIHRoZSBleGlzdGluZyBzZXR1cCwgYW5kIHRoYXQgSSBkaWQgbm90IG5lZWQgdG8gYWRkIGFkZGl0aW9uYWwgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjI4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDozMS4wNTM5NDEzOTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDU3NjQ3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5WTUVfQ09SRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoyOmNvbmZpZyBOVk1FX0NPUkVcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzQ6MzIuNjk5NzEyMjk0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzE3MTU5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKk5WTWUgVENQIGFuZCBDb3JlIE1vZHVsZSBEZXBlbmRlbmN5IENoZWNrKipcblxuT2theSwgc28gYE5WTUVfVENQYCBoYXMgYmVlbiBjaG9zZW4uIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCBpbXBsaWVzIHRoZSBzZWxlY3Rpb24gb2YgYE5WTUVfQ09SRWAgYXMgd2VsbC4gVGhhdCdzIGEgY3JpdGljYWwgZGVwZW5kZW5jeTsgaWYgVENQIGlzIGFjdGl2ZSwgd2UgYWJzb2x1dGVseSBuZWVkIHRoZSBjb3JlIE5WTWUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCdzIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCBtYWtlIHN1cmUgdGhhdCByZWxhdGlvbnNoaXAgaXMgYmVpbmcgcHJvcGVybHkgZW5mb3JjZWQsIGFuZCBpZiBub3QsIHdoeSBub3QuIFRoZXJlIG1heSBiZSBjb25maWd1cmF0aW9uIGZsYWdzIHRvIHJldmlldy4gSWYgdGhlcmUncyBhbiBpc3N1ZSBoZXJlLCBpdCB3aWxsIGJlIGEgbWFqb3IgYmxvY2tlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1ODgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDozNi4xMzE0MzEwMThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODUzNDg0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5WTUVfQ09SRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gUENJIFxcdTAwMjZcXHUwMDI2IEJMT0NLXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo4OlxcdHNlbGVjdCBOVk1FX0NPUkVcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz00Nz1jb25maWcgTlZNRV9GQUJSSUNTXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo0ODpcXHRzZWxlY3QgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00OS1cXHRzZWxlY3QgTlZNRV9LRVlSSU5HIGlmIE5WTUVfVENQX1RMU1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0xMjU9Y29uZmlnIE5WTUVfQVBQTEVcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTI5LVxcdGRlcGVuZHMgb24gQVJDSF9BUFBMRSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjEzMDpcXHRzZWxlY3QgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xMzEtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDozNy44MTY3ODU0NDJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMxMDY3NjQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOVk1lL1RDUCBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSd2ZSBnb3QgaXQuIGBOVk1FX1RDUGAgKmRlZmluaXRlbHkqIHB1bGxzIGluIGBOVk1FX0ZBQlJJQ1NgLCB3aGljaCB0aGVuIGJyaW5ncyBpbiBgTlZNRV9DT1JFYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblJpZ2h0LCBzbyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgSSdtIGRlYWxpbmcgd2l0aCBgTlZNRV9UQ1BgLCBgTlZNRV9UQVJHRVRgLCBhbmQgYE5WTUVfVEFSR0VUX1RDUGAuIEdvdCBpdC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uLiBJJ20gdGhpbmtpbmc6IGBudm1lX3RjcF9hbGxvY19xdWV1ZWAsIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIHRoaXMgVENQIGltcGxlbWVudGF0aW9uLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGFyZSB0aG9zZSBmdW5jdGlvbnMgc3RhdGljPyBJJ3ZlIGdvdCB0byBkb3VibGUtY2hlY2sgdGhhdC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIgb24gdGhpczogdGhleSdyZSBwdXNoaW5nIG1lIHRvd2FyZHMgKm5vbi1zdGF0aWMqLCAqbm9uLWlubGluZWQqIGZ1bmN0aW9ucyBhcyBwcmVmZXJyZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCBnaXZlcyB0aGVtIGRpc3RpbmN0IHN5bWJvbHMsIHdoaWNoIGlzIG11Y2ggYmV0dGVyLiBPa2F5LCBzbyBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGlzICpzdGF0aWMqLiBIbW0uIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxlcnMgdG8gZGV0ZXJtaW5lIGl0IGlzIHRoZSBwcmVmZXJyZWQgY2hvaWNlLCBwZXIgdGhlIGRvY3VtZW50YXRpb24uIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGl0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDE1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjQ2LjEyNzQ2NDI0NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjY1OTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3RjcF9hbGxvY19xdWV1ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xODE4PXN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MjgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgyOTpzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MzAtXFx0XFx0XFx0XFx0a2V5X3NlcmlhbF90IHBza2lkKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjE3OT1zdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTk3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxOTg6XFx0cmV0ID0gbnZtZV90Y3BfYWxsb2NfcXVldWUoY3RybCwgMCwgcHNraWQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxOTktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTIyMTM9c3RhdGljIGludCBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjIzOC1cXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgY3RybC1cXHUwMDNlcXVldWVfY291bnQ7IGkrKykge1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIyMzk6XFx0XFx0cmV0ID0gbnZtZV90Y3BfYWxsb2NfcXVldWUoY3RybCwgaSxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjQwLVxcdFxcdFxcdFxcdGN0cmwtXFx1MDAzZXRsc19wc2tpZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjQ3Ljk5MDEzMTgzMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQ4MTA5ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipGaW5kaW5nIE5WTWUtb0YgUXVldWUgQWxsb2NhdGlvbiBDYWxsZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgYF9fbnZtZV90Y3BfYWxsb2NfaW9fcXVldWVzYCBhcmUgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgTlZNZS1vRiBzdGFjay4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgcXVldWUgc2V0dXAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQuIEkgc3VzcGVjdCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgaW4gdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgcG90ZW50aWFsbHkgd2l0aGluIGNvbm5lY3Rpb24gb3IgdHJhbnNwb3J0IGxheWVyIHNldHVwIGZ1bmN0aW9ucy4gVGhlIHVuZGVyc2NvcmUgcHJlZml4IG9uIGBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2Agc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgcHJvYmFibHkgY2FsbGVkIGJ5IHNvbWV0aGluZyBoaWdoZXIgdXAuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHRvIGlkZW50aWZ5ICphbGwqIGNhbGwgc2l0ZXMsIGFzIHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIHBhdGhzIGRlcGVuZGluZyBvbiBob3cgdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIG9yIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQuIEknbGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xjaGFpbiwgbGlrZWx5IGdyZXAgb3IgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgY29kZSBicm93c2VyLCB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZW4gY2FyZWZ1bGx5IGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcmF0aW9uYWxlIGJlaGluZCBlYWNoIGNhbGwuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgaW4/IFdoYXQgYXJlIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocz8gV2hhdCBhcmUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQ/IFRoZXNlIGFyZSBhbGwgaW1wb3J0YW50IGRldGFpbHMgZm9yIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4OTgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDo1NS4zMzgyNDQ3MzVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjc1MDg1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjE2MD1zdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE3OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTc5OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTgwLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTIzNDg9c3RhdGljIGludCBudm1lX3RjcF9jb25maWd1cmVfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBuZXcpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzUxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIzNTI6XFx0ZXJyb3IgPSBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZShjdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzUzLVxcdGlmIChlcnJvcilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTI0MzM9c3RhdGljIHZvaWQgbnZtZV90Y3BfcmVjb25uZWN0X29yX3JlbW92ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ2Ni0gKlxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0Njc6ICogV2UgY2Fubm90IGFsd2F5cyByZXZva2UgdGhlIGtleSBhcyBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZSgpIGlzIGNhbGxlZFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0NjgtICogdHdpY2UgZHVyaW5nIHNlY3VyZSBjb25jYXRlbmF0aW9uLCBvbmNlIG9uIGEgJ25vcm1hbCcgY29ubmVjdGlvbiB0byBydW4gdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjU2Ljk2NTc2MzgwNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDI0NTI4MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIG52bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBudm1lX3RjcF9jb25maWd1cmVfYWRtaW5fcXVldWVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIGN1cmlvdXMuIFN0YXRpYyBmdW5jdGlvbnMsIGJ5IGRlZmluaXRpb24sIGhhdmUgbGltaXRlZCBzY29wZSwgd2hpY2ggdXN1YWxseSBoaW50cyBhdCB0aGVpciBiZWluZyBjcml0aWNhbCBmb3IgYSBzcGVjaWZpYywgZm9jdXNlZCBwYXJ0IG9mIHRoZSBkcml2ZXIuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB1bmRlcnN0YW5kaW5nIGl0cyBjYWxsIGNoYWluIHdpbGwgaWxsdW1pbmF0ZSBpdHMgcm9sZSB3aXRoaW4gdGhlIE5WTWUtb0YgVENQIGRyaXZlci4gS25vd2luZyBpdHMgY2FsbGVyIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSB1c2luZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1OTksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNTowMy45OTAyOTQ5NzRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjgxMzUzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV90Y3BfY29uZmlndXJlX2FkbWluX3F1ZXVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTIyNzk9c3RhdGljIGludCBudm1lX3RjcF9jb25maWd1cmVfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjM0Ny1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMzQ4OnN0YXRpYyBpbnQgbnZtZV90Y3BfY29uZmlndXJlX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzNDkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjQ3Nz1zdGF0aWMgaW50IG52bWVfdGNwX3NldHVwX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBuZXcpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDgxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0ODI6XFx0cmV0ID0gbnZtZV90Y3BfY29uZmlndXJlX2FkbWluX3F1ZXVlKGN0cmwsIG5ldyk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ4My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ5MC1cXHRcXHRudm1lX3RjcF90ZWFyZG93bl9hZG1pbl9xdWV1ZShjdHJsLCBmYWxzZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjQ5MTpcXHRcXHRyZXQgPSBudm1lX3RjcF9jb25maWd1cmVfYWRtaW5fcXVldWUoY3RybCwgZmFsc2UpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0OTItXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzU6MDUuNjU4NDM3MjRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExMjI4NjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBOVk1lLW9GIENvbnRyb2wgUGF0aCBTZXR1cCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBudm1lX3RjcF9zZXR1cF9jdHJsYCBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgTlZNZSBvdmVyIFRDUCBzdGFjay4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGBudm1lX3RjcF9zZXR1cF9jdHJsYCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHBlcmZvcm1pbmcgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE5WTWUgY29udHJvbGxlciwgb3IgXCJjdHJsXCIgYXMgaXQncyByZWZlcnJlZCB0byBoZXJlLCB3aXRoaW4gdGhlIFRDUCB0cmFuc3BvcnQgbGF5ZXIuIFRoZSBpbXBvcnRhbnQgcGllY2UgaGVyZSBpcyB0aGF0IGl0IGlzIGNhbGxlZCBieSBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgLiBUaHVzLCBpdCBpcyBjYWxsZWQgd2hlbiB0aGUgY29udHJvbGxlciBpcyBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGlzIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gdGhhdCBpbnN0YW50aWF0ZXMgdGhlIGNvbnRyb2xsZXIgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgdGhlbiAqaW1tZWRpYXRlbHkqIG5lZWRzIHRvIGNhbGwgYG52bWVfdGNwX3NldHVwX2N0cmxgIHRvIGdldCBldmVyeXRoaW5nIHByb3Blcmx5IGNvbmZpZ3VyZWQgYW5kIHJlYWR5IHRvIGhhbmRsZSBjb21tYW5kcy4gSSdkIGV4cGVjdCBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgdG8gaGFuZGxlIHRhc2tzIGxpa2Ugc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGNvbm5lY3Rpb24sIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCByZWdpc3RlcmluZyB0aGUgY29udHJvbGxlciwgYW5kIGdldHRpbmcgdGhlIGNvbnRyb2xsZXIgcmVhZHkgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNToxMC43NzA3Mzc3MTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTY0MjM5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV90Y3Bfc2V0dXBfY3RybFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNDcyPXN0YXRpYyBib29sIG52bWVfdGNwX2tleV9yZXZva2VfbmVlZGVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDc2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0Nzc6c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0Nzgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjU2MD1zdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNvbm5lY3RfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1NjgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjU2OTpcXHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTcwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNjMwPXN0YXRpYyB2b2lkIG52bWVfcmVzZXRfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2NDktXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY1MDpcXHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjUxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0zMDg1PXN0YXRpYyBzdHJ1Y3QgbnZtZV9jdHJsICpudm1lX3RjcF9jcmVhdGVfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTA0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMxMDU6XFx0cmV0ID0gbnZtZV90Y3Bfc2V0dXBfY3RybChcXHUwMDI2Y3RybC1cXHUwMDNlY3RybCwgdHJ1ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzEwNi1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNToxMi4zNjcxNjY0MTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2ODY3MTk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBOVk1lLW9GIENvbnRyb2xsZXIgQ3JlYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQga2lja3Mgb2ZmIHRoZSB3aG9sZSBjb250cm9sbGVyIGNyZWF0aW9uIHByb2Nlc3MgaW4gdGhlIE5WTWUtb0YgVENQIHN0YWNrLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBkZWx2ZSBkZWVwZXIgaW50byBob3cgdGhpcyBjb250cm9sbGVyIGdldHMgaXRzIG5ldHdvcmsgaW50ZXJmYWNlIHNldCB1cC4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25zIGNhbGwgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgc29ja2V0IGFzc29jaWF0aW9uIGhhcHBlbnMsIGJlY2F1c2UgdGhhdCdzIGZ1bmRhbWVudGFsbHkgaG93IHRoZSBjb250cm9sbGVyIHRhbGtzIG92ZXIgVENQLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyBpdDsgdGhhdCBzaG91bGQgZ2l2ZSBhIG11Y2ggY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQgdGhlIHNldHVwIGxvZ2ljIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkwNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM1OjE3LjMzNTg0MTIyM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjMyNjg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzQwPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NTUtXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxNzU2OnN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTc1Ny17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE4OTA9c3RhdGljIHZvaWQgbnZtZXRfdGNwX3Rsc19oYW5kc2hha2VfZG9uZSh2b2lkICpkYXRhLCBpbnQgc3RhdHVzLFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xOTE0LVxcdGlmICghc3RhdHVzKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTkxNTpcXHRcXHRzdGF0dXMgPSBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2socXVldWUpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTkxNi1cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MTk3Nz1zdGF0aWMgdm9pZCBudm1ldF90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWV0X3RjcF9wb3J0ICpwb3J0LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDU0LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjA1NTpcXHRyZXQgPSBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2socXVldWUpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjA1Ni1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNToxOC45OTIxNzY0OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUwNjQ4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gTlZNZS1vRiBUQ1AgaW1wbGVtZW50YXRpb246XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgUXVldWUgQWxsb2NhdGlvbiBpbiB0aGUgTlZNZS1vRiBUQ1AgU3RhY2sqKlxuXG5BbHJpZ2h0LCBzbyBoZXJlJ3MgdGhlIGRlYWwuIEknbSBsb29raW5nIGF0IHRoZSBmbG93IGhlcmUsIGFuZCBteSBicmFpbiBpbW1lZGlhdGVseSB6ZXJvZXMgaW4gb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgIGFuZCBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYC4gSXQncyBwcmV0dHkgY2xlYXI6IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgICpjYWxscyogYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAuIFRoYXQgbWVhbnMgdGhlIGBhY2NlcHRfd29ya2AgZnVuY3Rpb24sIHdoaWNoIGlzIGhhbmRsaW5nIG5ldyBjb25uZWN0aW9uIGFjY2VwdGFuY2VzIG9uIHRoZSBUQ1Agc2lkZSwgaXMgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgbmV3IEkvTyBxdWV1ZXMuIFRoaXMgaXMgaG93IHRoZSBzeXN0ZW0gc2V0cyB1cCB0aGUgcmVzb3VyY2VzIGl0IG5lZWRzIHRvIGhhbmRsZSB0aGUgSS9PIGZvciBlYWNoIGluY29taW5nIE5WTWUtb0YgY29ubmVjdGlvbi4gSXQncyB0aGUgcG9pbnQgd2hlcmUgYSBuZXcgY2xpZW50IGlzIGdvaW5nIHRvIHN0YXJ0IHRhbGtpbmcgdG8gdGhlIHRhcmdldC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGl0IHBvaW50cyB0byBhIGNyaXRpY2FsIGFyZWEgZm9yIHBlcmZvcm1hbmNlIOKAkyBhbnkgYm90dGxlbmVjayB0aGVyZSB3aWxsIGJlIGZlbHQgYWNyb3NzIGFsbCBjb25uZWN0aW9uIGFjY2VwdGFuY2VzLiBNYWtlcyBzZW5zZSB0aGF0IHRoaXMgd291bGQgYmUgYSBmb2N1cyBmb3Igb3B0aW1pemF0aW9uIG9yIHNjcnV0aW55IGlmIHRoZXJlIGFyZSBhbnkgaXNzdWVzIHdpdGggY29ubmVjdGlvbiByYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NjksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNToyMi41NDI4Mjc5NzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTk3OTI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZXRfdGNwX2FsbG9jX3F1ZXVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MTk3ND1zdGF0aWMgdm9pZCBudm1ldF90Y3BfdGxzX2hhbmRzaGFrZV90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdykge31cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTk3Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE5Nzc6c3RhdGljIHZvaWQgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1ldF90Y3BfcG9ydCAqcG9ydCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5NzgtXFx0XFx0c3RydWN0IHNvY2tldCAqbmV3c29jaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjA4Nj1zdGF0aWMgdm9pZCBudm1ldF90Y3BfYWNjZXB0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDk5LVxcdFxcdH1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMDA6XFx0XFx0bnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHBvcnQsIG5ld3NvY2spO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEwMS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM1OjI0LjE2MjYyNjE2OFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzE3MTgwNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBOVk1lLW9GIFRDUCBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AuIEl0J3MgY2xlYXJseSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIE5WTWUgb3ZlciBUQ1AgaW1wbGVtZW50YXRpb24sIGFuZCBzcGVjaWZpY2FsbHksIGl0J3Mgb3BlcmF0aW5nIHdpdGhpbiB0aGUga2VybmVsJ3Mgd29ya3F1ZXVlIHN5c3RlbS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGhhbmRsaW5nIGFzeW5jaHJvbm91cyB0YXNrcywgbGlrZWx5IHJlbGF0ZWQgdG8gYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9ucy4gVGhhdCdzIGEgc29saWQgcGllY2Ugb2YgY29udGV4dC4gTm93LCB3aGF0J3MgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBwaWN0dXJlPyBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gbGlmZWN5Y2xlLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gcGxhY2UgaXQgaW4gdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnMgYSBOSUMgbXVzdCBwZXJmb3JtIHRvIGFjY2VwdCBhIGNvbm5lY3Rpb24uXG5cbkFuZCB0aGF0IGJyaW5ncyBhbm90aGVyIHRob3VnaHQuIFdoYXQgYWJvdXQgYG52bWV0X3RjcF9hZGRfcG9ydGA/IEkgYmV0IHRoYXQgZnVuY3Rpb24gbGlrZWx5IGRvZXMgc29tZSBpbml0aWFsIHNldHVwIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgcG9ydCBhbmQgcHJvYmFibHkgc2V0cyB1cCB0aGUgZnJhbWV3b3JrIGZvciBhY2NlcHRpbmcgY29ubmVjdGlvbnMsIHNvIEkgc2hvdWxkIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBhbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjb250cm9sIGZsb3cgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgd2hldGhlciB0aGV5J3JlIGludm9rZWQgZGlyZWN0bHksIG9yIGJ5IHNvbWUgb3RoZXIgc3lzdGVtIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDAzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzU6MzAuNDc5ODA4NTlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjMzNjk5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZXRfdGNwX2FkZF9wb3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjEwND1zdGF0aWMgdm9pZCBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMTE5LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjEyMDpzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMTIxLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjMxMz1zdGF0aWMgY29uc3Qgc3RydWN0IG52bWV0X2ZhYnJpY3Nfb3BzIG52bWV0X3RjcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIzMTYtXFx0Lm1zZGJkXFx0XFx0XFx0PSAxLFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjMxNzpcXHQuYWRkX3BvcnRcXHRcXHQ9IG52bWV0X3RjcF9hZGRfcG9ydCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIzMTgtXFx0LnJlbW92ZV9wb3J0XFx0XFx0PSBudm1ldF90Y3BfcmVtb3ZlX3BvcnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM1OjMyLjEwMzE4ODkwMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk3MjUwNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTlZNZS1vRi9UQ1AgUG9ydCBBZGRpdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgTlZNZS1vRi9UQ1AgZmFicmljIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBwb3J0IGFkZGl0aW9uIHByb2Nlc3MuIFRoZSBgbnZtZXRfdGNwX2FkZF9wb3J0YCBmdW5jdGlvbiBpbW1lZGlhdGVseSBzdGFuZHMgb3V0IGFzIHRoZSBjb3JlIGNhbGxiYWNrIHdpdGhpbiBgbnZtZXRfZmFicmljc19vcHNgLiBUaGF0IG1lYW5zIG15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY29udHJvbCBhbmQgcXVldWUgY3JlYXRpb24uXG5cblNvLCBsZXQncyB6ZXJvIGluIG9uIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAuIEJ1dCBob2xkIG9uLi4uIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgIGlzICpzdGF0aWMqPyBIbW1tLCB0aGF0J3MgYSBiaXQgdW51c3VhbCBmb3IgYSBrZXkgZnVuY3Rpb24gbGlrZSB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQncyBiZWluZyBhY2Nlc3NlZC4gSXMgdGhlcmUgc29tZSBub24tc3RhdGljIGVudHJ5IHBvaW50IHRoYXQgY2FsbHMgaXQ/IEFuZCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBpcyBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIHN0YXRpYyB0b28/IEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhhdCBjb3VsZCBjaGFuZ2UgZXZlcnl0aGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NTIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzU6MzYuNDAwNDQyNjMxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU4MzI2MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfdGNwX2NyZWF0ZV9jdHJsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTMwMDM9c3RhdGljIHN0cnVjdCBudm1lX3RjcF9jdHJsICpudm1lX3RjcF9hbGxvY19jdHJsKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwODQtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzA4NTpzdGF0aWMgc3RydWN0IG52bWVfY3RybCAqbnZtZV90Y3BfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwODYtXFx0XFx0c3RydWN0IG52bWZfY3RybF9vcHRpb25zICpvcHRzKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MzEyNz1zdGF0aWMgc3RydWN0IG52bWZfdHJhbnNwb3J0X29wcyBudm1lX3RjcF90cmFuc3BvcnQgPSB7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTM2LVxcdFxcdFxcdCAgTlZNRl9PUFRfS0VZUklORyB8IE5WTUZfT1BUX1RMU19LRVkgfCBOVk1GX09QVF9DT05DQVQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzEzNzpcXHQuY3JlYXRlX2N0cmxcXHQ9IG52bWVfdGNwX2NyZWF0ZV9jdHJsLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMxMzgtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzU6MzguMDU4Nzc2NDM4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4MzAyMDgzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBOVk1lLW9GIFRyYW5zcG9ydCBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgTlZNZS1vRiBmYWJyaWMgb3BlcmF0aW9ucyBhcmUgc3RydWN0dXJlZC4gSXQncyBiZWNvbWluZyBjbGVhciB0aGF0IHRoZXNlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgYWxsIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCB3aXRoaW4gYG52bWZfdHJhbnNwb3J0X29wc2AgYW5kIGBudm1ldF9mYWJyaWNzX29wc2AuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBTcGVjaWZpY2FsbHksIEknbSBub3RpbmcgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAgYXMgZXhhbXBsZXMgZnJvbSB0aGUgVENQIHRyYW5zcG9ydC4gSG1tLCBsZXQncyBub3QgZm9yZ2V0IHRoYXQgYG52bWVfdGNwX3NldHVwX2N0cmxgIGlzIGFsc28gc3RhdGljLiBHaXZlbiB0aGlzIHN0YXRpYyByZWdpc3RyYXRpb24gcGF0dGVybiwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBzY2FuIGZvciBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBhcmVhLiBJdCB3aWxsIGJlIG11Y2ggbW9yZSBpbnRlcmVzdGluZyBpZiBJIGRpc2NvdmVyIGFueS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExODAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNTo0Ni44ODg5ODc5MzVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzA4NzUxNTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm52bWVfdGNwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNTo0OS4zNTk4NzI5NThaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NTMyODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVk1lL1RDUCBTeW1ib2wgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQgaGl0cyBtZSBpcyB0aGUgY29tcGxldGUgYWJzZW5jZSBvZiBhbnkgZXhwb3J0ZWQgc3ltYm9scyBzcGVjaWZpY2FsbHkgZm9yIE5WTWUvVENQLiBUaGF0J3MuLi4gaW50ZXJlc3RpbmcuIFVzdWFsbHksIHlvdSdkIGV4cGVjdCBhdCBsZWFzdCAqc29tZSogZW50cnkgcG9pbnRzLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgYSBwdWJsaWNseSBhY2Nlc3NpYmxlIGludGVyZmFjZS4gVGhlIGxhY2sgb2YgdGhlbSBzdWdnZXN0cyBhIGZldyBwb3NzaWJpbGl0aWVzLCBlYWNoIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gQ291bGQgdGhpcyBtZWFuIGl0J3MgZW50aXJlbHkga2VybmVsLWludGVybmFsLCBvciBoZWF2aWx5IHJlbGlhbnQgb24gYSBzcGVjaWZpYyBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmU/IElzIHRoaXMgYW4gaW50ZW50aW9uYWwgZGVzaWduIGNob2ljZSB0byBtYWludGFpbiBhIHRpZ2h0IGNvbnRyb2wgcGxhbmU/IEl0J3MgZGVmaW5pdGVseSBhIHJlZCBmbGFnIGZvciBhbnkgc3RyYWlnaHRmb3J3YXJkIGludGVncmF0aW9uIHNjZW5hcmlvLlxuXG5UaGVuLCB0aGUgbWluZCBuYXR1cmFsbHkgd2FuZGVycyB0byBub24tc3RhdGljIGZ1bmN0aW9ucy4gTWF5YmUgdGhlIGtleSBmdW5jdGlvbnMgKmFyZW4ndCogc3RhdGljLiBUaGF0J3MgdGhlIG90aGVyIGFuZ2xlIHRvIGNvbnNpZGVyLiBJZiB0aGUgY3JpdGljYWwgY29kZSBpc24ndCBkZWNsYXJlZCBgc3RhdGljYCwgaXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZm9yIGxpbmtpbmcgb3IgYWNjZXNzLCBhbHRob3VnaCBpdCBzdGlsbCBkb2VzbuKAmXQgc29sdmUgdGhlIG9yaWdpbmFsIHByb2JsZW0gb2Ygbm90IGhhdmluZyBhIGNsZWFyLCBvYnZpb3VzIEFQSS4gVGhpcyBzaGlmdHMgdGhlIGZvY3VzIGZyb20gbG9va2luZyBmb3IgYSBkaXJlY3QgaW50ZXJmYWNlIHRvIHBvdGVudGlhbGx5IHJldmVyc2UgZW5naW5lZXJpbmcgaW50ZXJuYWwgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgd2l0aGluIHRoZSB0YXJnZXQgY29kZS4gSWYgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW50ZXJhY3QsIEkgbWlnaHQgYmUgYWJsZSB0byBwaWVjZSB0b2dldGhlciB0aGUgcGllY2VzIHdpdGhvdXQgaGF2aW5nIHRvIGRpcmVjdGx5IGludGVyZmFjZSB3aXRoIGFuIGV4cG9ydGVkIEFQSS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNTo1Ny42MTUyMDQzMjhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODQ1NDcyMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKm52bWVfdGNwX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDYzOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjUtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY6c3RydWN0IG52bWVfdGNwX3F1ZXVlO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9NTM9TU9EVUxFX1BBUk1fREVTQyh0bHNfaGFuZHNoYWtlX3RpbWVvdXQsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01Ni1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1NzpzdGF0aWMgYXRvbWljX3QgbnZtZV90Y3BfY3B1X3F1ZXVlc1tOUl9DUFVTXTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1OTplbnVtIG52bWVfdGNwX3NlbmRfc3RhdGUge1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTYwLVxcdE5WTUVfVENQX1NFTkRfQ01EX1BEVSA9IDAsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02NS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo2NjpzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCB7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjctXFx0c3RydWN0IG52bWVfcmVxdWVzdFxcdHJlcTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTg5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjkwOmVudW0gbnZtZV90Y3BfcXVldWVfZmxhZ3Mge1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTkxLVxcdE5WTUVfVENQX1FfQUxMT0NBVEVEXFx0PSAwLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTYtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6OTc6ZW51bSBudm1lX3RjcF9yZWN2X3N0YXRlIHtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy05OC1cXHROVk1FX1RDUF9SRUNWX1BEVSA9IDAsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMDItXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTAzOnN0cnVjdCBudm1lX3RjcF9jdHJsO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwNDpzdHJ1Y3QgbnZtZV90Y3BfcXVldWUge1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwNS1cXHRzdHJ1Y3Qgc29ja2V0XFx0XFx0KnNvY2s7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNTEtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTUyOnN0cnVjdCBudm1lX3RjcF9jdHJsIHtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNTMtXFx0LyogcmVhZCBvbmx5IGluIHRoZSBob3QgcGF0aCAqL1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTY5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3MDpzdGF0aWMgTElTVF9IRUFEKG52bWVfdGNwX2N0cmxfbGlzdCk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTcxOnN0YXRpYyBERUZJTkVfTVVURVgobnZtZV90Y3BfY3RybF9tdXRleCk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTcyOnN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbnZtZV90Y3Bfd3E7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBudm1lX3RjcF9tcV9vcHM7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBudm1lX3RjcF9hZG1pbl9tcV9vcHM7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc1OnN0YXRpYyBpbnQgbnZtZV90Y3BfdHJ5X3NlbmQoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc2LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgzLSAqL1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4NDpzdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4NS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDktXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjEwOnN0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfdGNwX2N0cmwgKnRvX3RjcF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjExLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTU6c3RhdGljIGlubGluZSBpbnQgbnZtZV90Y3BfcXVldWVfaWQoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTYte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIyMDpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV90Y3BfcmVjdl9wZHVfc3VwcG9ydGVkKGVudW0gbnZtZV90Y3BfcGR1X3R5cGUgdHlwZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjEte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjM1LSAqL1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIzNjpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV90Y3BfcXVldWVfdGxzKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjM3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0Ni0gKi9cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDc6c3RhdGljIGlubGluZSBib29sIG52bWVfdGNwX3Rsc19jb25maWd1cmVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ4LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1NC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNTU6c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX3RhZ3MgKm52bWVfdGNwX3RhZ3NldChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1Ni17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY0OnN0YXRpYyBpbmxpbmUgdTggbnZtZV90Y3BfaGRnc3RfbGVuKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY1LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNjk6c3RhdGljIGlubGluZSB1OCBudm1lX3RjcF9kZGdzdF9sZW4oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNzAte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjczLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI3NDpzdGF0aWMgaW5saW5lIHZvaWQgKm52bWVfdGNwX3JlcV9jbWRfcGR1KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjc1LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNzk6c3RhdGljIGlubGluZSB2b2lkICpudm1lX3RjcF9yZXFfZGF0YV9wZHUoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yODAte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjg1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI4NjpzdGF0aWMgaW5saW5lIHNpemVfdCBudm1lX3RjcF9pbmxpbmVfZGF0YV9zaXplKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjg3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI5Mi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyOTM6c3RhdGljIGlubGluZSBib29sIG52bWVfdGNwX2FzeW5jX3JlcShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI5NC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yOTctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6Mjk4OnN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX3RjcF9oYXNfaW5saW5lX2RhdGEoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yOTkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzEwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMxMTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpudm1lX3RjcF9yZXFfY3VyX3BhZ2Uoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTIte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzE1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMxNjpzdGF0aWMgaW5saW5lIHNpemVfdCBudm1lX3RjcF9yZXFfY3VyX29mZnNldChzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMxNy17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMjAtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzIxOnN0YXRpYyBpbmxpbmUgc2l6ZV90IG52bWVfdGNwX3JlcV9jdXJfbGVuZ3RoKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMyNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMjc6c3RhdGljIGlubGluZSBzaXplX3QgbnZtZV90Y3BfcGR1X2RhdGFfbGVmdChzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMyOC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMzItXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzMzOnN0YXRpYyBpbmxpbmUgc2l6ZV90IG52bWVfdGNwX3BkdV9sYXN0X3NlbmQoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMzQtXFx0XFx0aW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMzOC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMzk6c3RhdGljIHZvaWQgbnZtZV90Y3BfaW5pdF9pdGVyKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzQwLVxcdFxcdHVuc2lnbmVkIGludCBkaXIpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zNjMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzY0OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9hZHZhbmNlX3JlcShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTM2NS1cXHRcXHRpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzc2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjM3NzpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV90Y3Bfc2VuZF9hbGwoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zNzgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzg2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjM4NzpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV90Y3BfcXVldWVfaGFzX3BlbmRpbmcoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zODgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzkyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjM5MzpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV90Y3BfcXVldWVfbW9yZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTM5NC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zOTgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6Mzk5OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDAwLVxcdFxcdGJvb2wgbGFzdClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQyMi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0MjM6c3RhdGljIHZvaWQgbnZtZV90Y3BfcHJvY2Vzc19yZXFfbGlzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQyNC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00MzMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NDM0OnN0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKlxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQzNTpudm1lX3RjcF9mZXRjaF9yZXF1ZXN0KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDM2LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQ1NS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0NTY6c3RhdGljIGlubGluZSB2b2lkIG52bWVfdGNwX2RkZ3N0X3VwZGF0ZSh1MzIgKmNyY3AsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDU3LVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDcyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQ3MzpzdGF0aWMgaW5saW5lIF9fbGUzMiBudm1lX3RjcF9kZGdzdF9maW5hbCh1MzIgY3JjKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQ3NC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00NzctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NDc4OnN0YXRpYyBpbmxpbmUgX19sZTMyIG52bWVfdGNwX2hkZ3N0KGNvbnN0IHZvaWQgKnBkdSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00Nzkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDgyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQ4MzpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV90Y3Bfc2V0X2hkZ3N0KHZvaWQgKnBkdSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00ODQte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDg3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQ4ODpzdGF0aWMgaW50IG52bWVfdGNwX3ZlcmlmeV9oZGdzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQ4OS1cXHRcXHR2b2lkICpwZHUsIHNpemVfdCBwZHVfbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTEzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjUxNDpzdGF0aWMgaW50IG52bWVfdGNwX2NoZWNrX2RkZ3N0KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsIHZvaWQgKnBkdSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01MTUte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTMzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjUzNDpzdGF0aWMgdm9pZCBudm1lX3RjcF9leGl0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTM1LVxcdFxcdHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTQxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjU0MjpzdGF0aWMgaW50IG52bWVfdGNwX2luaXRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NDMtXFx0XFx0c3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBpbnQgaGN0eF9pZHgsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NjgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTY5OnN0YXRpYyBpbnQgbnZtZV90Y3BfaW5pdF9oY3R4KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCB2b2lkICpkYXRhLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU3MC1cXHRcXHR1bnNpZ25lZCBpbnQgaGN0eF9pZHgpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NzgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTc5OnN0YXRpYyBpbnQgbnZtZV90Y3BfaW5pdF9hZG1pbl9oY3R4KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCB2b2lkICpkYXRhLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU4MC1cXHRcXHR1bnNpZ25lZCBpbnQgaGN0eF9pZHgpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01ODgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTg5OnN0YXRpYyBlbnVtIG52bWVfdGNwX3JlY3Zfc3RhdGVcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1OTA6bnZtZV90Y3BfcmVjdl9zdGF0ZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU5MS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01OTYtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTk3OnN0YXRpYyB2b2lkIG52bWVfdGNwX2luaXRfcmVjdl9jdHgoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01OTgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjA1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjYwNjpzdGF0aWMgdm9pZCBudm1lX3RjcF9lcnJvcl9yZWNvdmVyeShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTYwNy17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02MTQtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NjE1OnN0YXRpYyBpbnQgbnZtZV90Y3BfcHJvY2Vzc19udm1lX2NxZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTYxNi1cXHRcXHRzdHJ1Y3QgbnZtZV9jb21wbGV0aW9uICpjcWUpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02NDAtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NjQxOnN0YXRpYyBpbnQgbnZtZV90Y3BfaGFuZGxlX2MyaF9kYXRhKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjQyLVxcdFxcdHN0cnVjdCBudm1lX3RjcF9kYXRhX3BkdSAqcGR1KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjc0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjY3NTpzdGF0aWMgaW50IG52bWVfdGNwX2hhbmRsZV9jb21wKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjc2LVxcdFxcdHN0cnVjdCBudm1lX3RjcF9yc3BfcGR1ICpwZHUpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02OTYtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6Njk3OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldHVwX2gyY19kYXRhX3BkdShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTY5OC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy03MzAtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NzMxOnN0YXRpYyBpbnQgbnZtZV90Y3BfaGFuZGxlX3IydChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTczMi1cXHRcXHRzdHJ1Y3QgbnZtZV90Y3BfcjJ0X3BkdSAqcGR1KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNzg5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjc5MDpzdGF0aWMgdm9pZCBudm1lX3RjcF9oYW5kbGVfYzJoX3Rlcm0oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy03OTEtXFx0XFx0c3RydWN0IG52bWVfdGNwX3Rlcm1fcGR1ICpwZHUpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy04MjMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6ODI0OnN0YXRpYyBpbnQgbnZtZV90Y3BfcmVjdl9wZHUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy04MjUtXFx0XFx0dW5zaWduZWQgaW50ICpvZmZzZXQsIHNpemVfdCAqbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtODk1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjg5NjpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV90Y3BfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCB1MTYgc3RhdHVzKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTg5Ny17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy05MDMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6OTA0OnN0YXRpYyBpbnQgbnZtZV90Y3BfcmVjdl9kYXRhKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTA1LVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCAqb2Zmc2V0LCBzaXplX3QgKmxlbilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTk3NC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo5NzU6c3RhdGljIGludCBudm1lX3RjcF9yZWN2X2RkZ3N0KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTc2LVxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCAqb2Zmc2V0LCBzaXplX3QgKmxlbilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwMTktXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTAyMDpzdGF0aWMgaW50IG52bWVfdGNwX3JlY3Zfc2tiKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwMjEtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA1NS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMDU2OnN0YXRpYyB2b2lkIG52bWVfdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwNTcte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA2OS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMDcwOnN0YXRpYyB2b2lkIG52bWVfdGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMDcxLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwODUtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTA4NjpzdGF0aWMgdm9pZCBudm1lX3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwODcte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTExMy1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMTE0OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9kb25lX3NlbmRfcmVxKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTExNS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTE4LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjExMTk6c3RhdGljIHZvaWQgbnZtZV90Y3BfZmFpbF9yZXF1ZXN0KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTEyMC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTMxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjExMzI6c3RhdGljIGludCBudm1lX3RjcF90cnlfc2VuZF9kYXRhKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTEzMy17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTk0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjExOTU6c3RhdGljIGludCBudm1lX3RjcF90cnlfc2VuZF9jbWRfcGR1KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTE5Ni17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjM1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEyMzY6c3RhdGljIGludCBudm1lX3RjcF90cnlfc2VuZF9kYXRhX3BkdShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEyMzcte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTI2OS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMjcwOnN0YXRpYyBpbnQgbnZtZV90Y3BfdHJ5X3NlbmRfZGRnc3Qoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjcxLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEzMDItXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTMwMzpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9zZW5kKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTMwNC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzUyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEzNTM6c3RhdGljIGludCBudm1lX3RjcF90cnlfcmVjdihzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEzNTQte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTM2OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMzY5OnN0YXRpYyB2b2lkIG52bWVfdGNwX2lvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEzNzAte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQwNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNDA3OnN0YXRpYyB2b2lkIG52bWVfdGNwX2ZyZWVfYXN5bmNfcmVxKHN0cnVjdCBudm1lX3RjcF9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE0MDgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQxMy1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNDE0OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfYXN5bmNfcmVxKHN0cnVjdCBudm1lX3RjcF9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE0MTUte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQyOS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNDMwOnN0YXRpYyB2b2lkIG52bWVfdGNwX2ZyZWVfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQzMS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNDcwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE0NzE6c3RhdGljIGludCBudm1lX3RjcF9pbml0X2Nvbm5lY3Rpb24oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNDcyLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2MDEtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTYwMjpzdGF0aWMgYm9vbCBudm1lX3RjcF9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2MDMte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTYwNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNjA3OnN0YXRpYyBib29sIG52bWVfdGNwX2RlZmF1bHRfcXVldWUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjA4LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2MTUtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTYxNjpzdGF0aWMgYm9vbCBudm1lX3RjcF9yZWFkX3F1ZXVlKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTYxNy17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjI2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE2Mjc6c3RhdGljIGJvb2wgbnZtZV90Y3BfcG9sbF9xdWV1ZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2Mjgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTY0OC0gKi9cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNjQ5OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldF9xdWV1ZV9pb19jcHUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjUwLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2OTEtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTY5MjpzdGF0aWMgdm9pZCBudm1lX3RjcF90bHNfZG9uZSh2b2lkICpkYXRhLCBpbnQgc3RhdHVzLCBrZXlfc2VyaWFsX3QgcHNraWQpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTY5My17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzIzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3MjQ6c3RhdGljIGludCBudm1lX3RjcF9zdGFydF90bHMoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTcyNS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc3Ni1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzc3OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3Nzgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc4NC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzg1OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc4Ni17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzkwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3OTE6c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyICppZmFjZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzkyLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc5ODpzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgwNS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODA2OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTEtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgxMjpzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0b3MpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgxMy17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODE3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4MTg6c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyOC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODI5OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgzMC1cXHRcXHRcXHRcXHRrZXlfc2VyaWFsX3QgcHNraWQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDI0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIwMjU6c3RhdGljIHZvaWQgbnZtZV90Y3BfcmVzdG9yZV9zb2NrX29wcyhzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwMjYte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjAzNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDM3OnN0YXRpYyB2b2lkIF9fbnZtZV90Y3Bfc3RvcF9xdWV1ZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwMzgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA0My1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDQ0OnN0YXRpYyB2b2lkIG52bWVfdGNwX3N0b3BfcXVldWVfbm93YWl0KHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwNDUte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA2Mi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDYzOnN0YXRpYyB2b2lkIG52bWVfdGNwX3dhaXRfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA2NC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDgwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIwODE6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDgyLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwODctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjA4ODpzdGF0aWMgdm9pZCBudm1lX3RjcF9zZXR1cF9zb2NrX29wcyhzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwODkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjEwMy1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTA0OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBpZHgpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjEwNS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTMwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxMzE6c3RhdGljIHZvaWQgbnZtZV90Y3BfZnJlZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxMzIte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE0MS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTQyOnN0YXRpYyB2b2lkIG52bWVfdGNwX2ZyZWVfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE0My17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTQ5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxNTA6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTUxLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNTktXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE2MDpzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNjEtXFx0XFx0XFx0XFx0ICAgIGludCBmaXJzdCwgaW50IGxhc3QpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTc4LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxNzk6c3RhdGljIGludCBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxODAte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjIxMi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMjEzOnN0YXRpYyBpbnQgX19udm1lX3RjcF9hbGxvY19pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjE0LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyNTMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjI1NDpzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyNTUte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjI3OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMjc5OnN0YXRpYyBpbnQgbnZtZV90Y3BfY29uZmlndXJlX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjgwLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzNDctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM0ODpzdGF0aWMgaW50IG52bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzQ5LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzOTctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM5ODpzdGF0aWMgdm9pZCBudm1lX3RjcF90ZWFyZG93bl9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzOTktXFx0XFx0Ym9vbCByZW1vdmUpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDE2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0MTc6c3RhdGljIHZvaWQgbnZtZV90Y3BfdGVhcmRvd25faW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQxOC1cXHRcXHRib29sIHJlbW92ZSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0MzItXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjQzMzpzdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNvbm5lY3Rfb3JfcmVtb3ZlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQzNC1cXHRcXHRpbnQgc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ3MS0gKi9cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDcyOnN0YXRpYyBib29sIG52bWVfdGNwX2tleV9yZXZva2VfbmVlZGVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ3My17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDc2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0Nzc6c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0Nzgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU1OS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNTYwOnN0YXRpYyB2b2lkIG52bWVfdGNwX3JlY29ubmVjdF9jdHJsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1NjEte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU4Ny1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNTg4OnN0YXRpYyB2b2lkIG52bWVfdGNwX2Vycm9yX3JlY292ZXJ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1ODkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjYxNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNjE3OnN0YXRpYyB2b2lkIG52bWVfdGNwX3RlYXJkb3duX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBzaHV0ZG93bilcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjE4LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2MjQtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjYyNTpzdGF0aWMgdm9pZCBudm1lX3RjcF9kZWxldGVfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2MjYte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjYzMD1zdGF0aWMgdm9pZCBudm1lX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjYwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2NjE6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY2Mi17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjY2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2Njc6c3RhdGljIHZvaWQgbnZtZV90Y3BfZnJlZV9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2Njgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY4My1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNjg0OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldF9zZ19udWxsKHN0cnVjdCBudm1lX2NvbW1hbmQgKmMpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY4NS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjkzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2OTQ6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc2V0X3NnX2lubGluZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2OTUtXFx0XFx0c3RydWN0IG52bWVfY29tbWFuZCAqYywgdTMyIGRhdGFfbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjcwMy1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNzA0OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldF9zZ19ob3N0X2RhdGEoc3RydWN0IG52bWVfY29tbWFuZCAqYyxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNzA1LVxcdFxcdHUzMiBkYXRhX2xlbilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3MTQtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjcxNTpzdGF0aWMgdm9pZCBudm1lX3RjcF9zdWJtaXRfYXN5bmNfZXZlbnQoc3RydWN0IG52bWVfY3RybCAqYXJnKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3MTYte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjc0NC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNzQ1OnN0YXRpYyB2b2lkIG52bWVfdGNwX2NvbXBsZXRlX3RpbWVkX291dChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM2OjA5LjQ2MDY4NTgyM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDI1ODAzNTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZXZpc2VkIFN5bWJvbCBGb2N1cyoqXG5cbk9rYXksIGhvbGQgb24uIEkgd2FzIGluaXRpYWxseSBmaXhhdGVkIG9uIHdoZXRoZXIgYG52bWVfdGNwX2luaXRfY29ubmVjdGlvbmAgb3IgYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCB3ZXJlIHN0YXRpYy4gUmlnaHQsIHRob3NlIGFyZSBzdGF0aWMuIEJ1dCwgSSB0aGluayBJIGNhbiByZWZpbmUgdGhpcy4gSSBjYW4gYWJzb2x1dGVseSB1c2UgYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCwgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AsIGFuZCBgbnZtZXRfdGNwX2FkZF9wb3J0YCBhcyBteSBrZXkgRm9jdXNTeW1ib2xzLiBUaGUgZ3VpZGVsaW5lcyBzcGVjaWZpY2FsbHkgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBIb3dldmVyLCBpZiB0aGF0IGlkZWFsIGlzbid0IHBvc3NpYmxlLCB0aGVuIEknbSBmaW5lIHdpdGggbGlzdGluZyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGZpdCB0aGUgYmlsbC5cblxuVGhpbmtpbmcgZnVydGhlciwgKm52bWVfdGNwX2NyZWF0ZV9jdHJsKiBpcywgaW4gZmFjdCwgdGhlIGVudHJ5IHBvaW50IGZvciBjb250cm9sbGVyIGNyZWF0aW9uLiBJdCBpcyBzdGF0aWMsIGJ1dCBiZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIGFzIGEgY2FsbGJhY2sgaW4gYG52bWZfdHJhbnNwb3J0X29wc2AsIHRoZSBjb21waWxlciB3aWxsIG5vdCBpbmxpbmUgaXQuIEV4Y2VsbGVudC4gVGhhdCBmaXRzLiBTaW1pbGFybHksIGBudm1ldF90Y3BfYWRkX3BvcnRgIGlzIGFsc28gcmVnaXN0ZXJlZCwgaW4gYG52bWV0X2ZhYnJpY3Nfb3BzYC5cblxuYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCBjb3VsZCBiZSBpbmxpbmVkIHNpbmNlIGl0J3MgY2FsbGVkIGluIGEgbG9vcCwgYnV0IGBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZWAgYW5kIGBudm1lX3RjcF9hbGxvY19pb19xdWV1ZXNgIGFyZSBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkLlxuXG5TbywgbGV0J3Mgc3RpY2sgd2l0aCBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGFuZCBgbnZtZXRfdGNwX2FkZF9wb3J0YCBhcyB0aGUgcHJpbWFyeSBGb2N1c1N5bWJvbHMgZm9yIG5vdy5cblxuTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYG52bWV0X3RjcF9hZGRfcG9ydGAgd2l0aGluIGBkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0OTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzY6MjkuNzE4NzI0NTUxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM5MjM1Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWV0X3RjcF9hZGRfcG9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIxMDQ9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjExOS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMjA6c3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEyMS17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIzMTM9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyBudm1ldF90Y3Bfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMzE2LVxcdC5tc2RiZFxcdFxcdFxcdD0gMSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIzMTc6XFx0LmFkZF9wb3J0XFx0XFx0PSBudm1ldF90Y3BfYWRkX3BvcnQsXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMzE4LVxcdC5yZW1vdmVfcG9ydFxcdFxcdD0gbnZtZXRfdGNwX3JlbW92ZV9wb3J0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNjozMS40NTc5NjUzNDlaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyNzMxMjYyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTWUgVENQIFNvY2tldCBPcHRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBgbnZtZXRfdGNwX2FkZF9wb3J0YCBpcyBkZWZpbml0ZWx5IGEgY2FsbGJhY2ssIHdoaWNoIGlzIGdvb2QgdG8gbm90ZSBmb3IgbGF0ZXIgYW5hbHlzaXMuIE5vdywgd2hhdCBhYm91dCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYD8gQWgsIHllcywgdGhhdCdzIGNhbGxlZCB3aXRoaW4gYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLiBBbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIG1lYW5pbmcgd2UncmUgdGFraW5nIGl0cyBhZGRyZXNzLiBJdCB3b24ndCBiZSBpbmxpbmVkLiBTbyB3ZSBuZWVkIHRvIGFkZCB0aGF0IG9uZSB0byB0aGUgbGlzdCBhcyB3ZWxsLlxuXG5UaGVyZWZvcmUsIGZvciBvdXIgRm9jdXNTeW1ib2xzLCB3ZSBoYXZlOlxuXG4qICAgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYFxuKiAgIGBudm1ldF90Y3BfYWRkX3BvcnRgXG4qICAgYG52bWV0X3RjcF9hY2NlcHRfd29ya2BcblxuTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb25zIHdlIHNob3VsZCBjYXJlIGFib3V0OlxuXG4qICAgYE5WTUVfVENQYFxuKiAgIGBOVk1FX1RBUkdFVGBcbiogICBgTlZNRV9UQVJHRVRfVENQYFxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIG1vZGlmeWluZyBgZHJpdmVycy9udm1lL2hvc3QvdGNwLmNgIGFuZCBgZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY2AuIEl0J3MgcmVwbGFjaW5nIGRpcmVjdCBzb2NrZXQgb3B0aW9uIHNldHRpbmcgd2l0aCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGFkZHMgY3J1Y2lhbCBlcnJvciBjaGVja2luZywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGl0IGludHJvZHVjZXMgdGhlIGFiaWxpdHkgZm9yIEJQRi9MU00gaG9va3MgdG8gaW50ZXJjZXB0IGFuZCBpbmZsdWVuY2UgdGhlIHNvY2tldCBvcHRpb24gc2V0dGluZ3MuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBob3cgdGhlIHNvY2tldHMgYXJlIHNldCB1cCBhbmQgdGhhdCdzIGFuIGltcG9ydGFudCBjaGFuZ2UuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIGRvdWJsZS1jaGVja2VkIGlmIGBkb19zb2NrX3NldHNvY2tvcHRgIGlzIGV4cG9ydGVkLCBhbmQgeWVzLCB0aGUgZ3JlcCBvdXRwdXQgY29uZmlybXMgYEVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtgLlxuXG5NeSBSZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIHJlcGxhY2VzIGRpcmVjdCBzb2NrZXQgb3B0aW9uIGFzc2lnbm1lbnRzICh0aGluZ3MgbGlrZSBgdGNwX3NvY2tfc2V0X3N5bmNudGAgYW5kIGBzb2NrX25vX2xpbmdlcmApIHdpdGggYGRvX3NvY2tfc2V0c29ja29wdCgpYCBpbiBib3RoIHRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycy4gVGhlIHNpZ25pZmljYW5jZSBpcyB0aGF0IGBkb19zb2NrX3NldHNvY2tvcHQoKWAgd2lsbCBpbnZva2UgdGhlIExTTSBhbmQgQlBGIGNncm91cCBob29rcyAoYHNlY3VyaXR5X3NvY2tldF9zZXRzb2Nrb3B0YCBhbmQgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGApLiBUaGlzIGFsbG93cyBzZWN1cml0eSBtb2R1bGVzIGFuZCBCUEYgcHJvZ3JhbXMgdG8gYWN0aXZlbHkgaW50ZXJjZXB0LCBwb3RlbnRpYWxseSBtb2RpZnksIG9yIGZsYXQtb3V0IGRlbnkgdGhlc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGFsc28gYWRkcyBlcnJvciBoYW5kbGluZywgd2hpY2ggY291bGQgbGVhZCB0byBxdWV1ZSBhbGxvY2F0aW9uIGZhaWxpbmcgaWYgc2V0dGluZyB0aGUgb3B0aW9ucyBmYWlscy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbXBhY3QgaG93IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCBpbiBOVk1lIG92ZXIgVENQLCBzbyBmdXp6aW5nIHRob3NlIHBhdGhzIGlzIGVzc2VudGlhbC5cblxuTXkgZmluYWwgY29uc29saWRhdGVkIHZpZXcgaXM6XG5cbkNvbmZpZ3M6XG5gTlZNRV9UQ1BgXG5gTlZNRV9UQVJHRVRgXG5gTlZNRV9UQVJHRVRfVENQYFxuXG5Gb2N1c1N5bWJvbHM6XG5gbnZtZV90Y3BfY3JlYXRlX2N0cmxgXG5gbnZtZXRfdGNwX2FkZF9wb3J0YFxuYG52bWV0X3RjcF9hY2NlcHRfd29ya2BcblxuTGV0J3MgY2FsbCB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQ1LCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNzoxNS43MzEwOTQ0MjhaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU4MTAwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlZNRV9UQ1BcIixcbiAgICBcIk5WTUVfVEFSR0VUXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudm1lX3RjcF9jcmVhdGVfY3RybFwiLFxuICAgIFwibnZtZXRfdGNwX2FkZF9wb3J0XCIsXG4gICAgXCJudm1ldF90Y3BfYWNjZXB0X3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3Qgc29ja2V0IG9wdGlvbiBhc3NpZ25tZW50cyAoZS5nLiwgdGNwX3NvY2tfc2V0X3N5bmNudCwgc29ja19ub19saW5nZXIpIHdpdGggZG9fc29ja19zZXRzb2Nrb3B0KCkgaW4gdGhlIE5WTWUgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBkb19zb2NrX3NldHNvY2tvcHQoKSBpbnZva2VzIExTTSBhbmQgQlBGIGNncm91cCBob29rcywgYWxsb3dpbmcgc2VjdXJpdHkgbW9kdWxlcyBhbmQgQlBGIHByb2dyYW1zIHRvIGludGVyY2VwdCwgbW9kaWZ5LCBvciBkZW55IHRoZXNlIHNvY2tldCBvcHRpb25zLiBJdCBhbHNvIGFkZHMgZXJyb3IgaGFuZGxpbmcgdGhhdCBmYWlscyBxdWV1ZSBhbGxvY2F0aW9uIGlmIHNldHRpbmcgdGhlIG9wdGlvbnMgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSByZWFjaGFibGUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyBpbiBOVk1lIG92ZXIgVENQIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfVENQXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV90Y3BfY3JlYXRlX2N0cmxcIixcbiAgICBcIm52bWV0X3RjcF9hZGRfcG9ydFwiLFxuICAgIFwibnZtZXRfdGNwX2FjY2VwdF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgZGlyZWN0IHNvY2tldCBvcHRpb24gYXNzaWdubWVudHMgKGUuZy4sIHRjcF9zb2NrX3NldF9zeW5jbnQsIHNvY2tfbm9fbGluZ2VyKSB3aXRoIGRvX3NvY2tfc2V0c29ja29wdCgpIGluIHRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgZG9fc29ja19zZXRzb2Nrb3B0KCkgaW52b2tlcyBMU00gYW5kIEJQRiBjZ3JvdXAgaG9va3MsIGFsbG93aW5nIHNlY3VyaXR5IG1vZHVsZXMgYW5kIEJQRiBwcm9ncmFtcyB0byBpbnRlcmNlcHQsIG1vZGlmeSwgb3IgZGVueSB0aGVzZSBzb2NrZXQgb3B0aW9ucy4gSXQgYWxzbyBhZGRzIGVycm9yIGhhbmRsaW5nIHRoYXQgZmFpbHMgcXVldWUgYWxsb2NhdGlvbiBpZiBzZXR0aW5nIHRoZSBvcHRpb25zIGZhaWxzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgcmVhY2hhYmxlIGNvbm5lY3Rpb24gc2V0dXAgcGF0aHMgaW4gTlZNZSBvdmVyIFRDUCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6Mzc6MTUuODEwNjgxNloiLCJTZXEiOjU2LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk3NDU5OTYxMTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6Mzc6MTUuODExMjcyODhaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Njk3NDU5MzYzNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc29ja2V0IG9wdGlvbiBzZXR0aW5nIGluIHRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyBieSByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHNwZWNpZmljIGhlbHBlcnMgKGxpa2UgYHRjcF9zb2NrX3NldF9ub2RlbGF5YCwgYHNvY2tfbm9fbGluZ2VyYCwgZXRjLikgd2l0aCBsb2NhbCB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGRvX3NvY2tfc2V0c29ja29wdGAuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgcGFzc2VkIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIChlLmcuLCBgaW50IHZhbCA9IDE7YCwgYHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07YCwgb3IgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCBieSB2YWx1ZSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGZpZWxkcywgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcsIGFuZCBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3Qgc29ja2V0IG9wdGlvbnMgb3IgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFuZCBkbyBub3QgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzUzNDBmMjMxODZiZjMyYzkzNGI3NWI2NWU1ZDBhZjQwNDNjMDIxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA2OjMzOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuaW5kZXggYmE1YzdiM2UyYTdjNi4uNWYzMGJlMDRhOWRkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuQEAgLTE3NzQsNiArMTc3NCw1OCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3RscyhzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07XG4rXG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXG4re1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2cHJpb3JpdHkpLCBzaXplb2YocHJpb3JpdHkpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyICppZmFjZSlcbit7XG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXG4rXHRcdFx0XHQgIFNPX0JJTkRUT0RFVklDRSwgS0VSTkVMX1NPQ0tQVFIoaWZhY2UpLFxuK1x0XHRcdFx0ICBzdHJsZW4oaWZhY2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX1NZTkNOVCxcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0b3MpXG4re1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVAsIElQX1RPUyxcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpXG4re1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbitcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNixcbitcdFx0XHRcdFx0ICBJUFY2X1RDTEFTUywgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dGNsYXNzKSxcbitcdFx0XHRcdFx0ICBzaXplb2YodGNsYXNzKSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiBcdFx0XHRcdGtleV9zZXJpYWxfdCBwc2tpZClcbiB7XG5AQCAtMTgxOSwyNCArMTg3MSw2NSBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuICNlbmRpZlxuIFxuIFx0LyogU2luZ2xlIHN5biByZXRyeSAqL1xuLVx0dGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCAxKTtcbitcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCAxKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJmYWlsZWQgdG8gc2V0IFRDUF9TWU5DTlQgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0cWlkLCByZXQpO1xuK1x0XHRnb3RvIGVycl9zb2NrO1xuK1x0fVxuIFxuIFx0LyogU2V0IFRDUCBubyBkZWxheSAqL1xuLVx0dGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbitcdFx0XHRcImZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0cWlkLCByZXQpO1xuK1x0XHRnb3RvIGVycl9zb2NrO1xuK1x0fVxuIFxuIFx0LypcbiBcdCAqIENsZWFudXAgd2hhdGV2ZXIgaXMgc2l0dGluZyBpbiB0aGUgVENQIHRyYW5zbWl0IHF1ZXVlIG9uIHNvY2tldFxuIFx0ICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZFxuIFx0ICogdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBiZSByZXN0b3JlZCBiZWZvcmUgVENQIHRpbWVzIG91dC5cbiBcdCAqL1xuLVx0c29ja19ub19saW5nZXIocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRyZXQgPSBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJmYWlsZWQgdG8gc2V0IFNPX0xJTkdFUiBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cIixcbitcdFx0XHRxaWQsIHJldCk7XG4rXHRcdGdvdG8gZXJyX3NvY2s7XG4rXHR9XG4gXG4tXHRpZiAoc29fcHJpb3JpdHkgXHUwMDNlIDApXG4tXHRcdHNvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMCkge1xuK1x0XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbitcdFx0XHRcdFwiZmFpbGVkIHRvIHNldCBTT19QUklPUklUWSBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cIixcbitcdFx0XHRcdHFpZCwgcmV0KTtcbitcdFx0XHRnb3RvIGVycl9zb2NrO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHQvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqL1xuLVx0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zIFx1MDAzZT0gMClcbi1cdFx0aXBfc29ja19zZXRfdG9zKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zKTtcbitcdGlmIChuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyBcdTAwM2U9IDApIHtcbitcdFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfdG9zKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFx0XCJmYWlsZWQgdG8gc2V0IElQX1RPUyBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cIixcbitcdFx0XHRcdHFpZCwgcmV0KTtcbitcdFx0XHRnb3RvIGVycl9zb2NrO1xuK1x0XHR9XG4rXG4rXHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLFxuK1x0XHRcdFx0XHQgICAgICAgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XHRcImZhaWxlZCB0byBzZXQgSVBWNl9UQ0xBU1Mgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0XHRxaWQsIHJldCk7XG4rXHRcdFx0Z290byBlcnJfc29jaztcbitcdFx0fVxuK1x0fVxuIFxuIFx0LyogU2V0IDEwIHNlY29uZHMgdGltZW91dCBmb3IgaWNyZXNwIHJlY3Ztc2cgKi9cbiBcdHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2dGltZW8gPSAxMCAqIEhaO1xuQEAgLTE4NjQsMTAgKzE5NTcsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuIFxuIFx0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlbWFzayBcdTAwMjYgTlZNRl9PUFRfSE9TVF9JRkFDRSkge1xuIFx0XHRjaGFyICppZmFjZSA9IG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlaG9zdF9pZmFjZTtcbi1cdFx0c29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTtcbiBcbi1cdFx0cmV0ID0gc29ja19zZXRzb2Nrb3B0KHF1ZXVlLVx1MDAzZXNvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSxcbi1cdFx0XHRcdCAgICAgIG9wdHZhbCwgc3RybGVuKGlmYWNlKSk7XG4rXHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBpZmFjZSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiBcdFx0XHQgIFwiZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG5pbmRleCA3NWEyNzZkNzNiZTNlLi5lZDQxM2FhNTYwMWM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuQEAgLTE2OTYsMTAgKzE2OTYsNjYgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbiB9XG4gXG4rc3RhdGljIGludCBudm1ldF90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07XG4rXG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0aW50IHZhbCA9IFNLX0NBTl9SRVVTRTtcbitcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcbitcdFx0XHRcdCAgU09fUkVVU0VBRERSLCBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLFxuK1x0XHRcdFx0ICBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdGludCB2YWwgPSAxO1xuK1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdGludCB0b3MgPSBpbmV0X3NrKHNrKS1cdTAwM2VyY3ZfdG9zO1xuK1xuK1x0aWYgKHRvcyBcdTAwM2UgMClcbitcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVAsIElQX1RPUyxcbitcdFx0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcbit7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4rXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4rXHRcdGludCB0Y2xhc3MgPSBpcDZfdGNsYXNzKGluZXQ2X3NrKHNrKS1cdTAwM2VyY3ZfZmxvd2luZm8pO1xuK1xuK1x0XHRpZiAodGNsYXNzIFx1MDAzZSAwKVxuK1x0XHRcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSxcbitcdFx0XHRcdFx0XHQgIFNPTF9JUFY2LCBJUFY2X1RDTEFTUyxcbitcdFx0XHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRjbGFzcyksXG4rXHRcdFx0XHRcdFx0ICBzaXplb2YodGNsYXNzKSk7XG4rXHR9XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpXG4ge1xuIFx0c3RydWN0IHNvY2tldCAqc29jayA9IHF1ZXVlLVx1MDAzZXNvY2s7XG4tXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLVx1MDAzZXNrKTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBrZXJuZWxfZ2V0c29ja25hbWUoc29jayxcbkBAIC0xNzE3LDE0ICsxNzczLDI0IEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxuIFx0ICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZFxuIFx0ICogdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBiZSByZXN0b3JlZCBiZWZvcmUgVENQIHRpbWVzIG91dC5cbiBcdCAqL1xuLVx0c29ja19ub19saW5nZXIoc29jay1cdTAwM2Vzayk7XG4rXHRyZXQgPSBudm1ldF90Y3Bfc29ja19ub19saW5nZXIoc29jay1cdTAwM2Vzayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRpZiAoc29fcHJpb3JpdHkgXHUwMDNlIDApIHtcbitcdFx0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFxuIFx0LyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi9cbi1cdGlmIChpbmV0LVx1MDAzZXJjdl90b3MgXHUwMDNlIDApXG4tXHRcdGlwX3NvY2tfc2V0X3Rvcyhzb2NrLVx1MDAzZXNrLCBpbmV0LVx1MDAzZXJjdl90b3MpO1xuK1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3Rvcyhzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHNvY2stXHUwMDNlc2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IDA7XG4gXHR3cml0ZV9sb2NrX2JoKFx1MDAyNnNvY2stXHUwMDNlc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5AQCAtMjA5OCwxMCArMjE2NCwyNiBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG4gXHRwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gcG9ydDtcbiBcdHBvcnQtXHUwMDNlZGF0YV9yZWFkeSA9IHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza19kYXRhX3JlYWR5O1xuIFx0cG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2RhdGFfcmVhZHkgPSBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHk7XG4tXHRzb2NrX3NldF9yZXVzZWFkZHIocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbi1cdHRjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4tXHRpZiAoc29fcHJpb3JpdHkgXHUwMDNlIDApXG4tXHRcdHNvY2tfc2V0X3ByaW9yaXR5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuK1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcl9lcnIoXCJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFQUREUiBvbiBwb3J0IHNvY2tldCAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9zb2NrO1xuK1x0fVxuK1xuK1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNldCBUQ1BfTk9ERUxBWSBvbiBwb3J0IHNvY2tldCAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9zb2NrO1xuK1x0fVxuK1xuK1x0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKSB7XG4rXHRcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHByX2VycihcImZhaWxlZCB0byBzZXQgU09fUFJJT1JJVFkgb24gcG9ydCBzb2NrZXQgJWRcXG5cIixcbitcdFx0XHQgICAgICAgcmV0KTtcbitcdFx0XHRnb3RvIGVycl9zb2NrO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRyZXQgPSBrZXJuZWxfYmluZChwb3J0LVx1MDAzZXNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNnBvcnQtXHUwMDNlYWRkcixcbiBcdFx0XHRzaXplb2YocG9ydC1cdTAwM2VhZGRyKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNzoxNS44MTEyNzM1OVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTc0NTkzMzQxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVk1lIFRDUCBTb2NrZXQgT3B0aW9uIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGJvdGggdGhlIGhvc3QgYW5kIHRhcmdldCBUQ1AgaW1wbGVtZW50YXRpb25zIHdpdGhpbiB0aGUgTlZNZSBkcml2ZXJzLiBFc3NlbnRpYWxseSwgaXQncyBhIHJlZmFjdG9yaW5nLCByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHRob3NlIHNwZWNpZmljIHNvY2tldCBvcHRpb24gc2V0dGluZyBmdW5jdGlvbnMg4oCTIHRoaW5ncyBsaWtlIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAgYW5kIGBzb2NrX25vX2xpbmdlcmAg4oCTIHdpdGggd3JhcHBlciBmdW5jdGlvbnMgdGhhdCB1bmlmb3JtbHkgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgLiBUaGUgZ29hbCwgSSBhc3N1bWUsIGlzIGNsZWFuZXIgY29kZSBhbmQgcG90ZW50aWFsbHkgZWFzaWVyIG1haW50ZW5hbmNlIGJ5IGNlbnRyYWxpemluZyB0aGUgc29ja2V0IG9wdGlvbiBzZXR0aW5nIGxvZ2ljLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgdXMgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBJIHNlZSB0aGVzZSB3cmFwcGVyIGZ1bmN0aW9ucywgYW5kIEknbSB3YWxraW5nIHRocm91Z2ggdGhlbS4gSXQncyBjbGVhciB0aGF0IGFsbCB0aGUgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCBhcmUgKmZ1bGx5KiBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkLiBXZSBoYXZlIGBpbnQgdmFsID0gMTtgLCBgc3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtgLCBhbmQgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCBieSB2YWx1ZS5cblxuU3BlY2lmaWNhbGx5LCB0aGF0IGBsaW5nZXJgIHN0cnVjdCBpcyBzb21ldGhpbmcgdG8gZG91YmxlLWNoZWNrLiBTbyBJJ20gcHVsbGluZyB1cCB0aGUgZGVmaW5pdGlvbiAobW9zdCBsaWtlbHkgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9zb2NrZXQuaGApLiBBaCwgeWVzLCB0d28gaW50cywgbm8gcGFkZGluZy4gVGhlIG90aGVyIHZhcmlhYmxlcyBhcmUgc2ltcGx5IGludGVnZXJzIG9yIHVuc2lnbmVkIGludGVnZXJzLiBObyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdGhlIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha2FnZSBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlciBzcGFjZS5cblxuVGhlIHdyYXBwZXJzIHVzZSBgS0VSTkVMX1NPQ0tQVFJgIHRvIGNyZWF0ZSBhIGBzb2NrcHRyX3RgLCBidXQgdGhpcyBpcyBhICprZXJuZWwqIHBvaW50ZXIsIGFuZCBpdCdzIHBvaW50aW5nIHRvIGluaXRpYWxpemVkIGRhdGEgb24gdGhlIHN0YWNrLiBUaGVyZSdzIHplcm8gY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIHdoaWNoIGlzIHdoYXQgd2UgYXJlIGNvbmNlcm5lZCBhYm91dC5cblxuRXNzZW50aWFsbHksIGFsbCBkYXRhIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCBpcyBpbml0aWFsaXplZC4gVGhlc2UgY2hhbmdlcywgYXQgd29yc3QsIGNvdWxkIGludHJvZHVjZSBidWdzIHJlbGF0ZWQgdG8gdGhlICpsb2dpYyogb2YgdGhlIHNvY2tldCBvcHRpb25zIG9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCB3b3VsZG4ndCBiZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudC4gVGhlcmVmb3JlLCBpdCdzIHNhZmUgdG8gc2F5OiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UgZG9uJ3QgbmVlZCBLTVNBTiBoZXJlOyB0aGVyZSdzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI4MywiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDg6NTMuMjcwNjEyNjQ2WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc29ja2V0IG9wdGlvbiBzZXR0aW5nIGluIHRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyBieSByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHNwZWNpZmljIGhlbHBlcnMgKGxpa2UgYHRjcF9zb2NrX3NldF9ub2RlbGF5YCwgYHNvY2tfbm9fbGluZ2VyYCwgZXRjLikgd2l0aCBsb2NhbCB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGRvX3NvY2tfc2V0c29ja29wdGAuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgcGFzc2VkIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIChlLmcuLCBgaW50IHZhbCA9IDE7YCwgYHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07YCwgb3IgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCBieSB2YWx1ZSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGZpZWxkcywgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcsIGFuZCBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3Qgc29ja2V0IG9wdGlvbnMgb3IgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFuZCBkbyBub3QgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBvcHRpb24gc2V0dGluZyBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgYnkgcmVwbGFjaW5nIGRpcmVjdCBjYWxscyB0byBzcGVjaWZpYyBoZWxwZXJzIChsaWtlIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGBzb2NrX25vX2xpbmdlcmAsIGV0Yy4pIHdpdGggbG9jYWwgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBkb19zb2NrX3NldHNvY2tvcHRgLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoZS5nLiwgYGludCB2YWwgPSAxO2AsIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgYnkgdmFsdWUpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nLCBhbmQgbm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHNvY2tldCBvcHRpb25zIG9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCBhcmUgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowth4pj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 06:18:50 +0000 UTC FinishedAt: 2026-08-18 06:48:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "09b7c00d55a8c1ec50c44e74d3edba0c0b317910", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_TCP", "NVME_TARGET", "NVME_TARGET_TCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "09b7c00d55a8c1ec50c44e74d3edba0c0b317910", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_TCP", "NVME_TARGET", "NVME_TARGET_TCP" ], "series_id": "d16a0175-22d6-420a-964d-221baca881e7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nvme_tcp_create_ctrl", "nvmet_tcp_add_port", "nvmet_tcp_accept_work" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX1RDUCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudm1lX3RjcF9jcmVhdGVfY3RybCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FjY2VwdF93b3JrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBvcHRpb24gc2V0dGluZyBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgYnkgcmVwbGFjaW5nIGRpcmVjdCBjYWxscyB0byBzcGVjaWZpYyBoZWxwZXJzIChsaWtlIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGBzb2NrX25vX2xpbmdlcmAsIGV0Yy4pIHdpdGggbG9jYWwgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBkb19zb2NrX3NldHNvY2tvcHRgLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoZS5nLiwgYGludCB2YWwgPSAxO2AsIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgYnkgdmFsdWUpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nLCBhbmQgbm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHNvY2tldCBvcHRpb25zIG9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCBhcmUgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3Qgc29ja2V0IG9wdGlvbiBhc3NpZ25tZW50cyAoZS5nLiwgdGNwX3NvY2tfc2V0X3N5bmNudCwgc29ja19ub19saW5nZXIpIHdpdGggZG9fc29ja19zZXRzb2Nrb3B0KCkgaW4gdGhlIE5WTWUgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBkb19zb2NrX3NldHNvY2tvcHQoKSBpbnZva2VzIExTTSBhbmQgQlBGIGNncm91cCBob29rcywgYWxsb3dpbmcgc2VjdXJpdHkgbW9kdWxlcyBhbmQgQlBGIHByb2dyYW1zIHRvIGludGVyY2VwdCwgbW9kaWZ5LCBvciBkZW55IHRoZXNlIHNvY2tldCBvcHRpb25zLiBJdCBhbHNvIGFkZHMgZXJyb3IgaGFuZGxpbmcgdGhhdCBmYWlscyBxdWV1ZSBhbGxvY2F0aW9uIGlmIHNldHRpbmcgdGhlIG9wdGlvbnMgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSByZWFjaGFibGUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyBpbiBOVk1lIG92ZXIgVENQIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzUzNDBmMjMxODZiZjMyYzkzNGI3NWI2NWU1ZDBhZjQwNDNjMDIxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA2OjMzOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbmluZGV4IGJhNWM3YjNlMmE3YzYuLjVmMzBiZTA0YTlkZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbkBAIC0xNzc0LDYgJiM0MzsxNzc0LDU4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfdGxzKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXG4mIzQzO1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG4mIzQzO1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULFxuJiM0MztcdFx0XHRcdCAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksXG4mIzQzO1x0XHRcdFx0ICBzdHJsZW4oaWZhY2UpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdGludCB2YWwgPSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLFxuJiM0MztcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXG4mIzQzO1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4mIzQzO1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcylcbiYjNDM7e1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuJiM0MztcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNixcbiYjNDM7XHRcdFx0XHRcdCAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRjbGFzcyksXG4mIzQzO1x0XHRcdFx0XHQgIHNpemVvZih0Y2xhc3MpKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiBcdFx0XHRcdGtleV9zZXJpYWxfdCBwc2tpZClcbiB7XG5AQCAtMTgxOSwyNCAmIzQzOzE4NzEsNjUgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiAjZW5kaWZcbiBcbiBcdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cbi1cdHRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4mIzQzO1x0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIDEpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtmYWlsZWQgdG8gc2V0IFRDUF9TWU5DTlQgb24gcXVldWUgJWQgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRxaWQsIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9zb2NrO1xuJiM0MztcdH1cbiBcbiBcdC8qIFNldCBUQ1Agbm8gZGVsYXkgKi9cbi1cdHRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuJiM0MztcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFwmIzM0O2ZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcXVldWUgJWQgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRxaWQsIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9zb2NrO1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBDbGVhbnVwIHdoYXRldmVyIGlzIHNpdHRpbmcgaW4gdGhlIFRDUCB0cmFuc21pdCBxdWV1ZSBvbiBzb2NrZXRcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuJiM0MztcdHJldCA9IG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtmYWlsZWQgdG8gc2V0IFNPX0xJTkdFUiBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHFpZCwgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3NvY2s7XG4mIzQzO1x0fVxuIFxuLVx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4mIzQzO1x0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcdFwmIzM0O2ZhaWxlZCB0byBzZXQgU09fUFJJT1JJVFkgb24gcXVldWUgJWQgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHFpZCwgcmV0KTtcbiYjNDM7XHRcdFx0Z290byBlcnJfc29jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHQvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqL1xuLVx0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zIFx1MDAzZT0gMClcbi1cdFx0aXBfc29ja19zZXRfdG9zKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zKTtcbiYjNDM7XHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0XHRcJiMzNDtmYWlsZWQgdG8gc2V0IElQX1RPUyBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cWlkLCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIGVycl9zb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIHNldCBJUFY2X1RDTEFTUyBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cWlkLCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIGVycl9zb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdC8qIFNldCAxMCBzZWNvbmRzIHRpbWVvdXQgZm9yIGljcmVzcCByZWN2bXNnICovXG4gXHRxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3JjdnRpbWVvID0gMTAgKiBIWjtcbkBAIC0xODY0LDEwICYjNDM7MTk1Nyw4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4gXG4gXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2VtYXNrIFx1MDAyNiBOVk1GX09QVF9IT1NUX0lGQUNFKSB7XG4gXHRcdGNoYXIgKmlmYWNlID0gbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2Vob3N0X2lmYWNlO1xuLVx0XHRzb2NrcHRyX3Qgb3B0dmFsID0gS0VSTkVMX1NPQ0tQVFIoaWZhY2UpO1xuIFxuLVx0XHRyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtXHUwMDNlc29jaywgU09MX1NPQ0tFVCwgU09fQklORFRPREVWSUNFLFxuLVx0XHRcdFx0ICAgICAgb3B0dmFsLCBzdHJsZW4oaWZhY2UpKTtcbiYjNDM7XHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBpZmFjZSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiBcdFx0XHQgIFwmIzM0O2ZhaWxlZCB0byBiaW5kIHRvIGludGVyZmFjZSAlcyBxdWV1ZSAlZCBlcnIgJWRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbmluZGV4IDc1YTI3NmQ3M2JlM2UuLmVkNDEzYWE1NjAxYzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG5AQCAtMTY5NiwxMCAmIzQzOzE2OTYsNjYgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLFxuJiM0MztcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbiYjNDM7XHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRpbnQgdmFsID0gU0tfQ0FOX1JFVVNFO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXG4mIzQzO1x0XHRcdFx0ICBTT19SRVVTRUFERFIsIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksXG4mIzQzO1x0XHRcdFx0ICBzaXplb2YodmFsKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbCA9IDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG4mIzQzO1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRpbnQgdG9zID0gaW5ldF9zayhzayktXHUwMDNlcmN2X3RvcztcbiYjNDM7XG4mIzQzO1x0aWYgKHRvcyBcdTAwM2UgMClcbiYjNDM7XHRcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4mIzQzO1x0XHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRpbnQgdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktXHUwMDNlcmN2X2Zsb3dpbmZvKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGNsYXNzIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsXG4mIzQzO1x0XHRcdFx0XHRcdCAgU09MX0lQVjYsIElQVjZfVENMQVNTLFxuJiM0MztcdFx0XHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRjbGFzcyksXG4mIzQzO1x0XHRcdFx0XHRcdCAgc2l6ZW9mKHRjbGFzcykpO1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpXG4ge1xuIFx0c3RydWN0IHNvY2tldCAqc29jayA9IHF1ZXVlLVx1MDAzZXNvY2s7XG4tXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLVx1MDAzZXNrKTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBrZXJuZWxfZ2V0c29ja25hbWUoc29jayxcbkBAIC0xNzE3LDE0ICYjNDM7MTc3MywyNCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuJiM0MztcdHJldCA9IG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMClcbi1cdFx0c29ja19zZXRfcHJpb3JpdHkoc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuJiM0MztcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMCkge1xuJiM0MztcdFx0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi9cbi1cdGlmIChpbmV0LVx1MDAzZXJjdl90b3MgXHUwMDNlIDApXG4tXHRcdGlwX3NvY2tfc2V0X3Rvcyhzb2NrLVx1MDAzZXNrLCBpbmV0LVx1MDAzZXJjdl90b3MpO1xuJiM0MztcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSAwO1xuIFx0d3JpdGVfbG9ja19iaChcdTAwMjZzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xuQEAgLTIwOTgsMTAgJiM0MzsyMTY0LDI2IEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydClcbiBcdHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBwb3J0O1xuIFx0cG9ydC1cdTAwM2VkYXRhX3JlYWR5ID0gcG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2RhdGFfcmVhZHk7XG4gXHRwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfZGF0YV9yZWFkeSA9IG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeTtcbi1cdHNvY2tfc2V0X3JldXNlYWRkcihwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuLVx0dGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbi1cdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMClcbi1cdFx0c29ja19zZXRfcHJpb3JpdHkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4mIzQzO1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gc2V0IFNPX1JFVVNFQUREUiBvbiBwb3J0IHNvY2tldCAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3NvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gc2V0IFRDUF9OT0RFTEFZIG9uIHBvcnQgc29ja2V0ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfc29jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMCkge1xuJiM0MztcdFx0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIHNldCBTT19QUklPUklUWSBvbiBwb3J0IHNvY2tldCAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHJldCk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3NvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0ga2VybmVsX2JpbmQocG9ydC1cdTAwM2Vzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZwb3J0LVx1MDAzZWFkZHIsXG4gXHRcdFx0c2l6ZW9mKHBvcnQtXHUwMDNlYWRkcikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX1RDUCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudm1lX3RjcF9jcmVhdGVfY3RybCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FjY2VwdF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGRpcmVjdCBzb2NrZXQgb3B0aW9uIGFzc2lnbm1lbnRzIChlLmcuLCB0Y3Bfc29ja19zZXRfc3luY250LCBzb2NrX25vX2xpbmdlcikgd2l0aCBkb19zb2NrX3NldHNvY2tvcHQoKSBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGRvX3NvY2tfc2V0c29ja29wdCgpIGludm9rZXMgTFNNIGFuZCBCUEYgY2dyb3VwIGhvb2tzLCBhbGxvd2luZyBzZWN1cml0eSBtb2R1bGVzIGFuZCBCUEYgcHJvZ3JhbXMgdG8gaW50ZXJjZXB0LCBtb2RpZnksIG9yIGRlbnkgdGhlc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGFsc28gYWRkcyBlcnJvciBoYW5kbGluZyB0aGF0IGZhaWxzIHF1ZXVlIGFsbG9jYXRpb24gaWYgc2V0dGluZyB0aGUgb3B0aW9ucyBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIHJlYWNoYWJsZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIGluIE5WTWUgb3ZlciBUQ1AgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NTM0MGYyMzE4NmJmMzJjOTM0Yjc1YjY1ZTVkMGFmNDA0M2MwMjE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDY6MzM6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCmluZGV4IGJhNWM3YjNlMmE3YzYuLjVmMzBiZTA0YTlkZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCkBAIC0xNzc0LDYgJiM0MzsxNzc0LDU4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfdGxzKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07CiYjNDM7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO2xpbmcpLCBzaXplb2YobGluZykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwKJiM0MzsJCQkJICBTT19CSU5EVE9ERVZJQ0UsIEtFUk5FTF9TT0NLUFRSKGlmYWNlKSwKJiM0MzsJCQkJICBzdHJsZW4oaWZhY2UpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSAxOwomIzQzOwomIzQzOwlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX1NZTkNOVCwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdG9zKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt0b3MpLCBzaXplb2YodG9zKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcykKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiYjNDM7CWlmIChzay0mZ3Q7c2tfZmFtaWx5ID09IEFGX0lORVQ2KQomIzQzOwkJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsCiYjNDM7CQkJCQkgIElQVjZfVENMQVNTLCBLRVJORUxfU09DS1BUUigmYW1wO3RjbGFzcyksCiYjNDM7CQkJCQkgIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCwKIAkJCQlrZXlfc2VyaWFsX3QgcHNraWQpCiB7CkBAIC0xODE5LDI0ICYjNDM7MTg3MSw2NSBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogI2VuZGlmCiAKIAkvKiBTaW5nbGUgc3luIHJldHJ5ICovCi0JdGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIDEpOwomIzQzOwlyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtJmd0O3NvY2stJmd0O3NrLCAxKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihuY3RybC0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHRvIHNldCBUQ1BfU1lOQ05UIG9uIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJcWlkLCByZXQpOwomIzQzOwkJZ290byBlcnJfc29jazsKJiM0MzsJfQogCiAJLyogU2V0IFRDUCBubyBkZWxheSAqLwotCXRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CXJldCA9IG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihuY3RybC0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHRvIHNldCBUQ1BfTk9ERUxBWSBvbiBxdWV1ZSAlZCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCXFpZCwgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CX0KIAogCS8qCiAJICogQ2xlYW51cCB3aGF0ZXZlciBpcyBzaXR0aW5nIGluIHRoZSBUQ1AgdHJhbnNtaXQgcXVldWUgb24gc29ja2V0CiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJcmV0ID0gbnZtZV90Y3Bfc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihuY3RybC0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHRvIHNldCBTT19MSU5HRVIgb24gcXVldWUgJWQgZXJyICVkXG4mIzM0OywKJiM0MzsJCQlxaWQsIHJldCk7CiYjNDM7CQlnb3RvIGVycl9zb2NrOwomIzQzOwl9CiAKLQlpZiAoc29fcHJpb3JpdHkgJmd0OyAwKQotCQlzb2NrX3NldF9wcmlvcml0eShxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkgewomIzQzOwkJcmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkocXVldWUtJmd0O3NvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X2VycihuY3RybC0mZ3Q7ZGV2aWNlLAomIzQzOwkJCQkmIzM0O2ZhaWxlZCB0byBzZXQgU09fUFJJT1JJVFkgb24gcXVldWUgJWQgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkJcWlkLCByZXQpOwomIzQzOwkJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CQl9CiYjNDM7CX0KIAogCS8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovCi0JaWYgKG5jdHJsLSZndDtvcHRzLSZndDt0b3MgJmd0Oz0gMCkKLQkJaXBfc29ja19zZXRfdG9zKHF1ZXVlLSZndDtzb2NrLSZndDtzaywgbmN0cmwtJmd0O29wdHMtJmd0O3Rvcyk7CiYjNDM7CWlmIChuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zICZndDs9IDApIHsKJiM0MzsJCXJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkJJiMzNDtmYWlsZWQgdG8gc2V0IElQX1RPUyBvbiBxdWV1ZSAlZCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCQlxaWQsIHJldCk7CiYjNDM7CQkJZ290byBlcnJfc29jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssCiYjNDM7CQkJCQkgICAgICAgbmN0cmwtJmd0O29wdHMtJmd0O3Rvcyk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X2VycihuY3RybC0mZ3Q7ZGV2aWNlLAomIzQzOwkJCQkmIzM0O2ZhaWxlZCB0byBzZXQgSVBWNl9UQ0xBU1Mgb24gcXVldWUgJWQgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkJcWlkLCByZXQpOwomIzQzOwkJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CQl9CiYjNDM7CX0KIAogCS8qIFNldCAxMCBzZWNvbmRzIHRpbWVvdXQgZm9yIGljcmVzcCByZWN2bXNnICovCiAJcXVldWUtJmd0O3NvY2stJmd0O3NrLSZndDtza19yY3Z0aW1lbyA9IDEwICogSFo7CkBAIC0xODY0LDEwICYjNDM7MTk1Nyw4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsCiAKIAlpZiAobmN0cmwtJmd0O29wdHMtJmd0O21hc2sgJmFtcDsgTlZNRl9PUFRfSE9TVF9JRkFDRSkgewogCQljaGFyICppZmFjZSA9IG5jdHJsLSZndDtvcHRzLSZndDtob3N0X2lmYWNlOwotCQlzb2NrcHRyX3Qgb3B0dmFsID0gS0VSTkVMX1NPQ0tQVFIoaWZhY2UpOwogCi0JCXJldCA9IHNvY2tfc2V0c29ja29wdChxdWV1ZS0mZ3Q7c29jaywgU09MX1NPQ0tFVCwgU09fQklORFRPREVWSUNFLAotCQkJCSAgICAgIG9wdHZhbCwgc3RybGVuKGlmYWNlKSk7CiYjNDM7CQlyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2UocXVldWUtJmd0O3NvY2stJmd0O3NrLCBpZmFjZSk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKIAkJCSAgJiMzNDtmYWlsZWQgdG8gYmluZCB0byBpbnRlcmZhY2UgJXMgcXVldWUgJWQgZXJyICVkXG4mIzM0OywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jCmluZGV4IDc1YTI3NmQ3M2JlM2UuLmVkNDEzYWE1NjAxYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYwpAQCAtMTY5NiwxMCAmIzQzOzE2OTYsNjYgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spCiAJcmVhZF91bmxvY2tfYmgoJmFtcDtzay0mZ3Q7c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9OwomIzQzOwomIzQzOwlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtsaW5nKSwgc2l6ZW9mKGxpbmcpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpCiYjNDM7ewomIzQzOwlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3ByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gU0tfQ0FOX1JFVVNFOwomIzQzOwomIzQzOwlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULAomIzQzOwkJCQkgIFNPX1JFVVNFQUREUiwgS0VSTkVMX1NPQ0tQVFIoJmFtcDt2YWwpLAomIzQzOwkJCQkgIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt2YWwpLCBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdG9zID0gaW5ldF9zayhzayktJmd0O3Jjdl90b3M7CiYjNDM7CiYjNDM7CWlmICh0b3MgJmd0OyAwKQomIzQzOwkJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsCiYjNDM7CQkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dG9zKSwgc2l6ZW9mKHRvcykpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiYjNDM7CWlmIChzay0mZ3Q7c2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7CiYjNDM7CQlpbnQgdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktJmd0O3Jjdl9mbG93aW5mbyk7CiYjNDM7CiYjNDM7CQlpZiAodGNsYXNzICZndDsgMCkKJiM0MzsJCQlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLAomIzQzOwkJCQkJCSAgU09MX0lQVjYsIElQVjZfVENMQVNTLAomIzQzOwkJCQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt0Y2xhc3MpLAomIzQzOwkJCQkJCSAgc2l6ZW9mKHRjbGFzcykpOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS0mZ3Q7c29jazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLSZndDtzayk7CiAJaW50IHJldDsKIAogCXJldCA9IGtlcm5lbF9nZXRzb2NrbmFtZShzb2NrLApAQCAtMTcxNywxNCAmIzQzOzE3NzMsMjQgQEAgc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpCiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwomIzQzOwlyZXQgPSBudm1ldF90Y3Bfc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAotCWlmIChzb19wcmlvcml0eSAmZ3Q7IDApCi0JCXNvY2tfc2V0X3ByaW9yaXR5KHNvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiYjNDM7CWlmIChzb19wcmlvcml0eSAmZ3Q7IDApIHsKJiM0MzsJCXJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKIAkvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqLwotCWlmIChpbmV0LSZndDtyY3ZfdG9zICZndDsgMCkKLQkJaXBfc29ja19zZXRfdG9zKHNvY2stJmd0O3NrLCBpbmV0LSZndDtyY3ZfdG9zKTsKJiM0MzsJcmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3Rvcyhzb2NrLSZndDtzayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHNvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlyZXQgPSAwOwogCXdyaXRlX2xvY2tfYmgoJmFtcDtzb2NrLSZndDtzay0mZ3Q7c2tfY2FsbGJhY2tfbG9jayk7CkBAIC0yMDk4LDEwICYjNDM7MjE2NCwyNiBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpCiAJcG9ydC0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YSA9IHBvcnQ7CiAJcG9ydC0mZ3Q7ZGF0YV9yZWFkeSA9IHBvcnQtJmd0O3NvY2stJmd0O3NrLSZndDtza19kYXRhX3JlYWR5OwogCXBvcnQtJmd0O3NvY2stJmd0O3NrLSZndDtza19kYXRhX3JlYWR5ID0gbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5OwotCXNvY2tfc2V0X3JldXNlYWRkcihwb3J0LSZndDtzb2NrLSZndDtzayk7Ci0JdGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC0mZ3Q7c29jay0mZ3Q7c2spOwotCWlmIChzb19wcmlvcml0eSAmZ3Q7IDApCi0JCXNvY2tfc2V0X3ByaW9yaXR5KHBvcnQtJmd0O3NvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiYjNDM7CXJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIocG9ydC0mZ3Q7c29jay0mZ3Q7c2spOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gc2V0IFNPX1JFVVNFQUREUiBvbiBwb3J0IHNvY2tldCAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9zb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNldCBUQ1BfTk9ERUxBWSBvbiBwb3J0IHNvY2tldCAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9zb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzb19wcmlvcml0eSAmZ3Q7IDApIHsKJiM0MzsJCXJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShwb3J0LSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXByX2VycigmIzM0O2ZhaWxlZCB0byBzZXQgU09fUFJJT1JJVFkgb24gcG9ydCBzb2NrZXQgJWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgICByZXQpOwomIzQzOwkJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXJldCA9IGtlcm5lbF9iaW5kKHBvcnQtJmd0O3NvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKSZhbXA7cG9ydC0mZ3Q7YWRkciwKIAkJCXNpemVvZihwb3J0LSZndDthZGRyKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU29ja2V0IE9wdGlvbiBQYXRjaCBpbiBOVk1lL1RDUCBEcml2ZXJzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jYCBhbmQgYGRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNgLiBJdCYjMzk7cyByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHRob3NlIHN0YW5kYXJkIFRDUCBzb2NrZXQgaGVscGVycywgbGlrZSBgdGNwX3NvY2tfc2V0X3N5bmNudGAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGFuZCB0aGUgb3RoZXJzLCB3aXRoIGN1c3RvbSB3cmFwcGVycyB0aGF0IGFyZSBub3cgY2FsbGluZyBgZG9fc29ja19zZXRzb2Nrb3B0YC4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgJiMzNDtXaHk/JiMzNDsuIFdoeSB0aGUgY2hhbmdlIGluIGFwcHJvYWNoPyBMZXQmIzM5O3MgZGlnIGludG8gYHRjcF9zb2NrX3NldF9zeW5jbnRgIGl0c2VsZiBpbiB0aGUga2VybmVsIGNvZGUuCgpSaWdodCwgc28gaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjb25zb2xpZGF0aW5nIHRoZXNlIHNvY2tldCBvcHRpb24gc2V0dGluZ3MgdGhyb3VnaCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gTm93LCBpcyB0aGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlPyBJcyBpdCByZWFjaGFibGUgYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGU/IEFic29sdXRlbHkuIFRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyBhcmUgZWFzaWx5IHNwdW4gdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBTbyB0aG9zZSBjb2RlIHBhdGhzIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyAqaG93KiBzb2NrZXQgb3B0aW9ucyBhcmUgc2V0LCB3aGljaCByYWlzZXMgZmxhZ3MgZm9yIG1lLgoKTGV0IG1lIHF1aWNrbHkgc2VhcmNoIGZvciBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGFuZCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYC4gWWVwLCBjb25maXJtZWQuIFRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgTlZNZSBvdmVyIFRDUC4gQW5kIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoICppcyogYWRkaW5nIGVycm9yIGNoZWNraW5nIG5vdyAobGlrZSB0aGUgYGlmIChyZXQpIHsgZGV2X2VyciguLi4pOyBnb3RvIGVycl9zb2NrOyB9YCBibG9ja3MpLiBQcmV2aW91c2x5LCB3ZXJlIHRoZXNlIHNvY2tldCBvcHRpb24gaGVscGVycyBsaWtlIGB0Y3Bfc29ja19zZXRfc3luY250YCB2b2lkIGZ1bmN0aW9ucyBvciBkaWQgdGhlIHJldHVybiB2YWx1ZSBnZXQgaWdub3JlZD8gR290dGEgY2hlY2sgYHRjcF9zb2NrX3NldF9zeW5jbnRgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc29ja19zZXRfc3luY250JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE3OTg9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA1LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgwNjpzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xODI5PXN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTg3My1cdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4NzQ6XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODc1LVx0aWYgKHJldCkge1xuLS1cbmluY2x1ZGUvbGludXgvdGNwLmg9NjUyPXZvaWQgdGNwX3NvY2tfc2V0X3F1aWNrYWNrKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCk7XG5pbmNsdWRlL2xpbnV4L3RjcC5oOjY1MzppbnQgdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xuaW5jbHVkZS9saW51eC90Y3AuaC02NTQtaW50IHRjcF9zb2NrX3NldF91c2VyX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0zNzA5PUVYUE9SVF9TWU1CT0wodGNwX3NvY2tfc2V0X3F1aWNrYWNrKTtcbm5ldC9pcHY0L3RjcC5jLTM3MTAtXG5uZXQvaXB2NC90Y3AuYzozNzExOmludCB0Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbm5ldC9pcHY0L3RjcC5jLTM3MTIte1xuLS1cbm5ldC9pcHY0L3RjcC5jLTM3MTgtfVxubmV0L2lwdjQvdGNwLmM6MzcxOTpFWFBPUlRfU1lNQk9MKHRjcF9zb2NrX3NldF9zeW5jbnQpO1xubmV0L2lwdjQvdGNwLmMtMzcyMC1cbi0tXG5uZXQvaXB2NC90Y3AuYz0zODM3PWludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdGNwLmMtMzkxNy1cdGNhc2UgVENQX1NZTkNOVDpcbm5ldC9pcHY0L3RjcC5jOjM5MTg6XHRcdHJldHVybiB0Y3Bfc29ja19zZXRfc3luY250KHNrLCB2YWwpO1xubmV0L2lwdjQvdGNwLmMtMzkxOS1cdGNhc2UgVENQX1VTRVJfVElNRU9VVDpcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz0yNDM9c3RhdGljIGludCB0Y3Bfd3JpdGVfdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtMjUzLVx0XHRcdF9fZHN0X25lZ2F0aXZlX2FkdmljZShzayk7XG5uZXQvaXB2NC90Y3BfdGltZXIuYzoyNTQ6XHRcdC8qIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiB0Y3Bfc29ja19zZXRfc3luY250KCkgKi9cbm5ldC9pcHY0L3RjcF90aW1lci5jLTI1NS1cdFx0cmV0cnlfdW50aWwgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz00NTk9c3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00NjctXHQvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuLlxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDY4Olx0ICogUGFpcmVkIHdpdGggV1JJVEVfT05DRSgpIGluIHRjcF9zb2NrX3NldF9zeW5jbnQoKVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDY5LVx0ICovXG4tLVxubmV0L3N1bnJwYy94cHJ0c29jay5jPTIyODA9c3RhdGljIHZvaWQgeHNfdGNwX3NldF9zb2NrZXRfdGltZW91dHMoc3RydWN0IHJwY194cHJ0ICp4cHJ0LFxuLS1cbm5ldC9zdW5ycGMveHBydHNvY2suYy0yMzE2LVx0aWYgKHQgXHUwMDNjPSBzeW5fcmV0cmllcylcbm5ldC9zdW5ycGMveHBydHNvY2suYzoyMzE3Olx0XHR0Y3Bfc29ja19zZXRfc3luY250KHNvY2stXHUwMDNlc2ssIHQgLSAxKTtcbm5ldC9zdW5ycGMveHBydHNvY2suYy0yMzE4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDAzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBOVk1lIFRDUCBTb2NrZXQgT3B0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IE5WTWUgVENQIGhhbmRsZXMgc29ja2V0IG9wdGlvbnMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgc2V0dGluZyB0aGUgc3luY2hyb25pemF0aW9uIGNvdW50LiBJbnN0ZWFkIG9mIGRpcmVjdGx5IGNhbGxpbmcgYHRjcF9zb2NrX3NldF9zeW5jbnRgLCBpdCYjMzk7cyBub3cgdXNpbmcgYG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGRvX3NvY2tfc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgYSBzaGlmdDsgSSYjMzk7bSBjdXJpb3VzIHdoeS4gV2h5IHRoZSBpbmRpcmVjdGlvbj8gU29tZXRoaW5nIG11c3QgYmUgZGlmZmVyZW50LiBBaCwgSSBzZWUsIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGBzb2NrX3NldHNvY2tvcHRgIGlzIHVuZGVyZ29pbmcgc29tZSBraW5kIG9mIGNoYW5nZSBvciBpcyBiZWluZyBkZXByZWNhdGVkIGVudGlyZWx5LiBSaWdodCwgbWFrZXMgc2Vuc2UuIFRvIGJlIHN1cmUsIEkgc2hvdWxkIHJlYWxseSB2ZXJpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBzZWUgd2hhdCB0aGUgdW5kZXJseWluZyBjaGFuZ2UgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc29ja19zZXRzb2Nrb3B0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE3Nzc9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc4MC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3ODE6XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3ODItXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE3ODU9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3ODYte1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc4NzpcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzg4LVx0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE3OTE9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyICppZmFjZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTIte1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc5MzpcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTQtXHRcdFx0XHQgIFNPX0JJTkRUT0RFVklDRSwgS0VSTkVMX1NPQ0tQVFIoaWZhY2UpLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE3OTg9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODAxLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgwMjpcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODAzLVx0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTgwNj1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA3LXtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4MDg6XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA5LVx0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTgxMj1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0b3MpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODEzLXtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4MTQ6XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgxNS1cdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE4MTg9c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MjEtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgyMjpcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNixcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MjMtXHRcdFx0XHRcdCAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRjbGFzcyksXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNjk5PXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MDItXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3MDM6XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTcwNC1cdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzA3PXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzA4LXtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTcwOTpcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MTAtXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzEzPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzE2LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxNzE3Olx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzE4LVx0XHRcdFx0ICBTT19SRVVTRUFERFIsIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzIyPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTcyNS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTcyNjpcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MjctXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3MzA9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MzQtXHRpZiAodG9zIFx1MDAzZSAwKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxNzM1Olx0XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzM2LVx0XHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3NDA9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NDYtXHRcdGlmICh0Y2xhc3MgXHUwMDNlIDApXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3NDc6XHRcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzQ4LVx0XHRcdFx0XHRcdCAgU09MX0lQVjYsIElQVjZfVENMQVNTLFxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0xODg4PWludCBzb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3AsXG5pbmNsdWRlL25ldC9zb2NrLmgtMTg4OS1cdFx0ICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pO1xuaW5jbHVkZS9uZXQvc29jay5oOjE4OTA6aW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuaW5jbHVkZS9uZXQvc29jay5oLTE4OTEtXHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XG4tLVxuaW9fdXJpbmcvY21kX25ldC5jPTUyPXN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX2NtZF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxuaW9fdXJpbmcvY21kX25ldC5jLTY3LVxuaW9fdXJpbmcvY21kX25ldC5jOjY4Olx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWxfcyxcbmlvX3VyaW5nL2NtZF9uZXQuYy02OS1cdFx0XHRcdCAgb3B0bGVuKTtcbi0tXG5uZXQvc29ja2V0LmM9MjMzMD1zdGF0aWMgYm9vbCBzb2NrX3VzZV9jdXN0b21fc29sX3NvY2tldChjb25zdCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC9zb2NrZXQuYy0yMzM0LVxubmV0L3NvY2tldC5jOjIzMzU6aW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxubmV0L3NvY2tldC5jLTIzMzYtXHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbi0tXG5uZXQvc29ja2V0LmMtMjM3My19XG5uZXQvc29ja2V0LmM6MjM3NDpFWFBPUlRfU1lNQk9MKGRvX3NvY2tfc2V0c29ja29wdCk7XG5uZXQvc29ja2V0LmMtMjM3NS1cbi0tXG5uZXQvc29ja2V0LmM9MjM3OT1pbnQgX19zeXNfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICp1c2VyX29wdHZhbCxcbi0tXG5uZXQvc29ja2V0LmMtMjM5Mi1cbm5ldC9zb2NrZXQuYzoyMzkzOlx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvc29ja2V0LmMtMjM5NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOVk1lIFRDUCBQYXRjaCBSZXZpZXcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgTlZNZSBUQ1Agb3ZlciB0byB1c2luZyBgZG9fc29ja19zZXRzb2Nrb3B0YCBpbnN0ZWFkIG9mIHRoZSBtb3JlIGRpcmVjdCBoZWxwZXIgYHRjcF9zb2NrX3NldF9zeW5jbnRgLiBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgdGhpcyBjaG9pY2UuIFdoeSB0aGUgY2hhbmdlPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBtYXliZSBgdGNwX3NvY2tfc2V0X3N5bmNudGAgZG9lc24mIzM5O3QgcHJvdmlkZSBzdWZmaWNpZW50IGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIGl0IGRvZXNuJiMzOTt0IHBlcmZvcm0gdGhlIHNhbWUgY2hlY2tzIGFzIGBkb19zb2NrX3NldHNvY2tvcHRgLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgZGlyZWN0IGhlbHBlciBpcyBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbC4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBnbyBhbmQgc2VlIGhvdyBgdGNwX3NvY2tfc2V0X3N5bmNudGAgd29ya3MsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYG5ldC9pcHY0L3RjcC5jYCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgbGltaXRhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgdGNwX3NvY2tfc2V0X3N5bmNudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3RjcC5oPTY1Mj12b2lkIHRjcF9zb2NrX3NldF9xdWlja2FjayhzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xuaW5jbHVkZS9saW51eC90Y3AuaDo2NTM6aW50IHRjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcbmluY2x1ZGUvbGludXgvdGNwLmgtNjU0LWludCB0Y3Bfc29ja19zZXRfdXNlcl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCk7XG4tLVxubmV0L2lwdjQvdGNwLmM9MzcwOT1FWFBPUlRfU1lNQk9MKHRjcF9zb2NrX3NldF9xdWlja2Fjayk7XG5uZXQvaXB2NC90Y3AuYy0zNzEwLVxubmV0L2lwdjQvdGNwLmM6MzcxMTppbnQgdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG5uZXQvaXB2NC90Y3AuYy0zNzEyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA0MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgdGNwX3NvY2tfc2V0X3N5bmNudGAgaW4gYG5ldC9pcHY0L3RjcC5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYHRjcF9zb2NrX3NldF9zeW5jbnRgIGluIHRoZSBJUHY0IFRDUCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgU1lOIGZsb29kIHByb3RlY3Rpb24gYW5kIGNvbm5lY3Rpb24gcmF0ZSBsaW1pdGluZy4gSeKAmW0gYmV0dGluZyB0aGlzIGRpcmVjdGx5IGluZmx1ZW5jZXMgaG93IGFnZ3Jlc3NpdmVseSB3ZSByZXNwb25kIHRvIFNZTiBwYWNrZXRzLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgd2UmIzM5O3JlIHNldHRpbmcgb3IgY29uZmlndXJpbmcgYSBzeW5jaHJvbml6YXRpb24gY291bnQsIHdoaWNoIGxpa2VseSByZWxhdGVzIHRvIGhvdyBtYW55IG91dHN0YW5kaW5nIFNZTl9SRUNWIGNvbm5lY3Rpb25zIGFyZSBhbGxvd2VkIGJlZm9yZSB3ZSBzdGFydCBzaGVkZGluZyBpbmNvbWluZyBTWU5zLiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdmFyaWFibGVzIGludm9sdmVkLCBob3cgdGhlIGNvdW50IGlzIHVwZGF0ZWQgKGxpa2VseSBiYXNlZCBvbiBzb2NrZXQgc3RhdGUgYW5kIGV2ZW50cyksIGFuZCB3aGV0aGVyIGFueSBhZGFwdGl2ZSBtZWNoYW5pc21zIGFyZSBlbXBsb3llZC4gSSBleHBlY3QgdG8gc2VlIGNoZWNrcyBhZ2FpbnN0IGdsb2JhbCB0aHJlc2hvbGRzIG9yIHBlci1zb2NrZXQgc2V0dGluZ3MuIEtub3dpbmcgdGhpcyBnaXZlcyB0aGUgYWJpbGl0eSB0byBwcm9wZXJseSB0dW5lIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3MsIHBhcnRpY3VsYXJseSB1bmRlciBoZWF2eSBsb2FkIG9yIGluIHRoZSBwcmVzZW5jZSBvZiBtYWxpY2lvdXMgdHJhZmZpYy4gSSBhbSBsb29raW5nIGZvciB0aGUgY29uZGl0aW9uYWwgYnJhbmNoZXMsIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCAoaWYgYW55KSwgYW5kIGFueSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIGxpa2UgbWVtb3J5IG1hbmFnZW1lbnQgb3IgbmV0d29ya2luZyBkZXZpY2VzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcmV2ZWFscyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzcxMTpcdGludCB0Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbjM3MTI6XHR7XG4zNzEzOlx0XHRpZiAodmFsIFx1MDAzYyAxIHx8IHZhbCBcdTAwM2UgTUFYX1RDUF9TWU5DTlQpXG4zNzE0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzcxNTpcdFxuMzcxNjpcdFx0V1JJVEVfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19zeW5fcmV0cmllcywgdmFsKTtcbjM3MTc6XHRcdHJldHVybiAwO1xuMzcxODpcdH1cbjM3MTk6XHRFWFBPUlRfU1lNQk9MKHRjcF9zb2NrX3NldF9zeW5jbnQpO1xuMzcyMDpcdFxuMzcyMTpcdGludCB0Y3Bfc29ja19zZXRfdXNlcl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbjM3MjI6XHR7XG4zNzIzOlx0XHQvKiBDYXAgdGhlIG1heCB0aW1lIGluIG1zIFRDUCB3aWxsIHJldHJ5IG9yIHByb2JlIHRoZSB3aW5kb3dcbjM3MjQ6XHRcdCAqIGJlZm9yZSBnaXZpbmcgdXAgYW5kIGFib3J0aW5nIChFVElNRURPVVQpIGEgY29ubmVjdGlvbi5cbjM3MjU6XHRcdCAqL1xuMzcyNjpcdFx0aWYgKHZhbCBcdTAwM2MgMClcbjM3Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zNzI4Olx0XG4zNzI5Olx0XHRXUklURV9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX3VzZXJfdGltZW91dCwgdmFsKTtcbjM3MzA6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcxNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIFNvY2tldCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE5WTWUgVENQIGNvZGUsIGFuZCBzb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0IHdpdGggdGhpcyBzb2NrZXQgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIHR3byBmdW5jdGlvbiBjYWxsczogYHRjcF9zb2NrX3NldF9zeW5jbnRgIGFuZCBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLiBUaGUgZmlyc3Qgb25lLCBgdGNwX3NvY2tfc2V0X3N5bmNudGAsIHJldHVybnMgYW4gaW50ZWdlciwgcmlnaHQ/IFlldCwgdGhpcyBjb2RlIGlzIGp1c3QgYmxvd2luZyBvZmYgdGhlIHJldHVybiB2YWx1ZS4gSXMgdGhhdCBpbnRlbnRpb25hbD8gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHNvbWUga2luZCBvZiBlcnJvciBjaGVja2luZyBpZiBpdCYjMzk7cyByZXR1cm5pbmcgYSB2YWx1ZS4gSXQmIzM5O3Mgc2V0dGluZyB0aGUgU1lOIHJldHJ5IGNvdW50IHRvIDEsIHdoaWNoIG1pZ2h0IGJlIGZpbmUsIGJ1dCBpZ25vcmluZyBhIHBvdGVudGlhbCBmYWlsdXJlIHNlZW1zIHJpc2t5LgoKVGhlbiB0aGVyZSYjMzk7cyBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLiBSaWdodCwgdGhhdCYjMzk7cyBhIHZvaWQgZnVuY3Rpb24sIHNvIHRoZXJlJiMzOTtzIG5vIHJldHVybiB2YWx1ZSB0byBjaGVjay4gQXQgbGVhc3QsIHRoYXQmIzM5O3MgYXMgSSByZWNhbGwuIEl0JiMzOTtzIGFsd2F5cyBwb3NzaWJsZSBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBzbyBJIG5lZWQgdG8gZ28gbG9vayBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGNwX3NvY2tfc2V0X25vZGVsYXlgIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhIHBvdGVudGlhbCBpc3N1ZSBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgYW5kIHdoYXQgc2lkZSBlZmZlY3RzIGl0IG1pZ2h0IGhhdmUsIG9yIHdoYXQgaXQgY2FuIHJldHVybiBpbiB0ZXJtcyBvZiBpbnRlcm5hbCBzaWduYWxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgdGNwX3NvY2tfc2V0X25vZGVsYXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90Y3AuaD02NTA9dm9pZCBfX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaywgYm9vbCBvbik7XG5pbmNsdWRlL2xpbnV4L3RjcC5oOjY1MTp2b2lkIHRjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL2xpbnV4L3RjcC5oLTY1Mi12b2lkIHRjcF9zb2NrX3NldF9xdWlja2FjayhzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTM2Njg9dm9pZCBfX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaywgYm9vbCBvbilcbi0tXG5uZXQvaXB2NC90Y3AuYy0zNjc3LVxubmV0L2lwdjQvdGNwLmM6MzY3ODp2b2lkIHRjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcC5jLTM2Nzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMzNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNvY2tldCBPcHRpbWl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgb3V0IGB0Y3Bfc29ja19zZXRfbm9kZWxheShzaylgIGZvciBgZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwgS0VSTkVMX1NPQ0tQVFIoJmFtcDt2YWwpLCBzaXplb2YodmFsKSlgLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzICp3aHkqPyBXaGF0JiMzOTtzIHRoZSBkcml2aW5nIGZvcmNlIGJlaGluZCB0aGlzIGNoYW5nZT8gSXMgaXQgc2ltcGx5IGEgbWF0dGVyIG9mIGVuc3VyaW5nIHRoZSBzb2NrZXQgb3B0aW9uIGlzIHNldCB3aXRoIGFic29sdXRlIGNlcnRhaW50eSwgb3IgaXMgdGhlcmUgc29tZXRoaW5nIG1vcmUgc3VidGxlIGF0IHBsYXkgaGVyZT8KClJpZ2h0LCBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHRoZSBsYXR0ZXIuIGBkb19zb2NrX3NldHNvY2tvcHRgIHByb2JhYmx5IGhhbmRsZXMgbW9yZSB0aGFuIGp1c3QgdGhlIGRpcmVjdCBzZXR0aW5nIG9mIHRoZSBvcHRpb24uIEl0IGxpa2VseSBpbmNvcnBvcmF0ZXMgc29tZSB2aXRhbCBsb2NraW5nIG1lY2hhbmlzbXMgb3IgcGVyaGFwcyBjYWxscyBpbnRvIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgaG9va3MuIFRoYXQmIzM5O3MgdGhlIHJlYWwgcG90ZW50aWFsIHZhbHVlLWFkZCBoZXJlIOKAkyBpbnZva2luZyBCUEYgaG9va3MgaXMgYSBkZWZpbml0ZSBwb3NzaWJpbGl0eSEgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBodW5jaC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvc29ja2V0LmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbCBhbmQgc2VlIHdoYXQgaXMgYWN0dWFsbHkgZXhlY3V0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NvY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzM1Olx0aW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuMjMzNjpcdFx0XHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4yMzM3Olx0e1xuMjMzODpcdFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzO1xuMjMzOTpcdFx0Y2hhciAqa2VybmVsX29wdHZhbCA9IE5VTEw7XG4yMzQwOlx0XHRpbnQgZXJyO1xuMjM0MTpcdFxuMjM0MjpcdFx0aWYgKG9wdGxlbiBcdTAwM2MgMClcbjIzNDM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMzQ0Olx0XG4yMzQ1Olx0XHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7XG4yMzQ2Olx0XHRpZiAoZXJyKVxuMjM0NzpcdFx0XHRnb3RvIG91dF9wdXQ7XG4yMzQ4Olx0XG4yMzQ5Olx0XHRpZiAoIWNvbXBhdClcbjIzNTA6XHRcdFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIFx1MDAyNmxldmVsLCBcdTAwMjZvcHRuYW1lLFxuMjM1MTpcdFx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBcdTAwMjZvcHRsZW4sXG4yMzUyOlx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZrZXJuZWxfb3B0dmFsKTtcbjIzNTM6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yMzU0Olx0XHRcdGdvdG8gb3V0X3B1dDtcbjIzNTU6XHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbjIzNTY6XHRcdFx0ZXJyID0gMDtcbjIzNTc6XHRcdFx0Z290byBvdXRfcHV0O1xuMjM1ODpcdFx0fVxuMjM1OTpcdFxuMjM2MDpcdFx0aWYgKGtlcm5lbF9vcHR2YWwpXG4yMzYxOlx0XHRcdG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGtlcm5lbF9vcHR2YWwpO1xuMjM2MjpcdFx0b3BzID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKTtcbjIzNjM6XHRcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUIFx1MDAyNlx1MDAyNiAhc29ja191c2VfY3VzdG9tX3NvbF9zb2NrZXQoc29jaykpXG4yMzY0Olx0XHRcdGVyciA9IHNvY2tfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuMjM2NTpcdFx0ZWxzZSBpZiAodW5saWtlbHkoIW9wcy1cdTAwM2VzZXRzb2Nrb3B0KSlcbjIzNjY6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4yMzY3Olx0XHRlbHNlXG4yMzY4Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VzZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsXG4yMzY5Olx0XHRcdFx0XHRcdCAgICBvcHRsZW4pO1xuMjM3MDpcdFx0a2ZyZWUoa2VybmVsX29wdHZhbCk7XG4yMzcxOlx0b3V0X3B1dDpcbjIzNzI6XHRcdHJldHVybiBlcnI7XG4yMzczOlx0fVxuMjM3NDpcdEVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNzMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTWUgVENQIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIHNvIHRoZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmUuIEl0JiMzOTtzIGNhbGxpbmcgYHNlY3VyaXR5X3NvY2tldF9zZXRzb2Nrb3B0YCBhbmQsIGltcG9ydGFudGx5LCBgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgc2hpZnQuIE5vdywgdGhlIE5WTWUgVENQIGRyaXZlciByZXNwZWN0cyBMU01zIGFuZCBCUEYgY2dyb3VwIGhvb2tzIGZvciBzb2NrZXQgb3B0aW9ucywgbWVhbmluZyBCUEYgcHJvZ3JhbXMgY2FuIG5vdyBpbnRlcmNlcHQgYW5kICptb2RpZnkqIHRob3NlIG9wdGlvbnMsIG9yIExTTXMgY2FuIGZsYXQtb3V0IGRlbnkgdGhlbS4gVGhhdOKAmXMgYSBnYW1lIGNoYW5nZXIgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIQoKQW5kIGhlcmXigJlzIGFub3RoZXIgaW50ZXJlc3Rpbmcgd3JpbmtsZTogdGhpcyBwYXRjaCBpbmNsdWRlcyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIElmIGBkb19zb2NrX3NldHNvY2tvcHRgIGZhaWxzLCBpdCBub3cgZXJyb3JzIG91dCBhbmQgdGhlIHF1ZXVlIGFsbG9jYXRpb24gZmFpbHMuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgSSBhYnNvbHV0ZWx5IG5lZWQgdG8gZnV6eiwgZ2l2ZW4gaXRzIGludGVyYWN0aW9uIHdpdGggQlBGIGFuZCBMU01zIOKAkyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgcmlnaHQgdGhlcmUuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGU/IFllcywgTlZNZSBUQ1AgaXMgYSByZWFsIHRoaW5nLCBzbyBpdCAqaXMqIHJlYWNoYWJsZS4gVGltZSB0byBpZGVudGlmeSB0aGUgbWFpbiBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBMb29rcyBsaWtlIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAsIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBleGFtaW5lLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvY2tldCBvcHRpb24gc2V0dGluZyBvY2N1cnMuCgpCZWZvcmUgZGl2aW5nIGluLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBOVk1lIFRDUC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3IuIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfVENQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9Njc9Y29uZmlnIE5WTUVfRkNcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTgyLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo4Mzpjb25maWcgTlZNRV9UQ1BcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctODQtXHR0cmlzdGF0ZSBcJiMzNDtOVk0gRXhwcmVzcyBvdmVyIEZhYnJpY3MgVENQIGhvc3QgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy05OS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6MTAwOmNvbmZpZyBOVk1FX1RDUF9UTFNcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgVExTIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzExMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIExldCYjMzk7cyBkbyB0aGlzLiBJJiMzOTtsbCBkaXN0aWxsIHRob3NlIHRob3VnaHRzIGFuZCBwcmVzZW50IHRoZW0gYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZSwgZ2VhcmVkIHRvd2FyZHMgc29tZW9uZSB3aG8gKmdldHMqIGl0LiBIZXJlIHdlIGdvOgoKKipBbmFseXppbmcgdGhlIE9iamVjdGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvcmUgZnVuY3Rpb24gb3IgdGhlIG1haW4gb2JqZWN0IG9mIHRoZSB0YXNrIHRvIGJlIGRlZmluZWQuIEZyb20gdGhlIGluaXRpYWwgcHJvbXB0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byBnZXQgb3V0IG9mIHRoaXMgYW5kIHdoYXQgaXMgdGhlIGdvYWwuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGEgc3BlY2lmaWMgYXJlYSwgYW5kIGZvY3VzIG9uIHRoZSBwYXJhbWV0ZXJzIG9mIHRoYXQgYXJlYSwgdG8gZmluZCBhIG5pY2hlIGZvciB0aGUgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHlwZSBvZiByZXNwb25zZSBpcyBuZWVkZWQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGZhY3R1YWwgc3VtbWFyeSwgYSBudWFuY2VkIGludGVycHJldGF0aW9uLCBvciBhIGNvbXBsZXggc3ludGhlc2lzPyBUaGUgdG9uZSBhbmQgc3R5bGUgb2YgdGhlIHJlc3BvbnNlIGFyZSBqdXN0IGFzIGNydWNpYWwuIElzIHRoaXMgYW4gaW5mb3JtYWwgY2hhdCwgYSBmb3JtYWwgcmVwb3J0LCBvciBzb21ldGhpbmcgaW4gYmV0d2Vlbj8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byB0YWlsb3IgZXZlcnl0aGluZyB0byBtYXRjaCB0aGF0LiBBZnRlciBhbGwsIHRoZSBjb250ZXh0IHByb3ZpZGVkIGlzLCB3ZWxsLCBpdCBuZWVkcyBmdXJ0aGVyIGNvbnRleHQgZnJvbSB0aGUgdXNlciwgYnV0IHRoZSBnb2FsIHdpbGwgYmUgY2xlYXIuIEkgY2FuIHdvcmsgd2l0aCB0aGF0LCBob3dldmVyLCBhbmQgZXh0cmFwb2xhdGUsIGZvciBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVUX1RDUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzg4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBMaW51eCBrZXJuZWwgZXhwZXJ0OgoKKipLY29uZmlnIENoZWNrcG9pbnQ6IE5WTWUgVGFyZ2V0KioKCk9rYXksIGJlZm9yZSBkaXZpbmcgYW55IGRlZXBlciBpbnRvIHRoZSBjb2RlLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyBvYnZpb3VzIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGUgTlZNZSB0YXJnZXQgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYCBmaWxlLCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY2hlY2sgaWYgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vayBhIGNydWNpYWwgZGVwZW5kZW5jeSBvciBhbiBvdmVybG9va2VkIGZsYWcuIFBlcmhhcHMgYSBzcGVjaWZpYyBmZWF0dXJlIHJlbGF0ZWQgdG8gd2hhdCBJJiMzOTttIGxvb2tpbmcgaW50byBpcyBnYXRlZCBiZWhpbmQgYSBLY29uZmlnIG9wdGlvbiB0aGF0IGlzbiYjMzk7dCBzZXQgdGhlIHdheSBJIGV4cGVjdC4gT3IgbWF5YmUgdGhlcmUmIzM5O3MgYSBzZXR0aW5nIHRoYXQgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnN5c3RlbSBJJiMzOTttIGludGVyZXN0ZWQgaW4gYW5kIEkgZm9yZ290IHRvIGFjY291bnQgZm9yIGl0LiBUaW1lIGZvciBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgY2hhc2luZyBhIGdob3N0LiBJJiMzOTtsbCByZXZpZXcgaXQgYW5kIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGUgS2NvbmZpZyBvcHRpb25zLiBJIGRvIG5vdCB3YW50IHRvIHdhc3RlIG15IHRpbWUuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgYmFzaWMgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVk1FX1RBUkdFVF9UQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnPTc0PWNvbmZpZyBOVk1FX1RBUkdFVF9GQ0xPT1Bcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6ODc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk2LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjk3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BfVExTXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTgtXHRib29sIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgyMAoJCQkJCQkJb3V0cHV0OiA3MgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHdyaXR0ZW4gYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKk5WTWUgb3ZlciBUQ1AgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGNvbmZpZ3VyaW5nIE5WTWUgb3ZlciBUQ1AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgTlZNRV9UQ1BgIGFuZCBgTlZNRV9UQVJHRVRfVENQYC4gVGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIEkmIzM5O20gd29ya2luZyB3aXRoLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gV2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZXM/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbXVzdCBiZSBpbiBwbGFjZSBvciBlbmFibGVkIGZvciB0aGVzZSB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyByZXF1aXJlZD8gRG8gdGhleSByZWx5IG9uIGNlcnRhaW4gbmV0d29ya2luZyBwYXJhbWV0ZXJzIGJlaW5nIHNldD8gV2hhdCBhYm91dCBzZWN1cml0eSBwcm90b2NvbHMgYW5kIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgLSBob3cgZG8gdGhleSB0aWUgaW4/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIGEgc3RhYmxlIGFuZCBwZXJmb3JtYW50IE5WTWUtb0YgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODM6XHRjb25maWcgTlZNRV9UQ1BcbiAgODQ6XHRcdHRyaXN0YXRlIFwmIzM0O05WTSBFeHByZXNzIG92ZXIgRmFicmljcyBUQ1AgaG9zdCBkcml2ZXJcJiMzNDtcbiAgODU6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA4NjpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICA4NzpcdFx0c2VsZWN0IENSQzMyXG4gIDg4Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICA4OTpcdFx0c2VsZWN0IE5WTUVfRkFCUklDU1xuICA5MDpcdFx0aGVscFxuICA5MTpcdFx0ICBUaGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBOVk1lIG92ZXIgRmFicmljcyBwcm90b2NvbCB1c2luZ1xuICA5MjpcdFx0ICB0aGUgVENQIHRyYW5zcG9ydC4gIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgcmVtb3RlIGJsb2NrIGRldmljZXNcbiAgOTM6XHRcdCAgZXhwb3J0ZWQgdXNpbmcgdGhlIE5WTWUgcHJvdG9jb2wgc2V0LlxuICA5NDpcdFxuICA5NTpcdFx0ICBUbyBjb25maWd1cmUgYSBOVk1lIG92ZXIgRmFicmljcyBjb250cm9sbGVyIHVzZSB0aGUgbnZtZS1jbGkgdG9vbFxuICA5NjpcdFx0ICBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC1udm1lL252bWUtY2xpLlxuICA5NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODc6XHRjb25maWcgTlZNRV9UQVJHRVRfVENQXG4gIDg4Olx0XHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiAgODk6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA5MDpcdFx0ZGVwZW5kcyBvbiBOVk1FX1RBUkdFVFxuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBUaGlzIGVuYWJsZXMgdGhlIE5WTWUgVENQIHRhcmdldCBzdXBwb3J0LCB3aGljaCBhbGxvd3MgZXhwb3J0aW5nIE5WTWVcbiAgOTM6XHRcdCAgZGV2aWNlcyBvdmVyIFRDUC5cbiAgOTQ6XHRcbiAgOTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgOTY6XHRcbiAgOTc6XHRjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xuICA5ODpcdFx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcJiMzNDtcbiAgOTk6XHRcdGRlcGVuZHMgb24gTlZNRV9UQVJHRVRfVENQXG4gMTAwOlx0XHRzZWxlY3QgTkVUX0hBTkRTSEFLRVxuIDEwMTpcdFx0c2VsZWN0IFRMU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUwMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBzdW1tYXJpemVkIGFzIGEgdGhvdWdodCBwcm9jZXNzOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBOVk1FX1RDUGAgaGFzIGEgYml0IG9mIGEgY2hhaW4gZ29pbmcgb24uIEl0JiMzOTtzIGJ1aWx0IG9uIHRvcCBvZiBib3RoIGBJTkVUYCBhbmQgYEJMT0NLYC4gVGhhdCBtYWtlcyBzZW5zZTsgeW91IG5lZWQgdGhlIG5ldHdvcmsgZm9yIFRDUCBhbmQgdGhlIGJsb2NrIGRldmljZSBsYXllciBmb3IgdGhlIE5WTWUgZGF0YS4gTm93LCBgTlZNRV9UQVJHRVRfVENQYCBtaXJyb3JzIHRoYXQsIHJlbHlpbmcgb24gYElORVRgIGFnYWluIChmb3IgdGhlIFRDUCBwYXJ0KSBhbmQgYE5WTUVfVEFSR0VUYCBmb3IgdGhlIE5WTWUgdGFyZ2V0IGZ1bmN0aW9uYWxpdHkuIFNpbmNlIGBOVk1FX1RBUkdFVF9UQ1BgIGRpcmVjdGx5IGRlcGVuZHMgb24gYE5WTUVfVEFSR0VUYCwgd2hpY2ggaXMgYWxzbyBhIGRlcGVuZGVuY3kgb2YgYE5WTUVfVENQYCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBOVk1FX1RBUkdFVGAgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9UQVJHRVQkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0yLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjM6Y29uZmlnIE5WTUVfVEFSR0VUXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgVGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgTlZNZSBUYXJnZXQgRHJpdmVycyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGFyb3VuZCBsaW5lIDMsIHNpbmNlIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWNsYXJlZCwgb3IgYXQgbGVhc3Qgd2hlcmUgdGhlIGluaXRpYWwgb3ZlcnZpZXcgb2YgdGhlIG1vZHVsZSBpcyBwcmVzZW50ZWQuIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzIGZvciBOVk1lIHRhcmdldCBkcml2ZXIgY29uZmlndXJhdGlvbnMuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbW9kdWxlcyBhcmUgZW5hYmxlZCwgYW55IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGtub2JzIGF2YWlsYWJsZSB0byB0YWlsb3IgdGhpcyBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRjb25maWcgTlZNRV9UQVJHRVRcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O05WTWUgVGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDY6XHRcdHNlbGVjdCBDT05GSUdGU19GU1xuICAgNzpcdFx0c2VsZWN0IE5WTUVfS0VZUklORyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXG4gICA4Olx0XHRzZWxlY3QgS0VZUyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXG4gICA5Olx0XHRzZWxlY3QgU0dMX0FMTE9DXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoaXMgZW5hYmxlZCB0YXJnZXQgc2lkZSBzdXBwb3J0IGZvciB0aGUgTlZNZSBwcm90b2NvbCwgdGhhdCBpc1xuICAxMjpcdFx0ICBpdCBhbGxvd3MgdGhlIExpbnV4IGtlcm5lbCB0byBpbXBsZW1lbnQgTlZNZSBzdWJzeXN0ZW1zIGFuZFxuICAxMzpcdFx0ICBjb250cm9sbGVycyBhbmQgZXhwb3J0IExpbnV4IGJsb2NrIGRldmljZXMgYXMgTlZNZSBuYW1lc3BhY2VzLlxuICAxNDpcdFx0ICBZb3UgbmVlZCB0byBzZWxlY3QgYXQgbGVhc3Qgb25lIG9mIHRoZSB0cmFuc3BvcnRzIGJlbG93IHRvIG1ha2UgdGhpc1xuICAxNTpcdFx0ICBmdW5jdGlvbmFsaXR5IHVzZWZ1bC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBOVk1lIG92ZXIgVENQKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSAqZnVuZGFtZW50YWwqIGNvbmZpZ3VyYXRpb25zIGFyZSBjbGVhcmx5IGNlbnRlcmVkIGFyb3VuZCBOVk1lIG92ZXIgVENQLiBTbywgSSBzZWUgYE5WTUVfVENQYCwgYE5WTUVfVEFSR0VUYCwgYW5kIGBOVk1FX1RBUkdFVF9UQ1BgIGFzIGJlaW5nIHRoZSBjb3JlLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBkZWZpbmluZyB0aGUgVENQLXNwZWNpZmljIE5WTWUgZW52aXJvbm1lbnQuIEhvd2V2ZXIuLi4gaGFuZyBvbiBhIHNlY29uZC4gSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZywgYXJlbiYjMzk7dCBJPyBGb3IgYSBob3N0IG1hY2hpbmUgdG8gYWN0dWFsbHkgKnV0aWxpemUqIHRoaXMgTlZNZSBvdmVyIFRDUCBzZXR1cCwgYW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JlIE5WTWUgZnJhbWV3b3JrIGlzIHByb3Blcmx5IGluc3RhbnRpYXRlZCwgSSYjMzk7bSBhbG1vc3QgY2VydGFpbiB0aGF0IGBOVk1FX0NPUkVgIGlzIGdvaW5nIHRvIGJlIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBob3N0IHNpZGUgYXMgd2VsbC4gSXQmIzM5O3MgdG9vIGZ1bmRhbWVudGFsIHRvIG1pc3MuIEkgbmVlZCB0aGF0IGJhc2UgbGF5ZXIgdXAgYW5kIHJ1bm5pbmcuIEdvb2QgdG8gY2F0Y2ggdGhhdCEgSSB3aWxsIGFsc28gZW5zdXJlIHRoaXMgd2lsbCBub3QgY29uZmxpY3Qgd2l0aCB0aGUgZXhpc3Rpbmcgc2V0dXAsIGFuZCB0aGF0IEkgZGlkIG5vdCBuZWVkIHRvIGFkZCBhZGRpdGlvbmFsIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9DT1JFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6Mjpjb25maWcgTlZNRV9DT1JFXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU4OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipOVk1lIFRDUCBhbmQgQ29yZSBNb2R1bGUgRGVwZW5kZW5jeSBDaGVjayoqCgpPa2F5LCBzbyBgTlZNRV9UQ1BgIGhhcyBiZWVuIGNob3Nlbi4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGF0IGltcGxpZXMgdGhlIHNlbGVjdGlvbiBvZiBgTlZNRV9DT1JFYCBhcyB3ZWxsLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGVwZW5kZW5jeTsgaWYgVENQIGlzIGFjdGl2ZSwgd2UgYWJzb2x1dGVseSBuZWVkIHRoZSBjb3JlIE5WTWUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBhbmQgbWFrZSBzdXJlIHRoYXQgcmVsYXRpb25zaGlwIGlzIGJlaW5nIHByb3Blcmx5IGVuZm9yY2VkLCBhbmQgaWYgbm90LCB3aHkgbm90LiBUaGVyZSBtYXkgYmUgY29uZmlndXJhdGlvbiBmbGFncyB0byByZXZpZXcuIElmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIGhlcmUsIGl0IHdpbGwgYmUgYSBtYWpvciBibG9ja2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTlZNRV9DT1JFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NT1jb25maWcgQkxLX0RFVl9OVk1FXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IEJMT0NLXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjg6XHRzZWxlY3QgTlZNRV9DT1JFXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTktXHRoZWxwXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz00Nz1jb25maWcgTlZNRV9GQUJSSUNTXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjQ4Olx0c2VsZWN0IE5WTUVfQ09SRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00OS1cdHNlbGVjdCBOVk1FX0tFWVJJTkcgaWYgTlZNRV9UQ1BfVExTXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0xMjU9Y29uZmlnIE5WTUVfQVBQTEVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEyOS1cdGRlcGVuZHMgb24gQVJDSF9BUFBMRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6MTMwOlx0c2VsZWN0IE5WTUVfQ09SRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xMzEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDE1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5WTWUvVENQIENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGl0LiBgTlZNRV9UQ1BgICpkZWZpbml0ZWx5KiBwdWxscyBpbiBgTlZNRV9GQUJSSUNTYCwgd2hpY2ggdGhlbiBicmluZ3MgaW4gYE5WTUVfQ09SRWAuIFRoYXQgbWFrZXMgc2Vuc2UgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKUmlnaHQsIHNvIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBJJiMzOTttIGRlYWxpbmcgd2l0aCBgTlZNRV9UQ1BgLCBgTlZNRV9UQVJHRVRgLCBhbmQgYE5WTUVfVEFSR0VUX1RDUGAuIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24uIEkmIzM5O20gdGhpbmtpbmc6IGBudm1lX3RjcF9hbGxvY19xdWV1ZWAsIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIHRoaXMgVENQIGltcGxlbWVudGF0aW9uLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhvc2UgZnVuY3Rpb25zIHN0YXRpYz8gSSYjMzk7dmUgZ290IHRvIGRvdWJsZS1jaGVjayB0aGF0LiBXYWl0IGEgbWludXRlLi4uIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhciBvbiB0aGlzOiB0aGV5JiMzOTtyZSBwdXNoaW5nIG1lIHRvd2FyZHMgKm5vbi1zdGF0aWMqLCAqbm9uLWlubGluZWQqIGZ1bmN0aW9ucyBhcyBwcmVmZXJyZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCBnaXZlcyB0aGVtIGRpc3RpbmN0IHN5bWJvbHMsIHdoaWNoIGlzIG11Y2ggYmV0dGVyLiBPa2F5LCBzbyBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGlzICpzdGF0aWMqLiBIbW0uIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxlcnMgdG8gZGV0ZXJtaW5lIGl0IGlzIHRoZSBwcmVmZXJyZWQgY2hvaWNlLCBwZXIgdGhlIGRvY3VtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgaXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV90Y3BfYWxsb2NfcXVldWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTgxOD1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyOC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4Mjk6c3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MzAtXHRcdFx0XHRrZXlfc2VyaWFsX3QgcHNraWQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjE3OT1zdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE5Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxOTg6XHRyZXQgPSBudm1lX3RjcF9hbGxvY19xdWV1ZShjdHJsLCAwLCBwc2tpZCk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTk5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yMjEzPXN0YXRpYyBpbnQgX19udm1lX3RjcF9hbGxvY19pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjM4LVx0Zm9yIChpID0gMTsgaSBcdTAwM2MgY3RybC1cdTAwM2VxdWV1ZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIyMzk6XHRcdHJldCA9IG52bWVfdGNwX2FsbG9jX3F1ZXVlKGN0cmwsIGksXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjQwLVx0XHRcdFx0Y3RybC1cdTAwM2V0bHNfcHNraWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg5OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkZpbmRpbmcgTlZNZS1vRiBRdWV1ZSBBbGxvY2F0aW9uIENhbGxlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgYF9fbnZtZV90Y3BfYWxsb2NfaW9fcXVldWVzYCBhcmUgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgTlZNZS1vRiBzdGFjay4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgcXVldWUgc2V0dXAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQuIEkgc3VzcGVjdCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgaW4gdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgcG90ZW50aWFsbHkgd2l0aGluIGNvbm5lY3Rpb24gb3IgdHJhbnNwb3J0IGxheWVyIHNldHVwIGZ1bmN0aW9ucy4gVGhlIHVuZGVyc2NvcmUgcHJlZml4IG9uIGBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2Agc3Ryb25nbHkgc3VnZ2VzdHMgaXQmIzM5O3MgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIHByb2JhYmx5IGNhbGxlZCBieSBzb21ldGhpbmcgaGlnaGVyIHVwLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBpZGVudGlmeSAqYWxsKiBjYWxsIHNpdGVzLCBhcyB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBwYXRocyBkZXBlbmRpbmcgb24gaG93IHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCBvciBob3cgZXJyb3JzIGFyZSBoYW5kbGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbGNoYWluLCBsaWtlbHkgZ3JlcCBvciBhIG1vcmUgc29waGlzdGljYXRlZCBjb2RlIGJyb3dzZXIsIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlbiBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCByYXRpb25hbGUgYmVoaW5kIGVhY2ggY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleS4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHBhc3NlZCBpbj8gV2hhdCBhcmUgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzPyBXaGF0IGFyZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZD8gVGhlc2UgYXJlIGFsbCBpbXBvcnRhbnQgZGV0YWlscyBmb3IgdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yMTYwPXN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE3OC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxNzk6c3RhdGljIGludCBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE4MC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjM0OD1zdGF0aWMgaW50IG52bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzUxLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM1MjpcdGVycm9yID0gbnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWUoY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzUzLVx0aWYgKGVycm9yKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTI0MzM9c3RhdGljIHZvaWQgbnZtZV90Y3BfcmVjb25uZWN0X29yX3JlbW92ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0NjYtICpcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0Njc6ICogV2UgY2Fubm90IGFsd2F5cyByZXZva2UgdGhlIGtleSBhcyBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZSgpIGlzIGNhbGxlZFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ2OC0gKiB0d2ljZSBkdXJpbmcgc2VjdXJlIGNvbmNhdGVuYXRpb24sIG9uY2Ugb24gYSAmIzM5O25vcm1hbCYjMzk7IGNvbm5lY3Rpb24gdG8gcnVuIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgbnZtZV90Y3BfY29uZmlndXJlX2FkbWluX3F1ZXVlIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBudm1lX3RjcF9jb25maWd1cmVfYWRtaW5fcXVldWVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIGN1cmlvdXMuIFN0YXRpYyBmdW5jdGlvbnMsIGJ5IGRlZmluaXRpb24sIGhhdmUgbGltaXRlZCBzY29wZSwgd2hpY2ggdXN1YWxseSBoaW50cyBhdCB0aGVpciBiZWluZyBjcml0aWNhbCBmb3IgYSBzcGVjaWZpYywgZm9jdXNlZCBwYXJ0IG9mIHRoZSBkcml2ZXIuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB1bmRlcnN0YW5kaW5nIGl0cyBjYWxsIGNoYWluIHdpbGwgaWxsdW1pbmF0ZSBpdHMgcm9sZSB3aXRoaW4gdGhlIE5WTWUtb0YgVENQIGRyaXZlci4gS25vd2luZyBpdHMgY2FsbGVyIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdXNpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yMjc5PXN0YXRpYyBpbnQgbnZtZV90Y3BfY29uZmlndXJlX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzQ3LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM0ODpzdGF0aWMgaW50IG52bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzNDkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTI0Nzc9c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0ODEtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDgyOlx0cmV0ID0gbnZtZV90Y3BfY29uZmlndXJlX2FkbWluX3F1ZXVlKGN0cmwsIG5ldyk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDgzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDkwLVx0XHRudm1lX3RjcF90ZWFyZG93bl9hZG1pbl9xdWV1ZShjdHJsLCBmYWxzZSk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDkxOlx0XHRyZXQgPSBudm1lX3RjcF9jb25maWd1cmVfYWRtaW5fcXVldWUoY3RybCwgZmFsc2UpO1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ5Mi1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNDAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIE5WTWUtb0YgQ29udHJvbCBQYXRoIFNldHVwKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiB3aXRoaW4gdGhlIE5WTWUgb3ZlciBUQ1Agc3RhY2suIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBwZXJmb3JtaW5nIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBOVk1lIGNvbnRyb2xsZXIsIG9yICYjMzQ7Y3RybCYjMzQ7IGFzIGl0JiMzOTtzIHJlZmVycmVkIHRvIGhlcmUsIHdpdGhpbiB0aGUgVENQIHRyYW5zcG9ydCBsYXllci4gVGhlIGltcG9ydGFudCBwaWVjZSBoZXJlIGlzIHRoYXQgaXQgaXMgY2FsbGVkIGJ5IGBudm1lX3RjcF9jcmVhdGVfY3RybGAuIFRodXMsIGl0IGlzIGNhbGxlZCB3aGVuIHRoZSBjb250cm9sbGVyIGlzIGJlaW5nIGluaXRpYWxpemVkLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaXMgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGluc3RhbnRpYXRlcyB0aGUgY29udHJvbGxlciBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB0aGVuICppbW1lZGlhdGVseSogbmVlZHMgdG8gY2FsbCBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgdG8gZ2V0IGV2ZXJ5dGhpbmcgcHJvcGVybHkgY29uZmlndXJlZCBhbmQgcmVhZHkgdG8gaGFuZGxlIGNvbW1hbmRzLiBJJiMzOTtkIGV4cGVjdCBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgdG8gaGFuZGxlIHRhc2tzIGxpa2Ugc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGNvbm5lY3Rpb24sIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCByZWdpc3RlcmluZyB0aGUgY29udHJvbGxlciwgYW5kIGdldHRpbmcgdGhlIGNvbnRyb2xsZXIgcmVhZHkgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV90Y3Bfc2V0dXBfY3RybCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNDcyPXN0YXRpYyBib29sIG52bWVfdGNwX2tleV9yZXZva2VfbmVlZGVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ3Ni1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0Nzc6c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ3OC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjU2MD1zdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNvbm5lY3RfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTY4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjU2OTpcdHJldCA9IG52bWVfdGNwX3NldHVwX2N0cmwoY3RybCwgZmFsc2UpO1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU3MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjYzMD1zdGF0aWMgdm9pZCBudm1lX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY0OS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2NTA6XHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2NTEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTMwODU9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKm52bWVfdGNwX2NyZWF0ZV9jdHJsKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTA0LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzEwNTpcdHJldCA9IG52bWVfdGNwX3NldHVwX2N0cmwoXHUwMDI2Y3RybC1cdTAwM2VjdHJsLCB0cnVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMxMDYtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkwNQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgTlZNZS1vRiBDb250cm9sbGVyIENyZWF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBvZmYgdGhlIHdob2xlIGNvbnRyb2xsZXIgY3JlYXRpb24gcHJvY2VzcyBpbiB0aGUgTlZNZS1vRiBUQ1Agc3RhY2suIE15IGltbWVkaWF0ZSBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIGNvbnRyb2xsZXIgZ2V0cyBpdHMgbmV0d29yayBpbnRlcmZhY2Ugc2V0IHVwLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBmdW5jdGlvbnMgY2FsbCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBzb2NrZXQgYXNzb2NpYXRpb24gaGFwcGVucywgYmVjYXVzZSB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgaG93IHRoZSBjb250cm9sbGVyIHRhbGtzIG92ZXIgVENQLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGl0OyB0aGF0IHNob3VsZCBnaXZlIGEgbXVjaCBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgc2V0dXAgbG9naWMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWV0X3RjcF9zZXRfcXVldWVfc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3NDA9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NTUtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3NTY6c3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NTcte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MTg5MD1zdGF0aWMgdm9pZCBudm1ldF90Y3BfdGxzX2hhbmRzaGFrZV9kb25lKHZvaWQgKmRhdGEsIGludCBzdGF0dXMsXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xOTE0LVx0aWYgKCFzdGF0dXMpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE5MTU6XHRcdHN0YXR1cyA9IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhxdWV1ZSk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5MTYtXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xOTc3PXN0YXRpYyB2b2lkIG52bWV0X3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZXRfdGNwX3BvcnQgKnBvcnQsXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDU0LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMDU1Olx0cmV0ID0gbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHF1ZXVlKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjA1Ni1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDY5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIE5WTWUtb0YgVENQIGltcGxlbWVudGF0aW9uOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBRdWV1ZSBBbGxvY2F0aW9uIGluIHRoZSBOVk1lLW9GIFRDUCBTdGFjayoqCgpBbHJpZ2h0LCBzbyBoZXJlJiMzOTtzIHRoZSBkZWFsLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGZsb3cgaGVyZSwgYW5kIG15IGJyYWluIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAgYW5kIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXI6IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgICpjYWxscyogYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAuIFRoYXQgbWVhbnMgdGhlIGBhY2NlcHRfd29ya2AgZnVuY3Rpb24sIHdoaWNoIGlzIGhhbmRsaW5nIG5ldyBjb25uZWN0aW9uIGFjY2VwdGFuY2VzIG9uIHRoZSBUQ1Agc2lkZSwgaXMgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgbmV3IEkvTyBxdWV1ZXMuIFRoaXMgaXMgaG93IHRoZSBzeXN0ZW0gc2V0cyB1cCB0aGUgcmVzb3VyY2VzIGl0IG5lZWRzIHRvIGhhbmRsZSB0aGUgSS9PIGZvciBlYWNoIGluY29taW5nIE5WTWUtb0YgY29ubmVjdGlvbi4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIGEgbmV3IGNsaWVudCBpcyBnb2luZyB0byBzdGFydCB0YWxraW5nIHRvIHRoZSB0YXJnZXQuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFuZCBpdCBwb2ludHMgdG8gYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSDigJMgYW55IGJvdHRsZW5lY2sgdGhlcmUgd2lsbCBiZSBmZWx0IGFjcm9zcyBhbGwgY29ubmVjdGlvbiBhY2NlcHRhbmNlcy4gTWFrZXMgc2Vuc2UgdGhhdCB0aGlzIHdvdWxkIGJlIGEgZm9jdXMgZm9yIG9wdGltaXphdGlvbiBvciBzY3J1dGlueSBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyB3aXRoIGNvbm5lY3Rpb24gcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWV0X3RjcF9hbGxvY19xdWV1ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE5NzQ9c3RhdGljIHZvaWQgbnZtZXRfdGNwX3Rsc19oYW5kc2hha2VfdGltZW91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpIHt9XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xOTc2LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxOTc3OnN0YXRpYyB2b2lkIG52bWV0X3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZXRfdGNwX3BvcnQgKnBvcnQsXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5NzgtXHRcdHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0yMDg2PXN0YXRpYyB2b2lkIG52bWV0X3RjcF9hY2NlcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDk5LVx0XHR9XG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMDA6XHRcdG52bWV0X3RjcF9hbGxvY19xdWV1ZShwb3J0LCBuZXdzb2NrKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEwMS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBOVk1lLW9GIFRDUCBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYC4gSXQmIzM5O3MgY2xlYXJseSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIE5WTWUgb3ZlciBUQ1AgaW1wbGVtZW50YXRpb24sIGFuZCBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIG9wZXJhdGluZyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyB3b3JrcXVldWUgc3lzdGVtLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGhhbmRsaW5nIGFzeW5jaHJvbm91cyB0YXNrcywgbGlrZWx5IHJlbGF0ZWQgdG8gYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9ucy4gVGhhdCYjMzk7cyBhIHNvbGlkIHBpZWNlIG9mIGNvbnRleHQuIE5vdywgd2hhdCYjMzk7cyBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHBpY3R1cmU/IEkgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBsaWZlY3ljbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gcGxhY2UgaXQgaW4gdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnMgYSBOSUMgbXVzdCBwZXJmb3JtIHRvIGFjY2VwdCBhIGNvbm5lY3Rpb24uCgpBbmQgdGhhdCBicmluZ3MgYW5vdGhlciB0aG91Z2h0LiBXaGF0IGFib3V0IGBudm1ldF90Y3BfYWRkX3BvcnRgPyBJIGJldCB0aGF0IGZ1bmN0aW9uIGxpa2VseSBkb2VzIHNvbWUgaW5pdGlhbCBzZXR1cCByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIHBvcnQgYW5kIHByb2JhYmx5IHNldHMgdXAgdGhlIGZyYW1ld29yayBmb3IgYWNjZXB0aW5nIGNvbm5lY3Rpb25zLCBzbyBJIHNob3VsZCBzZWUgaG93IHRoaXMgZnVuY3Rpb24gYW5kIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRyb2wgZmxvdyB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCB3aGV0aGVyIHRoZXkmIzM5O3JlIGludm9rZWQgZGlyZWN0bHksIG9yIGJ5IHNvbWUgb3RoZXIgc3lzdGVtIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWV0X3RjcF9hZGRfcG9ydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIxMDQ9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMTktXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMjA6c3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMTIxLXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIzMTM9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyBudm1ldF90Y3Bfb3BzID0ge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjMxNi1cdC5tc2RiZFx0XHRcdD0gMSxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjMxNzpcdC5hZGRfcG9ydFx0XHQ9IG52bWV0X3RjcF9hZGRfcG9ydCxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjMxOC1cdC5yZW1vdmVfcG9ydFx0XHQ9IG52bWV0X3RjcF9yZW1vdmVfcG9ydCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NTIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBOVk1lLW9GL1RDUCBQb3J0IEFkZGl0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIE5WTWUtb0YvVENQIGZhYnJpYyBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgcG9ydCBhZGRpdGlvbiBwcm9jZXNzLiBUaGUgYG52bWV0X3RjcF9hZGRfcG9ydGAgZnVuY3Rpb24gaW1tZWRpYXRlbHkgc3RhbmRzIG91dCBhcyB0aGUgY29yZSBjYWxsYmFjayB3aXRoaW4gYG52bWV0X2ZhYnJpY3Nfb3BzYC4gVGhhdCBtZWFucyBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNvbnRyb2wgYW5kIHF1ZXVlIGNyZWF0aW9uLgoKU28sIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAuIEJ1dCBob2xkIG9uLi4uIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgIGlzICpzdGF0aWMqPyBIbW1tLCB0aGF0JiMzOTtzIGEgYml0IHVudXN1YWwgZm9yIGEga2V5IGZ1bmN0aW9uIGxpa2UgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkLiBJcyB0aGVyZSBzb21lIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgdGhhdCBjYWxscyBpdD8gQW5kIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGlzIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgc3RhdGljIHRvbz8gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhhdCBjb3VsZCBjaGFuZ2UgZXZlcnl0aGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV90Y3BfY3JlYXRlX2N0cmwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MzAwMz1zdGF0aWMgc3RydWN0IG52bWVfdGNwX2N0cmwgKm52bWVfdGNwX2FsbG9jX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwODQtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMDg1OnN0YXRpYyBzdHJ1Y3QgbnZtZV9jdHJsICpudm1lX3RjcF9jcmVhdGVfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDg2LVx0XHRzdHJ1Y3QgbnZtZl9jdHJsX29wdGlvbnMgKm9wdHMpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MzEyNz1zdGF0aWMgc3RydWN0IG52bWZfdHJhbnNwb3J0X29wcyBudm1lX3RjcF90cmFuc3BvcnQgPSB7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzEzNi1cdFx0XHQgIE5WTUZfT1BUX0tFWVJJTkcgfCBOVk1GX09QVF9UTFNfS0VZIHwgTlZNRl9PUFRfQ09OQ0FULFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzEzNzpcdC5jcmVhdGVfY3RybFx0PSBudm1lX3RjcF9jcmVhdGVfY3RybCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMxMzgtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExODAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE5WTWUtb0YgVHJhbnNwb3J0IE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIE5WTWUtb0YgZmFicmljIG9wZXJhdGlvbnMgYXJlIHN0cnVjdHVyZWQuIEl0JiMzOTtzIGJlY29taW5nIGNsZWFyIHRoYXQgdGhlc2UgY2FsbGJhY2sgZnVuY3Rpb25zIGFyZSBhbGwgc3RhdGljYWxseSByZWdpc3RlcmVkIHdpdGhpbiBgbnZtZl90cmFuc3BvcnRfb3BzYCBhbmQgYG52bWV0X2ZhYnJpY3Nfb3BzYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAgYXMgZXhhbXBsZXMgZnJvbSB0aGUgVENQIHRyYW5zcG9ydC4gSG1tLCBsZXQmIzM5O3Mgbm90IGZvcmdldCB0aGF0IGBudm1lX3RjcF9zZXR1cF9jdHJsYCBpcyBhbHNvIHN0YXRpYy4gR2l2ZW4gdGhpcyBzdGF0aWMgcmVnaXN0cmF0aW9uIHBhdHRlcm4sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55ICpub24qLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgYXJlYS4gSXQgd2lsbCBiZSBtdWNoIG1vcmUgaW50ZXJlc3RpbmcgaWYgSSBkaXNjb3ZlciBhbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbnZtZV90Y3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ2MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTlZNZS9UQ1AgU3ltYm9sIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBoaXRzIG1lIGlzIHRoZSBjb21wbGV0ZSBhYnNlbmNlIG9mIGFueSBleHBvcnRlZCBzeW1ib2xzIHNwZWNpZmljYWxseSBmb3IgTlZNZS9UQ1AuIFRoYXQmIzM5O3MuLi4gaW50ZXJlc3RpbmcuIFVzdWFsbHksIHlvdSYjMzk7ZCBleHBlY3QgYXQgbGVhc3QgKnNvbWUqIGVudHJ5IHBvaW50cywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgcHVibGljbHkgYWNjZXNzaWJsZSBpbnRlcmZhY2UuIFRoZSBsYWNrIG9mIHRoZW0gc3VnZ2VzdHMgYSBmZXcgcG9zc2liaWxpdGllcywgZWFjaCB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIENvdWxkIHRoaXMgbWVhbiBpdCYjMzk7cyBlbnRpcmVseSBrZXJuZWwtaW50ZXJuYWwsIG9yIGhlYXZpbHkgcmVsaWFudCBvbiBhIHNwZWNpZmljIGRyaXZlciBpbmZyYXN0cnVjdHVyZT8gSXMgdGhpcyBhbiBpbnRlbnRpb25hbCBkZXNpZ24gY2hvaWNlIHRvIG1haW50YWluIGEgdGlnaHQgY29udHJvbCBwbGFuZT8gSXQmIzM5O3MgZGVmaW5pdGVseSBhIHJlZCBmbGFnIGZvciBhbnkgc3RyYWlnaHRmb3J3YXJkIGludGVncmF0aW9uIHNjZW5hcmlvLgoKVGhlbiwgdGhlIG1pbmQgbmF0dXJhbGx5IHdhbmRlcnMgdG8gbm9uLXN0YXRpYyBmdW5jdGlvbnMuIE1heWJlIHRoZSBrZXkgZnVuY3Rpb25zICphcmVuJiMzOTt0KiBzdGF0aWMuIFRoYXQmIzM5O3MgdGhlIG90aGVyIGFuZ2xlIHRvIGNvbnNpZGVyLiBJZiB0aGUgY3JpdGljYWwgY29kZSBpc24mIzM5O3QgZGVjbGFyZWQgYHN0YXRpY2AsIGl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGZvciBsaW5raW5nIG9yIGFjY2VzcywgYWx0aG91Z2ggaXQgc3RpbGwgZG9lc27igJl0IHNvbHZlIHRoZSBvcmlnaW5hbCBwcm9ibGVtIG9mIG5vdCBoYXZpbmcgYSBjbGVhciwgb2J2aW91cyBBUEkuIFRoaXMgc2hpZnRzIHRoZSBmb2N1cyBmcm9tIGxvb2tpbmcgZm9yIGEgZGlyZWN0IGludGVyZmFjZSB0byBwb3RlbnRpYWxseSByZXZlcnNlIGVuZ2luZWVyaW5nIGludGVybmFsIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zIHdpdGhpbiB0aGUgdGFyZ2V0IGNvZGUuIElmIEkgY2FuIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGludGVyYWN0LCBJIG1pZ2h0IGJlIGFibGUgdG8gcGllY2UgdG9nZXRoZXIgdGhlIHBpZWNlcyB3aXRob3V0IGhhdmluZyB0byBkaXJlY3RseSBpbnRlcmZhY2Ugd2l0aCBhbiBleHBvcnRlZCBBUEkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKm52bWVfdGNwXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjM4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2OnN0cnVjdCBudm1lX3RjcF9xdWV1ZTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3LVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTUzPU1PRFVMRV9QQVJNX0RFU0ModGxzX2hhbmRzaGFrZV90aW1lb3V0LFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTc6c3RhdGljIGF0b21pY190IG52bWVfdGNwX2NwdV9xdWV1ZXNbTlJfQ1BVU107XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01OC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjU5OmVudW0gbnZtZV90Y3Bfc2VuZF9zdGF0ZSB7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02MC1cdE5WTUVfVENQX1NFTkRfQ01EX1BEVSA9IDAsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjUtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo2NjpzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCB7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02Ny1cdHN0cnVjdCBudm1lX3JlcXVlc3RcdHJlcTtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy04OS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjkwOmVudW0gbnZtZV90Y3BfcXVldWVfZmxhZ3Mge1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTEtXHROVk1FX1RDUF9RX0FMTE9DQVRFRFx0PSAwLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTk2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6OTc6ZW51bSBudm1lX3RjcF9yZWN2X3N0YXRlIHtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTk4LVx0TlZNRV9UQ1BfUkVDVl9QRFUgPSAwLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwMi1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwMzpzdHJ1Y3QgbnZtZV90Y3BfY3RybDtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwNDpzdHJ1Y3QgbnZtZV90Y3BfcXVldWUge1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA1LVx0c3RydWN0IHNvY2tldFx0XHQqc29jaztcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNTEtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNTI6c3RydWN0IG52bWVfdGNwX2N0cmwge1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTUzLVx0LyogcmVhZCBvbmx5IGluIHRoZSBob3QgcGF0aCAqL1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2OS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3MDpzdGF0aWMgTElTVF9IRUFEKG52bWVfdGNwX2N0cmxfbGlzdCk7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzE6c3RhdGljIERFRklORV9NVVRFWChudm1lX3RjcF9jdHJsX211dGV4KTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3MjpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm52bWVfdGNwX3dxO1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBudm1lX3RjcF9tcV9vcHM7XG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG52bWVfdGNwX2FkbWluX21xX29wcztcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3NTpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9zZW5kKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpO1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc2LVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4My0gKi9cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4NDpzdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTg1LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDktXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTA6c3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV90Y3BfY3RybCAqdG9fdGNwX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxMS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE0LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE1OnN0YXRpYyBpbmxpbmUgaW50IG52bWVfdGNwX3F1ZXVlX2lkKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTYte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxOS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIyMDpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV90Y3BfcmVjdl9wZHVfc3VwcG9ydGVkKGVudW0gbnZtZV90Y3BfcGR1X3R5cGUgdHlwZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyMS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjM1LSAqL1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM2OnN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX3RjcF9xdWV1ZV90bHMoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzNy17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ2LSAqL1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjQ3OnN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX3RjcF90bHNfY29uZmlndXJlZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTQtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNTU6c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX3RhZ3MgKm52bWVfdGNwX3RhZ3NldChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU2LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNjQ6c3RhdGljIGlubGluZSB1OCBudm1lX3RjcF9oZGdzdF9sZW4oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2NS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY5OnN0YXRpYyBpbmxpbmUgdTggbnZtZV90Y3BfZGRnc3RfbGVuKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNzAte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3My1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI3NDpzdGF0aWMgaW5saW5lIHZvaWQgKm52bWVfdGNwX3JlcV9jbWRfcGR1KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNzUte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3OC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI3OTpzdGF0aWMgaW5saW5lIHZvaWQgKm52bWVfdGNwX3JlcV9kYXRhX3BkdShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjgwLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yODUtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyODY6c3RhdGljIGlubGluZSBzaXplX3QgbnZtZV90Y3BfaW5saW5lX2RhdGFfc2l6ZShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjg3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yOTItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyOTM6c3RhdGljIGlubGluZSBib29sIG52bWVfdGNwX2FzeW5jX3JlcShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjk0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yOTctXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyOTg6c3RhdGljIGlubGluZSBib29sIG52bWVfdGNwX2hhc19pbmxpbmVfZGF0YShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjk5LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTAtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqbnZtZV90Y3BfcmVxX2N1cl9wYWdlKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTIte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMxNS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMxNjpzdGF0aWMgaW5saW5lIHNpemVfdCBudm1lX3RjcF9yZXFfY3VyX29mZnNldChzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzE3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMjAtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMjE6c3RhdGljIGlubGluZSBzaXplX3QgbnZtZV90Y3BfcmVxX2N1cl9sZW5ndGgoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMyMi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzI2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzI3OnN0YXRpYyBpbmxpbmUgc2l6ZV90IG52bWVfdGNwX3BkdV9kYXRhX2xlZnQoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMyOC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzMyLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzMzOnN0YXRpYyBpbmxpbmUgc2l6ZV90IG52bWVfdGNwX3BkdV9sYXN0X3NlbmQoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMzNC1cdFx0aW50IGxlbilcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMzgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMzk6c3RhdGljIHZvaWQgbnZtZV90Y3BfaW5pdF9pdGVyKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zNDAtXHRcdHVuc2lnbmVkIGludCBkaXIpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzYzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzY0OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9hZHZhbmNlX3JlcShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzY1LVx0XHRpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTM3Ni1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjM3NzpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV90Y3Bfc2VuZF9hbGwoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTM3OC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzg2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6Mzg3OnN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX3RjcF9xdWV1ZV9oYXNfcGVuZGluZyhzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzg4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zOTItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozOTM6c3RhdGljIGlubGluZSBib29sIG52bWVfdGNwX3F1ZXVlX21vcmUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTM5NC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzk4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6Mzk5OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00MDAtXHRcdGJvb2wgbGFzdClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00MjItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0MjM6c3RhdGljIHZvaWQgbnZtZV90Y3BfcHJvY2Vzc19yZXFfbGlzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDI0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00MzMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0MzQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0MzU6bnZtZV90Y3BfZmV0Y2hfcmVxdWVzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDM2LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00NTUtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0NTY6c3RhdGljIGlubGluZSB2b2lkIG52bWVfdGNwX2RkZ3N0X3VwZGF0ZSh1MzIgKmNyY3AsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00NTctXHRcdHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQ3Mi1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQ3MzpzdGF0aWMgaW5saW5lIF9fbGUzMiBudm1lX3RjcF9kZGdzdF9maW5hbCh1MzIgY3JjKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDc0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00NzctXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0Nzg6c3RhdGljIGlubGluZSBfX2xlMzIgbnZtZV90Y3BfaGRnc3QoY29uc3Qgdm9pZCAqcGR1LCBzaXplX3QgbGVuKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDc5LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00ODItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0ODM6c3RhdGljIGlubGluZSB2b2lkIG52bWVfdGNwX3NldF9oZGdzdCh2b2lkICpwZHUsIHNpemVfdCBsZW4pXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00ODQte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQ4Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQ4ODpzdGF0aWMgaW50IG52bWVfdGNwX3ZlcmlmeV9oZGdzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDg5LVx0XHR2b2lkICpwZHUsIHNpemVfdCBwZHVfbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTUxMy1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjUxNDpzdGF0aWMgaW50IG52bWVfdGNwX2NoZWNrX2RkZ3N0KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsIHZvaWQgKnBkdSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTUxNS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTMzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTM0OnN0YXRpYyB2b2lkIG52bWVfdGNwX2V4aXRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTUzNS1cdFx0c3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBpbnQgaGN0eF9pZHgpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTQxLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTQyOnN0YXRpYyBpbnQgbnZtZV90Y3BfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTQzLVx0XHRzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGludCBoY3R4X2lkeCxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NjgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1Njk6c3RhdGljIGludCBudm1lX3RjcF9pbml0X2hjdHgoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHZvaWQgKmRhdGEsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NzAtXHRcdHVuc2lnbmVkIGludCBoY3R4X2lkeClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NzgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1Nzk6c3RhdGljIGludCBudm1lX3RjcF9pbml0X2FkbWluX2hjdHgoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHZvaWQgKmRhdGEsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01ODAtXHRcdHVuc2lnbmVkIGludCBoY3R4X2lkeClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01ODgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1ODk6c3RhdGljIGVudW0gbnZtZV90Y3BfcmVjdl9zdGF0ZVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTkwOm52bWVfdGNwX3JlY3Zfc3RhdGUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU5MS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTk2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTk3OnN0YXRpYyB2b2lkIG52bWVfdGNwX2luaXRfcmVjdl9jdHgoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU5OC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjA1LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NjA2OnN0YXRpYyB2b2lkIG52bWVfdGNwX2Vycm9yX3JlY292ZXJ5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02MDcte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTYxNC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjYxNTpzdGF0aWMgaW50IG52bWVfdGNwX3Byb2Nlc3NfbnZtZV9jcWUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTYxNi1cdFx0c3RydWN0IG52bWVfY29tcGxldGlvbiAqY3FlKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTY0MC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjY0MTpzdGF0aWMgaW50IG52bWVfdGNwX2hhbmRsZV9jMmhfZGF0YShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjQyLVx0XHRzdHJ1Y3QgbnZtZV90Y3BfZGF0YV9wZHUgKnBkdSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02NzQtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo2NzU6c3RhdGljIGludCBudm1lX3RjcF9oYW5kbGVfY29tcChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjc2LVx0XHRzdHJ1Y3QgbnZtZV90Y3BfcnNwX3BkdSAqcGR1KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTY5Ni1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjY5NzpzdGF0aWMgdm9pZCBudm1lX3RjcF9zZXR1cF9oMmNfZGF0YV9wZHUoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTY5OC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNzMwLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NzMxOnN0YXRpYyBpbnQgbnZtZV90Y3BfaGFuZGxlX3IydChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNzMyLVx0XHRzdHJ1Y3QgbnZtZV90Y3BfcjJ0X3BkdSAqcGR1KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTc4OS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjc5MDpzdGF0aWMgdm9pZCBudm1lX3RjcF9oYW5kbGVfYzJoX3Rlcm0oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTc5MS1cdFx0c3RydWN0IG52bWVfdGNwX3Rlcm1fcGR1ICpwZHUpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtODIzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6ODI0OnN0YXRpYyBpbnQgbnZtZV90Y3BfcmVjdl9wZHUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTgyNS1cdFx0dW5zaWduZWQgaW50ICpvZmZzZXQsIHNpemVfdCAqbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTg5NS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjg5NjpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV90Y3BfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCB1MTYgc3RhdHVzKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtODk3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy05MDMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo5MDQ6c3RhdGljIGludCBudm1lX3RjcF9yZWN2X2RhdGEoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTkwNS1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgKm9mZnNldCwgc2l6ZV90ICpsZW4pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTc0LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6OTc1OnN0YXRpYyBpbnQgbnZtZV90Y3BfcmVjdl9kZGdzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTc2LVx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgKm9mZnNldCwgc2l6ZV90ICpsZW4pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTAxOS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwMjA6c3RhdGljIGludCBudm1lX3RjcF9yZWN2X3NrYihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwMjEtXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwNTUtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMDU2OnN0YXRpYyB2b2lkIG52bWVfdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA1Ny17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA2OS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwNzA6c3RhdGljIHZvaWQgbnZtZV90Y3Bfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA3MS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA4NS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwODY6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwODcte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTExMTMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMTE0OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9kb25lX3NlbmRfcmVxKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTE1LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTE4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTExOTpzdGF0aWMgdm9pZCBudm1lX3RjcF9mYWlsX3JlcXVlc3Qoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTExMjAte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTExMzEtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMTMyOnN0YXRpYyBpbnQgbnZtZV90Y3BfdHJ5X3NlbmRfZGF0YShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTEzMy17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTE5NC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjExOTU6c3RhdGljIGludCBudm1lX3RjcF90cnlfc2VuZF9jbWRfcGR1KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTk2LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjM1LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTIzNjpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9zZW5kX2RhdGFfcGR1KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjM3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjY5LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTI3MDpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9zZW5kX2RkZ3N0KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjcxLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzAyLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTMwMzpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9zZW5kKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzA0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzUyLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTM1MzpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9yZWN2KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzU0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzY4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTM2OTpzdGF0aWMgdm9pZCBudm1lX3RjcF9pb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEzNzAte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE0MDYtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNDA3OnN0YXRpYyB2b2lkIG52bWVfdGNwX2ZyZWVfYXN5bmNfcmVxKHN0cnVjdCBudm1lX3RjcF9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQwOC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQxMy1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE0MTQ6c3RhdGljIGludCBudm1lX3RjcF9hbGxvY19hc3luY19yZXEoc3RydWN0IG52bWVfdGNwX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNDE1LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNDI5LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTQzMDpzdGF0aWMgdm9pZCBudm1lX3RjcF9mcmVlX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQzMS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQ3MC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE0NzE6c3RhdGljIGludCBudm1lX3RjcF9pbml0X2Nvbm5lY3Rpb24oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE0NzIte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2MDEtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNjAyOnN0YXRpYyBib29sIG52bWVfdGNwX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjAzLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjA2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTYwNzpzdGF0aWMgYm9vbCBudm1lX3RjcF9kZWZhdWx0X3F1ZXVlKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjA4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjE1LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTYxNjpzdGF0aWMgYm9vbCBudm1lX3RjcF9yZWFkX3F1ZXVlKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjE3LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjI2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTYyNzpzdGF0aWMgYm9vbCBudm1lX3RjcF9wb2xsX3F1ZXVlKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjI4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjQ4LSAqL1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTY0OTpzdGF0aWMgdm9pZCBudm1lX3RjcF9zZXRfcXVldWVfaW9fY3B1KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjUwLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjkxLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTY5MjpzdGF0aWMgdm9pZCBudm1lX3RjcF90bHNfZG9uZSh2b2lkICpkYXRhLCBpbnQgc3RhdHVzLCBrZXlfc2VyaWFsX3QgcHNraWQpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjkzLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzIzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTcyNDpzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3RscyhzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3MjUtXHRcdFx0ICAgICAgc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzc2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc3NzpzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3Nzgte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3ODQtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzg1OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzg2LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzkwLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc5MTpzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc5Mi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc5Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3OTg6c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MDUtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODA2OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MDcte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTEtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODEyOnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTMte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTctXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODE4OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MjgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODI5OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODMwLVx0XHRcdFx0a2V5X3NlcmlhbF90IHBza2lkKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwMjQtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDI1OnN0YXRpYyB2b2lkIG52bWVfdGNwX3Jlc3RvcmVfc29ja19vcHMoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwMjYte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwMzYtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDM3OnN0YXRpYyB2b2lkIF9fbnZtZV90Y3Bfc3RvcF9xdWV1ZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjAzOC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA0My1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIwNDQ6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9xdWV1ZV9ub3dhaXQoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDQ1LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDYyLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjA2MzpzdGF0aWMgdm9pZCBudm1lX3RjcF93YWl0X3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA2NC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA4MC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIwODE6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwODIte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwODctXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDg4OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldHVwX3NvY2tfb3BzKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDg5LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTAzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjEwNDpzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgaWR4KVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjEwNS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjEzMC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxMzE6c3RhdGljIHZvaWQgbnZtZV90Y3BfZnJlZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjEzMi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE0MS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxNDI6c3RhdGljIHZvaWQgbnZtZV90Y3BfZnJlZV9pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNDMte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNDktXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTUwOnN0YXRpYyB2b2lkIG52bWVfdGNwX3N0b3BfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTUxLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTU5LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE2MDpzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE2MS1cdFx0XHRcdCAgICBpbnQgZmlyc3QsIGludCBsYXN0KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNzgtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTc5OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxODAte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyMTItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMjEzOnN0YXRpYyBpbnQgX19udm1lX3RjcF9hbGxvY19pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyMTQte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyNTMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMjU0OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjU1LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjc4LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjI3OTpzdGF0aWMgaW50IG52bWVfdGNwX2NvbmZpZ3VyZV9pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBuZXcpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjgwLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzQ3LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM0ODpzdGF0aWMgaW50IG52bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzNDkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzOTctXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMzk4OnN0YXRpYyB2b2lkIG52bWVfdGNwX3RlYXJkb3duX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzk5LVx0XHRib29sIHJlbW92ZSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDE2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjQxNzpzdGF0aWMgdm9pZCBudm1lX3RjcF90ZWFyZG93bl9pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0MTgtXHRcdGJvb2wgcmVtb3ZlKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0MzItXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDMzOnN0YXRpYyB2b2lkIG52bWVfdGNwX3JlY29ubmVjdF9vcl9yZW1vdmUoc3RydWN0IG52bWVfY3RybCAqY3RybCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0MzQtXHRcdGludCBzdGF0dXMpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ3MS0gKi9cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0NzI6c3RhdGljIGJvb2wgbnZtZV90Y3Bfa2V5X3Jldm9rZV9uZWVkZWQoc3RydWN0IG52bWVfY3RybCAqY3RybClcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0NzMte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0NzYtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDc3OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc2V0dXBfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0Nzgte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1NTktXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNTYwOnN0YXRpYyB2b2lkIG52bWVfdGNwX3JlY29ubmVjdF9jdHJsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU2MS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU4Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI1ODg6c3RhdGljIHZvaWQgbnZtZV90Y3BfZXJyb3JfcmVjb3Zlcnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTg5LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjE2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjYxNzpzdGF0aWMgdm9pZCBudm1lX3RjcF90ZWFyZG93bl9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgc2h1dGRvd24pXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjE4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjI0LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjYyNTpzdGF0aWMgdm9pZCBudm1lX3RjcF9kZWxldGVfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjYyNi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjYzMD1zdGF0aWMgdm9pZCBudm1lX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY2MC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2NjE6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjYyLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjY2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY2NzpzdGF0aWMgdm9pZCBudm1lX3RjcF9mcmVlX2N0cmwoc3RydWN0IG52bWVfY3RybCAqbmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjY4LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjgzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY4NDpzdGF0aWMgdm9pZCBudm1lX3RjcF9zZXRfc2dfbnVsbChzdHJ1Y3QgbnZtZV9jb21tYW5kICpjKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY4NS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY5My1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2OTQ6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc2V0X3NnX2lubGluZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY5NS1cdFx0c3RydWN0IG52bWVfY29tbWFuZCAqYywgdTMyIGRhdGFfbGVuKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3MDMtXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNzA0OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldF9zZ19ob3N0X2RhdGEoc3RydWN0IG52bWVfY29tbWFuZCAqYyxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3MDUtXHRcdHUzMiBkYXRhX2xlbilcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNzE0LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjcxNTpzdGF0aWMgdm9pZCBudm1lX3RjcF9zdWJtaXRfYXN5bmNfZXZlbnQoc3RydWN0IG52bWVfY3RybCAqYXJnKVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjcxNi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjc0NC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI3NDU6c3RhdGljIHZvaWQgbnZtZV90Y3BfY29tcGxldGVfdGltZWRfb3V0KHN0cnVjdCByZXF1ZXN0ICpycSlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ5MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZXZpc2VkIFN5bWJvbCBGb2N1cyoqCgpPa2F5LCBob2xkIG9uLiBJIHdhcyBpbml0aWFsbHkgZml4YXRlZCBvbiB3aGV0aGVyIGBudm1lX3RjcF9pbml0X2Nvbm5lY3Rpb25gIG9yIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAgd2VyZSBzdGF0aWMuIFJpZ2h0LCB0aG9zZSBhcmUgc3RhdGljLiBCdXQsIEkgdGhpbmsgSSBjYW4gcmVmaW5lIHRoaXMuIEkgY2FuIGFic29sdXRlbHkgdXNlIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAsIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAgYXMgbXkga2V5IEZvY3VzU3ltYm9scy4gVGhlIGd1aWRlbGluZXMgc3BlY2lmaWNhbGx5IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gSG93ZXZlciwgaWYgdGhhdCBpZGVhbCBpc24mIzM5O3QgcG9zc2libGUsIHRoZW4gSSYjMzk7bSBmaW5lIHdpdGggbGlzdGluZyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGZpdCB0aGUgYmlsbC4KClRoaW5raW5nIGZ1cnRoZXIsICpudm1lX3RjcF9jcmVhdGVfY3RybCogaXMsIGluIGZhY3QsIHRoZSBlbnRyeSBwb2ludCBmb3IgY29udHJvbGxlciBjcmVhdGlvbi4gSXQgaXMgc3RhdGljLCBidXQgYmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiBkdXJpbmcgdGhlIHJlZ2lzdHJhdGlvbiBhcyBhIGNhbGxiYWNrIGluIGBudm1mX3RyYW5zcG9ydF9vcHNgLCB0aGUgY29tcGlsZXIgd2lsbCBub3QgaW5saW5lIGl0LiBFeGNlbGxlbnQuIFRoYXQgZml0cy4gU2ltaWxhcmx5LCBgbnZtZXRfdGNwX2FkZF9wb3J0YCBpcyBhbHNvIHJlZ2lzdGVyZWQsIGluIGBudm1ldF9mYWJyaWNzX29wc2AuCgpgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGNvdWxkIGJlIGlubGluZWQgc2luY2UgaXQmIzM5O3MgY2FsbGVkIGluIGEgbG9vcCwgYnV0IGBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZWAgYW5kIGBudm1lX3RjcF9hbGxvY19pb19xdWV1ZXNgIGFyZSBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkLgoKU28sIGxldCYjMzk7cyBzdGljayB3aXRoIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgYW5kIGBudm1ldF90Y3BfYWRkX3BvcnRgIGFzIHRoZSBwcmltYXJ5IEZvY3VzU3ltYm9scyBmb3Igbm93LgoKTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYG52bWV0X3RjcF9hZGRfcG9ydGAgd2l0aGluIGBkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZXRfdGNwX2FkZF9wb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjEwND1zdGF0aWMgdm9pZCBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjExOS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjEyMDpzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMjEte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjMxMz1zdGF0aWMgY29uc3Qgc3RydWN0IG52bWV0X2ZhYnJpY3Nfb3BzIG52bWV0X3RjcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMzE2LVx0Lm1zZGJkXHRcdFx0PSAxLFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMzE3Olx0LmFkZF9wb3J0XHRcdD0gbnZtZXRfdGNwX2FkZF9wb3J0LFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMzE4LVx0LnJlbW92ZV9wb3J0XHRcdD0gbnZtZXRfdGNwX3JlbW92ZV9wb3J0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ0NQoJCQkJCQkJb3V0cHV0OiAyMDcKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTWUgVENQIFNvY2tldCBPcHRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIGBudm1ldF90Y3BfYWRkX3BvcnRgIGlzIGRlZmluaXRlbHkgYSBjYWxsYmFjaywgd2hpY2ggaXMgZ29vZCB0byBub3RlIGZvciBsYXRlciBhbmFseXNpcy4gTm93LCB3aGF0IGFib3V0IGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgPyBBaCwgeWVzLCB0aGF0JiMzOTtzIGNhbGxlZCB3aXRoaW4gYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLiBBbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIG1lYW5pbmcgd2UmIzM5O3JlIHRha2luZyBpdHMgYWRkcmVzcy4gSXQgd29uJiMzOTt0IGJlIGlubGluZWQuIFNvIHdlIG5lZWQgdG8gYWRkIHRoYXQgb25lIHRvIHRoZSBsaXN0IGFzIHdlbGwuCgpUaGVyZWZvcmUsIGZvciBvdXIgRm9jdXNTeW1ib2xzLCB3ZSBoYXZlOgoKKiAgIGBudm1lX3RjcF9jcmVhdGVfY3RybGAKKiAgIGBudm1ldF90Y3BfYWRkX3BvcnRgCiogICBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYAoKTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb25zIHdlIHNob3VsZCBjYXJlIGFib3V0OgoKKiAgIGBOVk1FX1RDUGAKKiAgIGBOVk1FX1RBUkdFVGAKKiAgIGBOVk1FX1RBUkdFVF9UQ1BgCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AgYW5kIGBkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jYC4gSXQmIzM5O3MgcmVwbGFjaW5nIGRpcmVjdCBzb2NrZXQgb3B0aW9uIHNldHRpbmcgd2l0aCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBhZGRzIGNydWNpYWwgZXJyb3IgY2hlY2tpbmcsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBpdCBpbnRyb2R1Y2VzIHRoZSBhYmlsaXR5IGZvciBCUEYvTFNNIGhvb2tzIHRvIGludGVyY2VwdCBhbmQgaW5mbHVlbmNlIHRoZSBzb2NrZXQgb3B0aW9uIHNldHRpbmdzLiBUaGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHRoZSBzb2NrZXRzIGFyZSBzZXQgdXAgYW5kIHRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGNoYW5nZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIGRvdWJsZS1jaGVja2VkIGlmIGBkb19zb2NrX3NldHNvY2tvcHRgIGlzIGV4cG9ydGVkLCBhbmQgeWVzLCB0aGUgZ3JlcCBvdXRwdXQgY29uZmlybXMgYEVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtgLgoKTXkgUmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCByZXBsYWNlcyBkaXJlY3Qgc29ja2V0IG9wdGlvbiBhc3NpZ25tZW50cyAodGhpbmdzIGxpa2UgYHRjcF9zb2NrX3NldF9zeW5jbnRgIGFuZCBgc29ja19ub19saW5nZXJgKSB3aXRoIGBkb19zb2NrX3NldHNvY2tvcHQoKWAgaW4gYm90aCB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMuIFRoZSBzaWduaWZpY2FuY2UgaXMgdGhhdCBgZG9fc29ja19zZXRzb2Nrb3B0KClgIHdpbGwgaW52b2tlIHRoZSBMU00gYW5kIEJQRiBjZ3JvdXAgaG9va3MgKGBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdGAgYW5kIGBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFRgKS4gVGhpcyBhbGxvd3Mgc2VjdXJpdHkgbW9kdWxlcyBhbmQgQlBGIHByb2dyYW1zIHRvIGFjdGl2ZWx5IGludGVyY2VwdCwgcG90ZW50aWFsbHkgbW9kaWZ5LCBvciBmbGF0LW91dCBkZW55IHRoZXNlIHNvY2tldCBvcHRpb25zLiBJdCBhbHNvIGFkZHMgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcXVldWUgYWxsb2NhdGlvbiBmYWlsaW5nIGlmIHNldHRpbmcgdGhlIG9wdGlvbnMgZmFpbHMuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IGhvdyBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQgaW4gTlZNZSBvdmVyIFRDUCwgc28gZnV6emluZyB0aG9zZSBwYXRocyBpcyBlc3NlbnRpYWwuCgpNeSBmaW5hbCBjb25zb2xpZGF0ZWQgdmlldyBpczoKCkNvbmZpZ3M6CmBOVk1FX1RDUGAKYE5WTUVfVEFSR0VUYApgTlZNRV9UQVJHRVRfVENQYAoKRm9jdXNTeW1ib2xzOgpgbnZtZV90Y3BfY3JlYXRlX2N0cmxgCmBudm1ldF90Y3BfYWRkX3BvcnRgCmBudm1ldF90Y3BfYWNjZXB0X3dvcmtgCgpMZXQmIzM5O3MgY2FsbCB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX1RDUCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudm1lX3RjcF9jcmVhdGVfY3RybCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FjY2VwdF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGRpcmVjdCBzb2NrZXQgb3B0aW9uIGFzc2lnbm1lbnRzIChlLmcuLCB0Y3Bfc29ja19zZXRfc3luY250LCBzb2NrX25vX2xpbmdlcikgd2l0aCBkb19zb2NrX3NldHNvY2tvcHQoKSBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGRvX3NvY2tfc2V0c29ja29wdCgpIGludm9rZXMgTFNNIGFuZCBCUEYgY2dyb3VwIGhvb2tzLCBhbGxvd2luZyBzZWN1cml0eSBtb2R1bGVzIGFuZCBCUEYgcHJvZ3JhbXMgdG8gaW50ZXJjZXB0LCBtb2RpZnksIG9yIGRlbnkgdGhlc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGFsc28gYWRkcyBlcnJvciBoYW5kbGluZyB0aGF0IGZhaWxzIHF1ZXVlIGFsbG9jYXRpb24gaWYgc2V0dGluZyB0aGUgb3B0aW9ucyBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIHJlYWNoYWJsZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIGluIE5WTWUgb3ZlciBUQ1AgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05WTUVfVENQJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1RDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O252bWVfdGNwX2NyZWF0ZV9jdHJsJiMzNDssCiAgICAmIzM0O252bWV0X3RjcF9hZGRfcG9ydCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWNjZXB0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgZGlyZWN0IHNvY2tldCBvcHRpb24gYXNzaWdubWVudHMgKGUuZy4sIHRjcF9zb2NrX3NldF9zeW5jbnQsIHNvY2tfbm9fbGluZ2VyKSB3aXRoIGRvX3NvY2tfc2V0c29ja29wdCgpIGluIHRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgZG9fc29ja19zZXRzb2Nrb3B0KCkgaW52b2tlcyBMU00gYW5kIEJQRiBjZ3JvdXAgaG9va3MsIGFsbG93aW5nIHNlY3VyaXR5IG1vZHVsZXMgYW5kIEJQRiBwcm9ncmFtcyB0byBpbnRlcmNlcHQsIG1vZGlmeSwgb3IgZGVueSB0aGVzZSBzb2NrZXQgb3B0aW9ucy4gSXQgYWxzbyBhZGRzIGVycm9yIGhhbmRsaW5nIHRoYXQgZmFpbHMgcXVldWUgYWxsb2NhdGlvbiBpZiBzZXR0aW5nIHRoZSBvcHRpb25zIGZhaWxzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgcmVhY2hhYmxlIGNvbm5lY3Rpb24gc2V0dXAgcGF0aHMgaW4gTlZNZSBvdmVyIFRDUCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBzb2NrZXQgb3B0aW9uIHNldHRpbmcgaW4gdGhlIE5WTWUgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIGJ5IHJlcGxhY2luZyBkaXJlY3QgY2FsbHMgdG8gc3BlY2lmaWMgaGVscGVycyAobGlrZSBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLCBgc29ja19ub19saW5nZXJgLCBldGMuKSB3aXRoIGxvY2FsIHdyYXBwZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyBwYXNzZWQgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgKGUuZy4sIGBpbnQgdmFsID0gMTtgLCBgc3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtgLCBvciBmdW5jdGlvbiBhcmd1bWVudHMgcGFzc2VkIGJ5IHZhbHVlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZywgYW5kIG5vIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSByZWxhdGVkIHRvIGluY29ycmVjdCBzb2NrZXQgb3B0aW9ucyBvciBlcnJvciBoYW5kbGluZywgd2hpY2ggYXJlIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYW5kIGRvIG5vdCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzUzNDBmMjMxODZiZjMyYzkzNGI3NWI2NWU1ZDBhZjQwNDNjMDIxOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDA2OjMzOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuYwppbmRleCBiYTVjN2IzZTJhN2M2Li41ZjMwYmUwNGE5ZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuYwpAQCAtMTc3NCw2ICYjNDM7MTc3NCw1OCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3RscyhzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9OwomIzQzOwomIzQzOwlyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtsaW5nKSwgc2l6ZW9mKGxpbmcpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSkKJiM0Mzt7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLAomIzQzOwkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7cHJpb3JpdHkpLCBzaXplb2YocHJpb3JpdHkpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyICppZmFjZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsCiYjNDM7CQkJCSAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksCiYjNDM7CQkJCSAgc3RybGVuKGlmYWNlKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt2YWwpLCBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCkKJiM0Mzt7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt2YWwpLCBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcykKJiM0Mzt7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLAomIzQzOwkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dG9zKSwgc2l6ZW9mKHRvcykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikKJiM0MzsJCXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUFY2LAomIzQzOwkJCQkJICBJUFY2X1RDTEFTUywgS0VSTkVMX1NPQ0tQVFIoJmFtcDt0Y2xhc3MpLAomIzQzOwkJCQkJICBzaXplb2YodGNsYXNzKSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsCiAJCQkJa2V5X3NlcmlhbF90IHBza2lkKQogewpAQCAtMTgxOSwyNCAmIzQzOzE4NzEsNjUgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCwKICNlbmRpZgogCiAJLyogU2luZ2xlIHN5biByZXRyeSAqLwotCXRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtJmd0O3NvY2stJmd0O3NrLCAxKTsKJiM0MzsJcmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgMSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2ZhaWxlZCB0byBzZXQgVENQX1NZTkNOVCBvbiBxdWV1ZSAlZCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCXFpZCwgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CX0KIAogCS8qIFNldCBUQ1Agbm8gZGVsYXkgKi8KLQl0Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2spOwomIzQzOwlyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2ZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcXVldWUgJWQgZXJyICVkXG4mIzM0OywKJiM0MzsJCQlxaWQsIHJldCk7CiYjNDM7CQlnb3RvIGVycl9zb2NrOwomIzQzOwl9CiAKIAkvKgogCSAqIENsZWFudXAgd2hhdGV2ZXIgaXMgc2l0dGluZyBpbiB0aGUgVENQIHRyYW5zbWl0IHF1ZXVlIG9uIHNvY2tldAogCSAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGQKIAkgKiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGJlIHJlc3RvcmVkIGJlZm9yZSBUQ1AgdGltZXMgb3V0LgogCSAqLwotCXNvY2tfbm9fbGluZ2VyKHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CXJldCA9IG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2ZhaWxlZCB0byBzZXQgU09fTElOR0VSIG9uIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJcWlkLCByZXQpOwomIzQzOwkJZ290byBlcnJfc29jazsKJiM0MzsJfQogCi0JaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkKLQkJc29ja19zZXRfcHJpb3JpdHkocXVldWUtJmd0O3NvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiYjNDM7CWlmIChzb19wcmlvcml0eSAmZ3Q7IDApIHsKJiM0MzsJCXJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkJJiMzNDtmYWlsZWQgdG8gc2V0IFNPX1BSSU9SSVRZIG9uIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJCXFpZCwgcmV0KTsKJiM0MzsJCQlnb3RvIGVycl9zb2NrOwomIzQzOwkJfQomIzQzOwl9CiAKIAkvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqLwotCWlmIChuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zICZndDs9IDApCi0JCWlwX3NvY2tfc2V0X3RvcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwlpZiAobmN0cmwtJmd0O29wdHMtJmd0O3RvcyAmZ3Q7PSAwKSB7CiYjNDM7CQlyZXQgPSBudm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtJmd0O3NvY2stJmd0O3NrLCBuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlkZXZfZXJyKG5jdHJsLSZndDtkZXZpY2UsCiYjNDM7CQkJCSYjMzQ7ZmFpbGVkIHRvIHNldCBJUF9UT1Mgb24gcXVldWUgJWQgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkJcWlkLCByZXQpOwomIzQzOwkJCWdvdG8gZXJyX3NvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgPSBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtJmd0O3NvY2stJmd0O3NrLAomIzQzOwkJCQkJICAgICAgIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWRldl9lcnIobmN0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkJJiMzNDtmYWlsZWQgdG8gc2V0IElQVjZfVENMQVNTIG9uIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJCXFpZCwgcmV0KTsKJiM0MzsJCQlnb3RvIGVycl9zb2NrOwomIzQzOwkJfQomIzQzOwl9CiAKIAkvKiBTZXQgMTAgc2Vjb25kcyB0aW1lb3V0IGZvciBpY3Jlc3AgcmVjdm1zZyAqLwogCXF1ZXVlLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfcmN2dGltZW8gPSAxMCAqIEhaOwpAQCAtMTg2NCwxMCAmIzQzOzE5NTcsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogCiAJaWYgKG5jdHJsLSZndDtvcHRzLSZndDttYXNrICZhbXA7IE5WTUZfT1BUX0hPU1RfSUZBQ0UpIHsKIAkJY2hhciAqaWZhY2UgPSBuY3RybC0mZ3Q7b3B0cy0mZ3Q7aG9zdF9pZmFjZTsKLQkJc29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTsKIAotCQlyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtJmd0O3NvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwKLQkJCQkgICAgICBvcHR2YWwsIHN0cmxlbihpZmFjZSkpOwomIzQzOwkJcmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHF1ZXVlLSZndDtzb2NrLSZndDtzaywgaWZhY2UpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKG5jdHJsLSZndDtkZXZpY2UsCiAJCQkgICYjMzQ7ZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYwppbmRleCA3NWEyNzZkNzNiZTNlLi5lZDQxM2FhNTYwMWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKQEAgLTE2OTYsMTAgJiM0MzsxNjk2LDY2IEBAIHN0YXRpYyB2b2lkIG52bWV0X3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKQogCXJlYWRfdW5sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2NhbGxiYWNrX2xvY2spOwogfQogCiYjNDM7c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLAomIzQzOwkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7bGluZyksIHNpemVvZihsaW5nKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJCSAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJaW50IHZhbCA9IFNLX0NBTl9SRVVTRTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwKJiM0MzsJCQkJICBTT19SRVVTRUFERFIsIEtFUk5FTF9TT0NLUFRSKCZhbXA7dmFsKSwKJiM0MzsJCQkJICBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJaW50IHZhbCA9IDE7CiYjNDM7CiYjNDM7CXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLAomIzQzOwkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dmFsKSwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJaW50IHRvcyA9IGluZXRfc2soc2spLSZndDtyY3ZfdG9zOwomIzQzOwomIzQzOwlpZiAodG9zICZndDsgMCkKJiM0MzsJCXJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLAomIzQzOwkJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3RvcyksIHNpemVvZih0b3MpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikgewomIzQzOwkJaW50IHRjbGFzcyA9IGlwNl90Y2xhc3MoaW5ldDZfc2soc2spLSZndDtyY3ZfZmxvd2luZm8pOwomIzQzOwomIzQzOwkJaWYgKHRjbGFzcyAmZ3Q7IDApCiYjNDM7CQkJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwKJiM0MzsJCQkJCQkgIFNPTF9JUFY2LCBJUFY2X1RDTEFTUywKJiM0MzsJCQkJCQkgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dGNsYXNzKSwKJiM0MzsJCQkJCQkgIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSkKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcXVldWUtJmd0O3NvY2s7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc29jay0mZ3Q7c2spOwogCWludCByZXQ7CiAKIAlyZXQgPSBrZXJuZWxfZ2V0c29ja25hbWUoc29jaywKQEAgLTE3MTcsMTQgJiM0MzsxNzczLDI0IEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKQogCSAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGQKIAkgKiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGJlIHJlc3RvcmVkIGJlZm9yZSBUQ1AgdGltZXMgb3V0LgogCSAqLwotCXNvY2tfbm9fbGluZ2VyKHNvY2stJmd0O3NrKTsKJiM0MzsJcmV0ID0gbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHNvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKLQlpZiAoc29fcHJpb3JpdHkgJmd0OyAwKQotCQlzb2NrX3NldF9wcmlvcml0eShzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwlpZiAoc29fcHJpb3JpdHkgJmd0OyAwKSB7CiYjNDM7CQlyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJLyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi8KLQlpZiAoaW5ldC0mZ3Q7cmN2X3RvcyAmZ3Q7IDApCi0JCWlwX3NvY2tfc2V0X3Rvcyhzb2NrLSZndDtzaywgaW5ldC0mZ3Q7cmN2X3Rvcyk7CiYjNDM7CXJldCA9IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay0mZ3Q7c2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLSZndDtzayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gMDsKIAl3cml0ZV9sb2NrX2JoKCZhbXA7c29jay0mZ3Q7c2stJmd0O3NrX2NhbGxiYWNrX2xvY2spOwpAQCAtMjA5OCwxMCAmIzQzOzIxNjQsMjYgQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KQogCXBvcnQtJmd0O3NvY2stJmd0O3NrLSZndDtza191c2VyX2RhdGEgPSBwb3J0OwogCXBvcnQtJmd0O2RhdGFfcmVhZHkgPSBwb3J0LSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfZGF0YV9yZWFkeTsKIAlwb3J0LSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfZGF0YV9yZWFkeSA9IG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeTsKLQlzb2NrX3NldF9yZXVzZWFkZHIocG9ydC0mZ3Q7c29jay0mZ3Q7c2spOwotCXRjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtJmd0O3NvY2stJmd0O3NrKTsKLQlpZiAoc29fcHJpb3JpdHkgJmd0OyAwKQotCQlzb2NrX3NldF9wcmlvcml0eShwb3J0LSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwlyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNldCBTT19SRVVTRUFERFIgb24gcG9ydCBzb2NrZXQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfc29jazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LSZndDtzb2NrLSZndDtzayk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByX2VycigmIzM0O2ZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcG9ydCBzb2NrZXQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfc29jazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc29fcHJpb3JpdHkgJmd0OyAwKSB7CiYjNDM7CQlyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkocG9ydC0mZ3Q7c29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gc2V0IFNPX1BSSU9SSVRZIG9uIHBvcnQgc29ja2V0ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgcmV0KTsKJiM0MzsJCQlnb3RvIGVycl9zb2NrOwomIzQzOwkJfQomIzQzOwl9CiAKIAlyZXQgPSBrZXJuZWxfYmluZChwb3J0LSZndDtzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKikmYW1wO3BvcnQtJmd0O2FkZHIsCiAJCQlzaXplb2YocG9ydC0mZ3Q7YWRkcikpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjExbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODMKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMTM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5WTWUgVENQIFNvY2tldCBPcHRpb24gUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBib3RoIHRoZSBob3N0IGFuZCB0YXJnZXQgVENQIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gdGhlIE5WTWUgZHJpdmVycy4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyBkaXJlY3QgY2FsbHMgdG8gdGhvc2Ugc3BlY2lmaWMgc29ja2V0IG9wdGlvbiBzZXR0aW5nIGZ1bmN0aW9ucyDigJMgdGhpbmdzIGxpa2UgYHRjcF9zb2NrX3NldF9ub2RlbGF5YCBhbmQgYHNvY2tfbm9fbGluZ2VyYCDigJMgd2l0aCB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IHVuaWZvcm1seSB1c2UgYGRvX3NvY2tfc2V0c29ja29wdGAuIFRoZSBnb2FsLCBJIGFzc3VtZSwgaXMgY2xlYW5lciBjb2RlIGFuZCBwb3RlbnRpYWxseSBlYXNpZXIgbWFpbnRlbmFuY2UgYnkgY2VudHJhbGl6aW5nIHRoZSBzb2NrZXQgb3B0aW9uIHNldHRpbmcgbG9naWMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgdXMgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBJIHNlZSB0aGVzZSB3cmFwcGVyIGZ1bmN0aW9ucywgYW5kIEkmIzM5O20gd2Fsa2luZyB0aHJvdWdoIHRoZW0uIEl0JiMzOTtzIGNsZWFyIHRoYXQgYWxsIHRoZSB2YXJpYWJsZXMgcGFzc2VkIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIGFyZSAqZnVsbHkqIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQuIFdlIGhhdmUgYGludCB2YWwgPSAxO2AsIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIGFuZCBmdW5jdGlvbiBhcmd1bWVudHMgcGFzc2VkIGJ5IHZhbHVlLgoKU3BlY2lmaWNhbGx5LCB0aGF0IGBsaW5nZXJgIHN0cnVjdCBpcyBzb21ldGhpbmcgdG8gZG91YmxlLWNoZWNrLiBTbyBJJiMzOTttIHB1bGxpbmcgdXAgdGhlIGRlZmluaXRpb24gKG1vc3QgbGlrZWx5IGluIGBpbmNsdWRlL3VhcGkvbGludXgvc29ja2V0LmhgKS4gQWgsIHllcywgdHdvIGludHMsIG5vIHBhZGRpbmcuIFRoZSBvdGhlciB2YXJpYWJsZXMgYXJlIHNpbXBseSBpbnRlZ2VycyBvciB1bnNpZ25lZCBpbnRlZ2Vycy4gTm8gY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHRoZSBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWthZ2UgZnJvbSB0aGUga2VybmVsIHRvIHVzZXIgc3BhY2UuCgpUaGUgd3JhcHBlcnMgdXNlIGBLRVJORUxfU09DS1BUUmAgdG8gY3JlYXRlIGEgYHNvY2twdHJfdGAsIGJ1dCB0aGlzIGlzIGEgKmtlcm5lbCogcG9pbnRlciwgYW5kIGl0JiMzOTtzIHBvaW50aW5nIHRvIGluaXRpYWxpemVkIGRhdGEgb24gdGhlIHN0YWNrLiBUaGVyZSYjMzk7cyB6ZXJvIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCB3aGljaCBpcyB3aGF0IHdlIGFyZSBjb25jZXJuZWQgYWJvdXQuCgpFc3NlbnRpYWxseSwgYWxsIGRhdGEgcGFzc2VkIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIGlzIGluaXRpYWxpemVkLiBUaGVzZSBjaGFuZ2VzLCBhdCB3b3JzdCwgY291bGQgaW50cm9kdWNlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgKmxvZ2ljKiBvZiB0aGUgc29ja2V0IG9wdGlvbnMgb3IgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIHdvdWxkbiYjMzk7dCBiZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBzYWZlIHRvIHNheTogYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlIGRvbiYjMzk7dCBuZWVkIEtNU0FOIGhlcmU7IHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDY6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBvcHRpb24gc2V0dGluZyBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgYnkgcmVwbGFjaW5nIGRpcmVjdCBjYWxscyB0byBzcGVjaWZpYyBoZWxwZXJzIChsaWtlIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGBzb2NrX25vX2xpbmdlcmAsIGV0Yy4pIHdpdGggbG9jYWwgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBkb19zb2NrX3NldHNvY2tvcHRgLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoZS5nLiwgYGludCB2YWwgPSAxO2AsIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgYnkgdmFsdWUpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nLCBhbmQgbm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHNvY2tldCBvcHRpb25zIG9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCBhcmUgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBvcHRpb24gc2V0dGluZyBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgYnkgcmVwbGFjaW5nIGRpcmVjdCBjYWxscyB0byBzcGVjaWZpYyBoZWxwZXJzIChsaWtlIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGBzb2NrX25vX2xpbmdlcmAsIGV0Yy4pIHdpdGggbG9jYWwgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBkb19zb2NrX3NldHNvY2tvcHRgLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoZS5nLiwgYGludCB2YWwgPSAxO2AsIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgYnkgdmFsdWUpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nLCBhbmQgbm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHNvY2tldCBvcHRpb25zIG9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCBhcmUgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzoxMC4zMDI3NTk5NTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDI5Njc4OTUzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlZNRV9UQ1BcIixcbiAgICBcIk5WTUVfVEFSR0VUXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudm1lX3RjcF9jcmVhdGVfY3RybFwiLFxuICAgIFwibnZtZXRfdGNwX2FkZF9wb3J0XCIsXG4gICAgXCJudm1ldF90Y3BfYWNjZXB0X3dvcmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBzb2NrZXQgb3B0aW9uIHNldHRpbmcgaW4gdGhlIE5WTWUgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIGJ5IHJlcGxhY2luZyBkaXJlY3QgY2FsbHMgdG8gc3BlY2lmaWMgaGVscGVycyAobGlrZSBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLCBgc29ja19ub19saW5nZXJgLCBldGMuKSB3aXRoIGxvY2FsIHdyYXBwZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyBwYXNzZWQgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgKGUuZy4sIGBpbnQgdmFsID0gMTtgLCBgc3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtgLCBvciBmdW5jdGlvbiBhcmd1bWVudHMgcGFzc2VkIGJ5IHZhbHVlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZywgYW5kIG5vIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSByZWxhdGVkIHRvIGluY29ycmVjdCBzb2NrZXQgb3B0aW9ucyBvciBlcnJvciBoYW5kbGluZywgd2hpY2ggYXJlIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYW5kIGRvIG5vdCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3Qgc29ja2V0IG9wdGlvbiBhc3NpZ25tZW50cyAoZS5nLiwgdGNwX3NvY2tfc2V0X3N5bmNudCwgc29ja19ub19saW5nZXIpIHdpdGggZG9fc29ja19zZXRzb2Nrb3B0KCkgaW4gdGhlIE5WTWUgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBkb19zb2NrX3NldHNvY2tvcHQoKSBpbnZva2VzIExTTSBhbmQgQlBGIGNncm91cCBob29rcywgYWxsb3dpbmcgc2VjdXJpdHkgbW9kdWxlcyBhbmQgQlBGIHByb2dyYW1zIHRvIGludGVyY2VwdCwgbW9kaWZ5LCBvciBkZW55IHRoZXNlIHNvY2tldCBvcHRpb25zLiBJdCBhbHNvIGFkZHMgZXJyb3IgaGFuZGxpbmcgdGhhdCBmYWlscyBxdWV1ZSBhbGxvY2F0aW9uIGlmIHNldHRpbmcgdGhlIG9wdGlvbnMgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSByZWFjaGFibGUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyBpbiBOVk1lIG92ZXIgVENQIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzoxMC4zMDI3NjUwMzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NTEzNDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc1MzQwZjIzMTg2YmYzMmM5MzRiNzViNjVlNWQwYWY0MDQzYzAyMThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDY6MzM6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xcbmluZGV4IGJhNWM3YjNlMmE3YzYuLjVmMzBiZTA0YTlkZGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xcbkBAIC0xNzc0LDYgKzE3NzQsNTggQEAgc3RhdGljIGludCBudm1lX3RjcF9zdGFydF90bHMoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07XFxuK1xcbitcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXFxuK1xcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxcbit7XFxuK1xcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLFxcbitcXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxcbit7XFxuK1xcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXFxuK1xcdFxcdFxcdFxcdCAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksXFxuK1xcdFxcdFxcdFxcdCAgc3RybGVuKGlmYWNlKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0aW50IHZhbCA9IDE7XFxuK1xcbitcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcXG4rXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuK3tcXG4rXFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX1NZTkNOVCxcXG4rXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0b3MpXFxuK3tcXG4rXFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXFxuK1xcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxcbit7XFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbitcXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4rXFx0XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ0Y2xhc3MpLFxcbitcXHRcXHRcXHRcXHRcXHQgIHNpemVvZih0Y2xhc3MpKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxcbiBcXHRcXHRcXHRcXHRrZXlfc2VyaWFsX3QgcHNraWQpXFxuIHtcXG5AQCAtMTgxOSwyNCArMTg3MSw2NSBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxcbiAjZW5kaWZcXG4gXFxuIFxcdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cXG4tXFx0dGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIDEpO1xcbitcXHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrLCAxKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKG5jdHJsLVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdFxcXCJmYWlsZWQgdG8gc2V0IFRDUF9TWU5DTlQgb24gcXVldWUgJWQgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRxaWQsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX3NvY2s7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFNldCBUQ1Agbm8gZGVsYXkgKi9cXG4tXFx0dGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4rXFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIobmN0cmwtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcImZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcXVldWUgJWQgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRxaWQsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX3NvY2s7XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIENsZWFudXAgd2hhdGV2ZXIgaXMgc2l0dGluZyBpbiB0aGUgVENQIHRyYW5zbWl0IHF1ZXVlIG9uIHNvY2tldFxcbiBcXHQgKiBjbG9zZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgc2hvdWxkXFxuIFxcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXFxuIFxcdCAqL1xcbi1cXHRzb2NrX25vX2xpbmdlcihxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbitcXHRyZXQgPSBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIobmN0cmwtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcImZhaWxlZCB0byBzZXQgU09fTElOR0VSIG9uIHF1ZXVlICVkIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cWlkLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9zb2NrO1xcbitcXHR9XFxuIFxcbi1cXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKVxcbi1cXHRcXHRzb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcXG4rXFx0aWYgKHNvX3ByaW9yaXR5IFxcdTAwM2UgMCkge1xcbitcXHRcXHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKG5jdHJsLVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcXCJmYWlsZWQgdG8gc2V0IFNPX1BSSU9SSVRZIG9uIHF1ZXVlICVkIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cWlkLCByZXQpO1xcbitcXHRcXHRcXHRnb3RvIGVycl9zb2NrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXFxuLVxcdGlmIChuY3RybC1cXHUwMDNlb3B0cy1cXHUwMDNldG9zIFxcdTAwM2U9IDApXFxuLVxcdFxcdGlwX3NvY2tfc2V0X3RvcyhxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIG5jdHJsLVxcdTAwM2VvcHRzLVxcdTAwM2V0b3MpO1xcbitcXHRpZiAobmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZXRvcyBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIG5jdHJsLVxcdTAwM2VvcHRzLVxcdTAwM2V0b3MpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGRldl9lcnIobmN0cmwtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFx0XFxcImZhaWxlZCB0byBzZXQgSVBfVE9TIG9uIHF1ZXVlICVkIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cWlkLCByZXQpO1xcbitcXHRcXHRcXHRnb3RvIGVycl9zb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZXRvcyk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihuY3RybC1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIHNldCBJUFY2X1RDTEFTUyBvbiBxdWV1ZSAlZCBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHFpZCwgcmV0KTtcXG4rXFx0XFx0XFx0Z290byBlcnJfc29jaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHQvKiBTZXQgMTAgc2Vjb25kcyB0aW1lb3V0IGZvciBpY3Jlc3AgcmVjdm1zZyAqL1xcbiBcXHRxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX3JjdnRpbWVvID0gMTAgKiBIWjtcXG5AQCAtMTg2NCwxMCArMTk1Nyw4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXFxuIFxcbiBcXHRpZiAobmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZW1hc2sgXFx1MDAyNiBOVk1GX09QVF9IT1NUX0lGQUNFKSB7XFxuIFxcdFxcdGNoYXIgKmlmYWNlID0gbmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZWhvc3RfaWZhY2U7XFxuLVxcdFxcdHNvY2twdHJfdCBvcHR2YWwgPSBLRVJORUxfU09DS1BUUihpZmFjZSk7XFxuIFxcbi1cXHRcXHRyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtXFx1MDAzZXNvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgb3B0dmFsLCBzdHJsZW4oaWZhY2UpKTtcXG4rXFx0XFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgaWZhY2UpO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGRldl9lcnIobmN0cmwtXFx1MDAzZWRldmljZSxcXG4gXFx0XFx0XFx0ICBcXFwiZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcXG5pbmRleCA3NWEyNzZkNzNiZTNlLi5lZDQxM2FhNTYwMWM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXFxuQEAgLTE2OTYsMTAgKzE2OTYsNjYgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xcbitcXG4rXFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLFxcbitcXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXFxuK3tcXG4rXFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXFxuK1xcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0aW50IHZhbCA9IFNLX0NBTl9SRVVTRTtcXG4rXFxuK1xcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXFxuK1xcdFxcdFxcdFxcdCAgU09fUkVVU0VBRERSLCBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSxcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2YodmFsKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdGludCB2YWwgPSAxO1xcbitcXG4rXFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXFxuK1xcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRpbnQgdG9zID0gaW5ldF9zayhzayktXFx1MDAzZXJjdl90b3M7XFxuK1xcbitcXHRpZiAodG9zIFxcdTAwM2UgMClcXG4rXFx0XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuK1xcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuK1xcdFxcdGludCB0Y2xhc3MgPSBpcDZfdGNsYXNzKGluZXQ2X3NrKHNrKS1cXHUwMDNlcmN2X2Zsb3dpbmZvKTtcXG4rXFxuK1xcdFxcdGlmICh0Y2xhc3MgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFNPTF9JUFY2LCBJUFY2X1RDTEFTUyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2dGNsYXNzKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzaXplb2YodGNsYXNzKSk7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcXVldWUtXFx1MDAzZXNvY2s7XFxuLVxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNvY2stXFx1MDAzZXNrKTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJldCA9IGtlcm5lbF9nZXRzb2NrbmFtZShzb2NrLFxcbkBAIC0xNzE3LDE0ICsxNzczLDI0IEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxcbiBcXHQgKiBjbG9zZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgc2hvdWxkXFxuIFxcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXFxuIFxcdCAqL1xcbi1cXHRzb2NrX25vX2xpbmdlcihzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdHJldCA9IG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKVxcbi1cXHRcXHRzb2NrX3NldF9wcmlvcml0eShzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbitcXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbiBcXHQvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqL1xcbi1cXHRpZiAoaW5ldC1cXHUwMDNlcmN2X3RvcyBcXHUwMDNlIDApXFxuLVxcdFxcdGlwX3NvY2tfc2V0X3Rvcyhzb2NrLVxcdTAwM2VzaywgaW5ldC1cXHUwMDNlcmN2X3Rvcyk7XFxuK1xcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay1cXHUwMDNlc2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSAwO1xcbiBcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuQEAgLTIwOTgsMTAgKzIxNjQsMjYgQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxcbiBcXHRwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhID0gcG9ydDtcXG4gXFx0cG9ydC1cXHUwMDNlZGF0YV9yZWFkeSA9IHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19kYXRhX3JlYWR5O1xcbiBcXHRwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSA9IG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeTtcXG4tXFx0c29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4tXFx0dGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbi1cXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKVxcbi1cXHRcXHRzb2NrX3NldF9wcmlvcml0eShwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbitcXHRyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBzZXQgU09fUkVVU0VBRERSIG9uIHBvcnQgc29ja2V0ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9zb2NrO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gc2V0IFRDUF9OT0RFTEFZIG9uIHBvcnQgc29ja2V0ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9zb2NrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIHNldCBTT19QUklPUklUWSBvbiBwb3J0IHNvY2tldCAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHJldCk7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3NvY2s7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0ga2VybmVsX2JpbmQocG9ydC1cXHUwMDNlc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopXFx1MDAyNnBvcnQtXFx1MDAzZWFkZHIsXFxuIFxcdFxcdFxcdHNpemVvZihwb3J0LVxcdTAwM2VhZGRyKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjMzOjEwLjY1ODY2MzQzNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI0NTE1MjAxNDk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVk1FX1RDUFwiLFxuICAgIFwiTlZNRV9UQVJHRVRcIixcbiAgICBcIk5WTUVfVEFSR0VUX1RDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm52bWVfdGNwX2NyZWF0ZV9jdHJsXCIsXG4gICAgXCJudm1ldF90Y3BfYWRkX3BvcnRcIixcbiAgICBcIm52bWV0X3RjcF9hY2NlcHRfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGRpcmVjdCBzb2NrZXQgb3B0aW9uIGFzc2lnbm1lbnRzIChlLmcuLCB0Y3Bfc29ja19zZXRfc3luY250LCBzb2NrX25vX2xpbmdlcikgd2l0aCBkb19zb2NrX3NldHNvY2tvcHQoKSBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGRvX3NvY2tfc2V0c29ja29wdCgpIGludm9rZXMgTFNNIGFuZCBCUEYgY2dyb3VwIGhvb2tzLCBhbGxvd2luZyBzZWN1cml0eSBtb2R1bGVzIGFuZCBCUEYgcHJvZ3JhbXMgdG8gaW50ZXJjZXB0LCBtb2RpZnksIG9yIGRlbnkgdGhlc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGFsc28gYWRkcyBlcnJvciBoYW5kbGluZyB0aGF0IGZhaWxzIHF1ZXVlIGFsbG9jYXRpb24gaWYgc2V0dGluZyB0aGUgb3B0aW9ucyBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIHJlYWNoYWJsZSBjb25uZWN0aW9uIHNldHVwIHBhdGhzIGluIE5WTWUgb3ZlciBUQ1AgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc1MzQwZjIzMTg2YmYzMmM5MzRiNzViNjVlNWQwYWY0MDQzYzAyMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwNjozMzowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbmluZGV4IGJhNWM3YjNlMmE3YzYuLjVmMzBiZTA0YTlkZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbkBAIC0xNzc0LDYgKzE3NzQsNTggQEAgc3RhdGljIGludCBudm1lX3RjcF9zdGFydF90bHMoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuK1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHN0cnVjdCBzb2NrICpzaywgY2hhciAqaWZhY2UpXG4re1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULFxuK1x0XHRcdFx0ICBTT19CSU5EVE9ERVZJQ0UsIEtFUk5FTF9TT0NLUFRSKGlmYWNlKSxcbitcdFx0XHRcdCAgc3RybGVuKGlmYWNlKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0aW50IHZhbCA9IDE7XG4rXG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLFxuK1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbit7XG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdG9zKVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4rXHRcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsXG4rXHRcdFx0XHRcdCAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRjbGFzcyksXG4rXHRcdFx0XHRcdCAgc2l6ZW9mKHRjbGFzcykpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4gXHRcdFx0XHRrZXlfc2VyaWFsX3QgcHNraWQpXG4ge1xuQEAgLTE4MTksMjQgKzE4NzEsNjUgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiAjZW5kaWZcbiBcbiBcdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cbi1cdHRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4rXHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwiZmFpbGVkIHRvIHNldCBUQ1BfU1lOQ05UIG9uIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuK1x0XHRcdHFpZCwgcmV0KTtcbitcdFx0Z290byBlcnJfc29jaztcbitcdH1cbiBcbiBcdC8qIFNldCBUQ1Agbm8gZGVsYXkgKi9cbi1cdHRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuK1x0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJmYWlsZWQgdG8gc2V0IFRDUF9OT0RFTEFZIG9uIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuK1x0XHRcdHFpZCwgcmV0KTtcbitcdFx0Z290byBlcnJfc29jaztcbitcdH1cbiBcbiBcdC8qXG4gXHQgKiBDbGVhbnVwIHdoYXRldmVyIGlzIHNpdHRpbmcgaW4gdGhlIFRDUCB0cmFuc21pdCBxdWV1ZSBvbiBzb2NrZXRcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuK1x0cmV0ID0gbnZtZV90Y3Bfc29ja19ub19saW5nZXIocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwiZmFpbGVkIHRvIHNldCBTT19MSU5HRVIgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0cWlkLCByZXQpO1xuK1x0XHRnb3RvIGVycl9zb2NrO1xuK1x0fVxuIFxuLVx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRpZiAoc29fcHJpb3JpdHkgXHUwMDNlIDApIHtcbitcdFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XHRcImZhaWxlZCB0byBzZXQgU09fUFJJT1JJVFkgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0XHRxaWQsIHJldCk7XG4rXHRcdFx0Z290byBlcnJfc29jaztcbitcdFx0fVxuK1x0fVxuIFxuIFx0LyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi9cbi1cdGlmIChuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyBcdTAwM2U9IDApXG4tXHRcdGlwX3NvY2tfc2V0X3RvcyhxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyk7XG4rXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MgXHUwMDNlPSAwKSB7XG4rXHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbitcdFx0XHRcdFwiZmFpbGVkIHRvIHNldCBJUF9UT1Mgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0XHRxaWQsIHJldCk7XG4rXHRcdFx0Z290byBlcnJfc29jaztcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzayxcbitcdFx0XHRcdFx0ICAgICAgIG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFx0XCJmYWlsZWQgdG8gc2V0IElQVjZfVENMQVNTIG9uIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuK1x0XHRcdFx0cWlkLCByZXQpO1xuK1x0XHRcdGdvdG8gZXJyX3NvY2s7XG4rXHRcdH1cbitcdH1cbiBcbiBcdC8qIFNldCAxMCBzZWNvbmRzIHRpbWVvdXQgZm9yIGljcmVzcCByZWN2bXNnICovXG4gXHRxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3JjdnRpbWVvID0gMTAgKiBIWjtcbkBAIC0xODY0LDEwICsxOTU3LDggQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiBcbiBcdGlmIChuY3RybC1cdTAwM2VvcHRzLVx1MDAzZW1hc2sgXHUwMDI2IE5WTUZfT1BUX0hPU1RfSUZBQ0UpIHtcbiBcdFx0Y2hhciAqaWZhY2UgPSBuY3RybC1cdTAwM2VvcHRzLVx1MDAzZWhvc3RfaWZhY2U7XG4tXHRcdHNvY2twdHJfdCBvcHR2YWwgPSBLRVJORUxfU09DS1BUUihpZmFjZSk7XG4gXG4tXHRcdHJldCA9IHNvY2tfc2V0c29ja29wdChxdWV1ZS1cdTAwM2Vzb2NrLCBTT0xfU09DS0VULCBTT19CSU5EVE9ERVZJQ0UsXG4tXHRcdFx0XHQgICAgICBvcHR2YWwsIHN0cmxlbihpZmFjZSkpO1xuK1x0XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2UocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgaWZhY2UpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4gXHRcdFx0ICBcImZhaWxlZCB0byBiaW5kIHRvIGludGVyZmFjZSAlcyBxdWV1ZSAlZCBlcnIgJWRcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuaW5kZXggNzVhMjc2ZDczYmUzZS4uZWQ0MTNhYTU2MDFjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbkBAIC0xNjk2LDEwICsxNjk2LDY2IEBAIHN0YXRpYyB2b2lkIG52bWV0X3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxuIFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuK1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSlcbit7XG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLFxuK1x0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdGludCB2YWwgPSBTS19DQU5fUkVVU0U7XG4rXG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXG4rXHRcdFx0XHQgIFNPX1JFVVNFQUREUiwgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSxcbitcdFx0XHRcdCAgc2l6ZW9mKHZhbCkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdG9zID0gaW5ldF9zayhzayktXHUwMDNlcmN2X3RvcztcbitcbitcdGlmICh0b3MgXHUwMDNlIDApXG4rXHRcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spXG4re1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuK1x0XHRpbnQgdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktXHUwMDNlcmN2X2Zsb3dpbmZvKTtcbitcbitcdFx0aWYgKHRjbGFzcyBcdTAwM2UgMClcbitcdFx0XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsXG4rXHRcdFx0XHRcdFx0ICBTT0xfSVBWNiwgSVBWNl9UQ0xBU1MsXG4rXHRcdFx0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLFxuK1x0XHRcdFx0XHRcdCAgc2l6ZW9mKHRjbGFzcykpO1xuK1x0fVxuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS1cdTAwM2Vzb2NrO1xuLVx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc29jay1cdTAwM2Vzayk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0ga2VybmVsX2dldHNvY2tuYW1lKHNvY2ssXG5AQCAtMTcxNywxNCArMTc3MywyNCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuK1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMClcbi1cdFx0c29ja19zZXRfcHJpb3JpdHkoc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuK1x0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKSB7XG4rXHRcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXG4tXHRpZiAoaW5ldC1cdTAwM2VyY3ZfdG9zIFx1MDAzZSAwKVxuLVx0XHRpcF9zb2NrX3NldF90b3Moc29jay1cdTAwM2VzaywgaW5ldC1cdTAwM2VyY3ZfdG9zKTtcbitcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay1cdTAwM2Vzayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSAwO1xuIFx0d3JpdGVfbG9ja19iaChcdTAwMjZzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xuQEAgLTIwOTgsMTAgKzIxNjQsMjYgQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxuIFx0cG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSA9IHBvcnQ7XG4gXHRwb3J0LVx1MDAzZWRhdGFfcmVhZHkgPSBwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfZGF0YV9yZWFkeTtcbiBcdHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza19kYXRhX3JlYWR5ID0gbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5O1xuLVx0c29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4tXHR0Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuLVx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNldCBTT19SRVVTRUFERFIgb24gcG9ydCBzb2NrZXQgJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfc29jaztcbitcdH1cbitcbitcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByX2VycihcImZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcG9ydCBzb2NrZXQgJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfc29jaztcbitcdH1cbitcbitcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMCkge1xuK1x0XHRyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gc2V0IFNPX1BSSU9SSVRZIG9uIHBvcnQgc29ja2V0ICVkXFxuXCIsXG4rXHRcdFx0ICAgICAgIHJldCk7XG4rXHRcdFx0Z290byBlcnJfc29jaztcbitcdFx0fVxuK1x0fVxuIFxuIFx0cmV0ID0ga2VybmVsX2JpbmQocG9ydC1cdTAwM2Vzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZwb3J0LVx1MDAzZWFkZHIsXG4gXHRcdFx0c2l6ZW9mKHBvcnQtXHUwMDNlYWRkcikpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6MTAuNjU4NjY0OTQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4OTM0NjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTb2NrZXQgT3B0aW9uIFBhdGNoIGluIE5WTWUvVENQIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AgYW5kIGBkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jYC4gSXQncyByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHRob3NlIHN0YW5kYXJkIFRDUCBzb2NrZXQgaGVscGVycywgbGlrZSBgdGNwX3NvY2tfc2V0X3N5bmNudGAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGFuZCB0aGUgb3RoZXJzLCB3aXRoIGN1c3RvbSB3cmFwcGVycyB0aGF0IGFyZSBub3cgY2FsbGluZyBgZG9fc29ja19zZXRzb2Nrb3B0YC4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgXCJXaHk/XCIuIFdoeSB0aGUgY2hhbmdlIGluIGFwcHJvYWNoPyBMZXQncyBkaWcgaW50byBgdGNwX3NvY2tfc2V0X3N5bmNudGAgaXRzZWxmIGluIHRoZSBrZXJuZWwgY29kZS5cblxuUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgdGhleSdyZSBjb25zb2xpZGF0aW5nIHRoZXNlIHNvY2tldCBvcHRpb24gc2V0dGluZ3MgdGhyb3VnaCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gTm93LCBpcyB0aGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlPyBJcyBpdCByZWFjaGFibGUgYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGU/IEFic29sdXRlbHkuIFRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyBhcmUgZWFzaWx5IHNwdW4gdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBTbyB0aG9zZSBjb2RlIHBhdGhzIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyAqaG93KiBzb2NrZXQgb3B0aW9ucyBhcmUgc2V0LCB3aGljaCByYWlzZXMgZmxhZ3MgZm9yIG1lLlxuXG5MZXQgbWUgcXVpY2tseSBzZWFyY2ggZm9yIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAgYW5kIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLiBZZXAsIGNvbmZpcm1lZC4gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiBOVk1lIG92ZXIgVENQLiBBbmQgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggKmlzKiBhZGRpbmcgZXJyb3IgY2hlY2tpbmcgbm93IChsaWtlIHRoZSBgaWYgKHJldCkgeyBkZXZfZXJyKC4uLik7IGdvdG8gZXJyX3NvY2s7IH1gIGJsb2NrcykuIFByZXZpb3VzbHksIHdlcmUgdGhlc2Ugc29ja2V0IG9wdGlvbiBoZWxwZXJzIGxpa2UgYHRjcF9zb2NrX3NldF9zeW5jbnRgIHZvaWQgZnVuY3Rpb25zIG9yIGRpZCB0aGUgcmV0dXJuIHZhbHVlIGdldCBpZ25vcmVkPyBHb3R0YSBjaGVjayBgdGNwX3NvY2tfc2V0X3N5bmNudGAgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjg2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6MTYuODQ4MDE1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUyODIxMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9zb2NrX3NldF9zeW5jbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTc5OD1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgwNS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODA2OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE4Mjk9c3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4NzMtXFx0LyogU2luZ2xlIHN5biByZXRyeSAqL1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4NzQ6XFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgMSk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTg3NS1cXHRpZiAocmV0KSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RjcC5oPTY1Mj12b2lkIHRjcF9zb2NrX3NldF9xdWlja2FjayhzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xcbmluY2x1ZGUvbGludXgvdGNwLmg6NjUzOmludCB0Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCk7XFxuaW5jbHVkZS9saW51eC90Y3AuaC02NTQtaW50IHRjcF9zb2NrX3NldF91c2VyX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM3MDk9RVhQT1JUX1NZTUJPTCh0Y3Bfc29ja19zZXRfcXVpY2thY2spO1xcbm5ldC9pcHY0L3RjcC5jLTM3MTAtXFxubmV0L2lwdjQvdGNwLmM6MzcxMTppbnQgdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxubmV0L2lwdjQvdGNwLmMtMzcxMi17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zNzE4LX1cXG5uZXQvaXB2NC90Y3AuYzozNzE5OkVYUE9SVF9TWU1CT0wodGNwX3NvY2tfc2V0X3N5bmNudCk7XFxubmV0L2lwdjQvdGNwLmMtMzcyMC1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM4Mzc9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM5MTctXFx0Y2FzZSBUQ1BfU1lOQ05UOlxcbm5ldC9pcHY0L3RjcC5jOjM5MTg6XFx0XFx0cmV0dXJuIHRjcF9zb2NrX3NldF9zeW5jbnQoc2ssIHZhbCk7XFxubmV0L2lwdjQvdGNwLmMtMzkxOS1cXHRjYXNlIFRDUF9VU0VSX1RJTUVPVVQ6XFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYz0yNDM9c3RhdGljIGludCB0Y3Bfd3JpdGVfdGltZW91dChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYy0yNTMtXFx0XFx0XFx0X19kc3RfbmVnYXRpdmVfYWR2aWNlKHNrKTtcXG5uZXQvaXB2NC90Y3BfdGltZXIuYzoyNTQ6XFx0XFx0LyogUGFpcmVkIHdpdGggV1JJVEVfT05DRSgpIGluIHRjcF9zb2NrX3NldF9zeW5jbnQoKSAqL1xcbm5ldC9pcHY0L3RjcF90aW1lci5jLTI1NS1cXHRcXHRyZXRyeV91bnRpbCA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcXG4tLVxcbm5ldC9pcHY0L3RjcF90aW1lci5jPTQ1OT1zdGF0aWMgdm9pZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDY3LVxcdC8qIEFkZCBvbmUgbW9yZSByZXRyeSBmb3IgZmFzdG9wZW4uXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDY4OlxcdCAqIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiB0Y3Bfc29ja19zZXRfc3luY250KClcXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00NjktXFx0ICovXFxuLS1cXG5uZXQvc3VucnBjL3hwcnRzb2NrLmM9MjI4MD1zdGF0aWMgdm9pZCB4c190Y3Bfc2V0X3NvY2tldF90aW1lb3V0cyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsXFxuLS1cXG5uZXQvc3VucnBjL3hwcnRzb2NrLmMtMjMxNi1cXHRpZiAodCBcXHUwMDNjPSBzeW5fcmV0cmllcylcXG5uZXQvc3VucnBjL3hwcnRzb2NrLmM6MjMxNzpcXHRcXHR0Y3Bfc29ja19zZXRfc3luY250KHNvY2stXFx1MDAzZXNrLCB0IC0gMSk7XFxubmV0L3N1bnJwYy94cHJ0c29jay5jLTIzMTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzoxOC43MDA4NDMwNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk2ODI3Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTlZNZSBUQ1AgU29ja2V0IE9wdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IE5WTWUgVENQIGhhbmRsZXMgc29ja2V0IG9wdGlvbnMuIFNwZWNpZmljYWxseSwgaXQncyBhYm91dCBzZXR0aW5nIHRoZSBzeW5jaHJvbml6YXRpb24gY291bnQuIEluc3RlYWQgb2YgZGlyZWN0bHkgY2FsbGluZyBgdGNwX3NvY2tfc2V0X3N5bmNudGAsIGl0J3Mgbm93IHVzaW5nIGBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnRgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBkb19zb2NrX3NldHNvY2tvcHRgLiBUaGF0J3MgYSBzaGlmdDsgSSdtIGN1cmlvdXMgd2h5LiBXaHkgdGhlIGluZGlyZWN0aW9uPyBTb21ldGhpbmcgbXVzdCBiZSBkaWZmZXJlbnQuIEFoLCBJIHNlZSwgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgYHNvY2tfc2V0c29ja29wdGAgaXMgdW5kZXJnb2luZyBzb21lIGtpbmQgb2YgY2hhbmdlIG9yIGlzIGJlaW5nIGRlcHJlY2F0ZWQgZW50aXJlbHkuIFJpZ2h0LCBtYWtlcyBzZW5zZS4gVG8gYmUgc3VyZSwgSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIHNlZSB3aGF0IHRoZSB1bmRlcmx5aW5nIGNoYW5nZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAwMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjMzOjIyLjA5NzY3NDA5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU4NzcwNDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3NvY2tfc2V0c29ja29wdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xNzc3PXN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc4MC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzgxOlxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzgyLVxcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTc4NT1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3ODYte1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3ODc6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc4OC1cXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTc5MT1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTIte1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3OTM6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzk0LVxcdFxcdFxcdFxcdCAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xNzk4PXN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODAxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4MDI6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgwMy1cXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xODA2PXN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA3LXtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODA4OlxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgwOS1cXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xODEyPXN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcylcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODEzLXtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODE0OlxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTUtXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTgxOD1zdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODIxLVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4MjI6XFx0XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyMy1cXHRcXHRcXHRcXHRcXHQgIElQVjZfVENMQVNTLCBLRVJORUxfU09DS1BUUihcXHUwMDI2dGNsYXNzKSxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MTY5OT1zdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MDItXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxNzAzOlxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MDQtXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3MDc9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzA4LXtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3MDk6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzEwLVxcdFxcdFxcdFxcdCAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3MTM9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTcxNi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3MTc6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MTgtXFx0XFx0XFx0XFx0ICBTT19SRVVTRUFERFIsIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ2YWwpLFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzIyPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzI1LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTcyNjpcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MjctXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzMwPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3MzQtXFx0aWYgKHRvcyBcXHUwMDNlIDApXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxNzM1OlxcdFxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTczNi1cXHRcXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE3NDA9c3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTc0Ni1cXHRcXHRpZiAodGNsYXNzIFxcdTAwM2UgMClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE3NDc6XFx0XFx0XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NDgtXFx0XFx0XFx0XFx0XFx0XFx0ICBTT0xfSVBWNiwgSVBWNl9UQ0xBU1MsXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MTg4OD1pbnQgc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wLFxcbmluY2x1ZGUvbmV0L3NvY2suaC0xODg5LVxcdFxcdCAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKTtcXG5pbmNsdWRlL25ldC9zb2NrLmg6MTg5MDppbnQgZG9fc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXFxuaW5jbHVkZS9uZXQvc29jay5oLTE4OTEtXFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKTtcXG4tLVxcbmlvX3VyaW5nL2NtZF9uZXQuYz01Mj1zdGF0aWMgaW5saW5lIGludCBpb191cmluZ19jbWRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxuaW9fdXJpbmcvY21kX25ldC5jLTY3LVxcbmlvX3VyaW5nL2NtZF9uZXQuYzo2ODpcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbF9zLFxcbmlvX3VyaW5nL2NtZF9uZXQuYy02OS1cXHRcXHRcXHRcXHQgIG9wdGxlbik7XFxuLS1cXG5uZXQvc29ja2V0LmM9MjMzMD1zdGF0aWMgYm9vbCBzb2NrX3VzZV9jdXN0b21fc29sX3NvY2tldChjb25zdCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3NvY2tldC5jLTIzMzQtXFxubmV0L3NvY2tldC5jOjIzMzU6aW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbm5ldC9zb2NrZXQuYy0yMzM2LVxcdFxcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9zb2NrZXQuYy0yMzczLX1cXG5uZXQvc29ja2V0LmM6MjM3NDpFWFBPUlRfU1lNQk9MKGRvX3NvY2tfc2V0c29ja29wdCk7XFxubmV0L3NvY2tldC5jLTIzNzUtXFxuLS1cXG5uZXQvc29ja2V0LmM9MjM3OT1pbnQgX19zeXNfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICp1c2VyX29wdHZhbCxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yMzkyLVxcbm5ldC9zb2NrZXQuYzoyMzkzOlxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9zb2NrZXQuYy0yMzk0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6MjMuOTU2NDUwNDc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4OTc5MjUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOVk1lIFRDUCBQYXRjaCBSZXZpZXcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN3aXRjaGluZyBOVk1lIFRDUCBvdmVyIHRvIHVzaW5nIGBkb19zb2NrX3NldHNvY2tvcHRgIGluc3RlYWQgb2YgdGhlIG1vcmUgZGlyZWN0IGhlbHBlciBgdGNwX3NvY2tfc2V0X3N5bmNudGAuIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IHRoaXMgY2hvaWNlLiBXaHkgdGhlIGNoYW5nZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgbWF5YmUgYHRjcF9zb2NrX3NldF9zeW5jbnRgIGRvZXNuJ3QgcHJvdmlkZSBzdWZmaWNpZW50IGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIGl0IGRvZXNuJ3QgcGVyZm9ybSB0aGUgc2FtZSBjaGVja3MgYXMgYGRvX3NvY2tfc2V0c29ja29wdGAuIEl0J3MgcG9zc2libGUgdGhlIGRpcmVjdCBoZWxwZXIgaXMgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBnbyBhbmQgc2VlIGhvdyBgdGNwX3NvY2tfc2V0X3N5bmNudGAgd29ya3MsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYG5ldC9pcHY0L3RjcC5jYCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgbGltaXRhdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6MjcuODQ2MjQ2NzQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDIxNDI3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHRjcF9zb2NrX3NldF9zeW5jbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC90Y3AuaD02NTI9dm9pZCB0Y3Bfc29ja19zZXRfcXVpY2thY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcXG5pbmNsdWRlL2xpbnV4L3RjcC5oOjY1MzppbnQgdGNwX3NvY2tfc2V0X3N5bmNudChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xcbmluY2x1ZGUvbGludXgvdGNwLmgtNjU0LWludCB0Y3Bfc29ja19zZXRfdXNlcl90aW1lb3V0KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0zNzA5PUVYUE9SVF9TWU1CT0wodGNwX3NvY2tfc2V0X3F1aWNrYWNrKTtcXG5uZXQvaXB2NC90Y3AuYy0zNzEwLVxcbm5ldC9pcHY0L3RjcC5jOjM3MTE6aW50IHRjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbm5ldC9pcHY0L3RjcC5jLTM3MTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzoyOS41ODgzOTU2OTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODIxNzM4NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgdGNwX3NvY2tfc2V0X3N5bmNudGAgaW4gYG5ldC9pcHY0L3RjcC5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgdGNwX3NvY2tfc2V0X3N5bmNudGAgaW4gdGhlIElQdjQgVENQIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3RhY2suIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIFNZTiBmbG9vZCBwcm90ZWN0aW9uIGFuZCBjb25uZWN0aW9uIHJhdGUgbGltaXRpbmcuIEnigJltIGJldHRpbmcgdGhpcyBkaXJlY3RseSBpbmZsdWVuY2VzIGhvdyBhZ2dyZXNzaXZlbHkgd2UgcmVzcG9uZCB0byBTWU4gcGFja2V0cy4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHdlJ3JlIHNldHRpbmcgb3IgY29uZmlndXJpbmcgYSBzeW5jaHJvbml6YXRpb24gY291bnQsIHdoaWNoIGxpa2VseSByZWxhdGVzIHRvIGhvdyBtYW55IG91dHN0YW5kaW5nIFNZTl9SRUNWIGNvbm5lY3Rpb25zIGFyZSBhbGxvd2VkIGJlZm9yZSB3ZSBzdGFydCBzaGVkZGluZyBpbmNvbWluZyBTWU5zLiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdmFyaWFibGVzIGludm9sdmVkLCBob3cgdGhlIGNvdW50IGlzIHVwZGF0ZWQgKGxpa2VseSBiYXNlZCBvbiBzb2NrZXQgc3RhdGUgYW5kIGV2ZW50cyksIGFuZCB3aGV0aGVyIGFueSBhZGFwdGl2ZSBtZWNoYW5pc21zIGFyZSBlbXBsb3llZC4gSSBleHBlY3QgdG8gc2VlIGNoZWNrcyBhZ2FpbnN0IGdsb2JhbCB0aHJlc2hvbGRzIG9yIHBlci1zb2NrZXQgc2V0dGluZ3MuIEtub3dpbmcgdGhpcyBnaXZlcyB0aGUgYWJpbGl0eSB0byBwcm9wZXJseSB0dW5lIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3MsIHBhcnRpY3VsYXJseSB1bmRlciBoZWF2eSBsb2FkIG9yIGluIHRoZSBwcmVzZW5jZSBvZiBtYWxpY2lvdXMgdHJhZmZpYy4gSSBhbSBsb29raW5nIGZvciB0aGUgY29uZGl0aW9uYWwgYnJhbmNoZXMsIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCAoaWYgYW55KSwgYW5kIGFueSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIGxpa2UgbWVtb3J5IG1hbmFnZW1lbnQgb3IgbmV0d29ya2luZyBkZXZpY2VzLiBMZXQncyBzZWUgaWYgdGhpcyByZXZlYWxzIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gUmlnaHQsIGxldCdzIHN0YXJ0IHJlYWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6MzUuNDEwMTM2NDI3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzExLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzExOlxcdGludCB0Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG4zNzEyOlxcdHtcXG4zNzEzOlxcdFxcdGlmICh2YWwgXFx1MDAzYyAxIHx8IHZhbCBcXHUwMDNlIE1BWF9UQ1BfU1lOQ05UKVxcbjM3MTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzcxNTpcXHRcXG4zNzE2OlxcdFxcdFdSSVRFX09OQ0UoaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX3N5bl9yZXRyaWVzLCB2YWwpO1xcbjM3MTc6XFx0XFx0cmV0dXJuIDA7XFxuMzcxODpcXHR9XFxuMzcxOTpcXHRFWFBPUlRfU1lNQk9MKHRjcF9zb2NrX3NldF9zeW5jbnQpO1xcbjM3MjA6XFx0XFxuMzcyMTpcXHRpbnQgdGNwX3NvY2tfc2V0X3VzZXJfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuMzcyMjpcXHR7XFxuMzcyMzpcXHRcXHQvKiBDYXAgdGhlIG1heCB0aW1lIGluIG1zIFRDUCB3aWxsIHJldHJ5IG9yIHByb2JlIHRoZSB3aW5kb3dcXG4zNzI0OlxcdFxcdCAqIGJlZm9yZSBnaXZpbmcgdXAgYW5kIGFib3J0aW5nIChFVElNRURPVVQpIGEgY29ubmVjdGlvbi5cXG4zNzI1OlxcdFxcdCAqL1xcbjM3MjY6XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuMzcyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNzI4OlxcdFxcbjM3Mjk6XFx0XFx0V1JJVEVfT05DRShpbmV0X2NzayhzayktXFx1MDAzZWljc2tfdXNlcl90aW1lb3V0LCB2YWwpO1xcbjM3MzA6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjMzOjM1LjQxMDM0NDE1N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQ4OTQ0MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgU29ja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCB0aGlzIE5WTWUgVENQIGNvZGUsIGFuZCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQgd2l0aCB0aGlzIHNvY2tldCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGVzZSB0d28gZnVuY3Rpb24gY2FsbHM6IGB0Y3Bfc29ja19zZXRfc3luY250YCBhbmQgYHRjcF9zb2NrX3NldF9ub2RlbGF5YC4gVGhlIGZpcnN0IG9uZSwgYHRjcF9zb2NrX3NldF9zeW5jbnRgLCByZXR1cm5zIGFuIGludGVnZXIsIHJpZ2h0PyBZZXQsIHRoaXMgY29kZSBpcyBqdXN0IGJsb3dpbmcgb2ZmIHRoZSByZXR1cm4gdmFsdWUuIElzIHRoYXQgaW50ZW50aW9uYWw/IEknZCBleHBlY3QgdG8gc2VlIHNvbWUga2luZCBvZiBlcnJvciBjaGVja2luZyBpZiBpdCdzIHJldHVybmluZyBhIHZhbHVlLiBJdCdzIHNldHRpbmcgdGhlIFNZTiByZXRyeSBjb3VudCB0byAxLCB3aGljaCBtaWdodCBiZSBmaW5lLCBidXQgaWdub3JpbmcgYSBwb3RlbnRpYWwgZmFpbHVyZSBzZWVtcyByaXNreS5cblxuVGhlbiB0aGVyZSdzIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAuIFJpZ2h0LCB0aGF0J3MgYSB2b2lkIGZ1bmN0aW9uLCBzbyB0aGVyZSdzIG5vIHJldHVybiB2YWx1ZSB0byBjaGVjay4gQXQgbGVhc3QsIHRoYXQncyBhcyBJIHJlY2FsbC4gSXQncyBhbHdheXMgcG9zc2libGUgSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBzbyBJIG5lZWQgdG8gZ28gbG9vayBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGNwX3NvY2tfc2V0X25vZGVsYXlgIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGEgcG90ZW50aWFsIGlzc3VlIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyBhbmQgd2hhdCBzaWRlIGVmZmVjdHMgaXQgbWlnaHQgaGF2ZSwgb3Igd2hhdCBpdCBjYW4gcmV0dXJuIGluIHRlcm1zIG9mIGludGVybmFsIHNpZ25hbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzo0Mi4zNTkyOTEzNDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjU0ODg2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB0Y3Bfc29ja19zZXRfbm9kZWxheVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3RjcC5oPTY1MD12b2lkIF9fdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrLCBib29sIG9uKTtcXG5pbmNsdWRlL2xpbnV4L3RjcC5oOjY1MTp2b2lkIHRjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9saW51eC90Y3AuaC02NTItdm9pZCB0Y3Bfc29ja19zZXRfcXVpY2thY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM2Njg9dm9pZCBfX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaywgYm9vbCBvbilcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM2NzctXFxubmV0L2lwdjQvdGNwLmM6MzY3ODp2b2lkIHRjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3AuYy0zNjc5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6NDQuMjg0Nzg2NDMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjAwMzU1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrZXQgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgb3V0IGB0Y3Bfc29ja19zZXRfbm9kZWxheShzaylgIGZvciBgZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLCBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSlgLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzICp3aHkqPyBXaGF0J3MgdGhlIGRyaXZpbmcgZm9yY2UgYmVoaW5kIHRoaXMgY2hhbmdlPyBJcyBpdCBzaW1wbHkgYSBtYXR0ZXIgb2YgZW5zdXJpbmcgdGhlIHNvY2tldCBvcHRpb24gaXMgc2V0IHdpdGggYWJzb2x1dGUgY2VydGFpbnR5LCBvciBpcyB0aGVyZSBzb21ldGhpbmcgbW9yZSBzdWJ0bGUgYXQgcGxheSBoZXJlP1xuXG5SaWdodCwgSSdtIGxlYW5pbmcgdG93YXJkIHRoZSBsYXR0ZXIuIGBkb19zb2NrX3NldHNvY2tvcHRgIHByb2JhYmx5IGhhbmRsZXMgbW9yZSB0aGFuIGp1c3QgdGhlIGRpcmVjdCBzZXR0aW5nIG9mIHRoZSBvcHRpb24uIEl0IGxpa2VseSBpbmNvcnBvcmF0ZXMgc29tZSB2aXRhbCBsb2NraW5nIG1lY2hhbmlzbXMgb3IgcGVyaGFwcyBjYWxscyBpbnRvIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgaG9va3MuIFRoYXQncyB0aGUgcmVhbCBwb3RlbnRpYWwgdmFsdWUtYWRkIGhlcmUg4oCTIGludm9raW5nIEJQRiBob29rcyBpcyBhIGRlZmluaXRlIHBvc3NpYmlsaXR5ISBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGh1bmNoLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIGBuZXQvc29ja2V0LmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbCBhbmQgc2VlIHdoYXQgaXMgYWN0dWFsbHkgZXhlY3V0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzM0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjMzOjQ5LjEwNDgyNzMyMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMzU6XFx0aW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbjIzMzY6XFx0XFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbjIzMzc6XFx0e1xcbjIzMzg6XFx0XFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzO1xcbjIzMzk6XFx0XFx0Y2hhciAqa2VybmVsX29wdHZhbCA9IE5VTEw7XFxuMjM0MDpcXHRcXHRpbnQgZXJyO1xcbjIzNDE6XFx0XFxuMjM0MjpcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2MgMClcXG4yMzQzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIzNDQ6XFx0XFxuMjM0NTpcXHRcXHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7XFxuMjM0NjpcXHRcXHRpZiAoZXJyKVxcbjIzNDc6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbjIzNDg6XFx0XFxuMjM0OTpcXHRcXHRpZiAoIWNvbXBhdClcXG4yMzUwOlxcdFxcdFxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLVxcdTAwM2VzaywgXFx1MDAyNmxldmVsLCBcXHUwMDI2b3B0bmFtZSxcXG4yMzUxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLFxcbjIzNTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a2VybmVsX29wdHZhbCk7XFxuMjM1MzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4yMzU0OlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4yMzU1OlxcdFxcdGlmIChlcnIgXFx1MDAzZSAwKSB7XFxuMjM1NjpcXHRcXHRcXHRlcnIgPSAwO1xcbjIzNTc6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbjIzNTg6XFx0XFx0fVxcbjIzNTk6XFx0XFxuMjM2MDpcXHRcXHRpZiAoa2VybmVsX29wdHZhbClcXG4yMzYxOlxcdFxcdFxcdG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGtlcm5lbF9vcHR2YWwpO1xcbjIzNjI6XFx0XFx0b3BzID0gUkVBRF9PTkNFKHNvY2stXFx1MDAzZW9wcyk7XFxuMjM2MzpcXHRcXHRpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCBcXHUwMDI2XFx1MDAyNiAhc29ja191c2VfY3VzdG9tX3NvbF9zb2NrZXQoc29jaykpXFxuMjM2NDpcXHRcXHRcXHRlcnIgPSBzb2NrX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4yMzY1OlxcdFxcdGVsc2UgaWYgKHVubGlrZWx5KCFvcHMtXFx1MDAzZXNldHNvY2tvcHQpKVxcbjIzNjY6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuMjM2NzpcXHRcXHRlbHNlXFxuMjM2ODpcXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZXNldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCxcXG4yMzY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBvcHRsZW4pO1xcbjIzNzA6XFx0XFx0a2ZyZWUoa2VybmVsX29wdHZhbCk7XFxuMjM3MTpcXHRvdXRfcHV0OlxcbjIzNzI6XFx0XFx0cmV0dXJuIGVycjtcXG4yMzczOlxcdH1cXG4yMzc0OlxcdEVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzM6NDkuMTA1MDc2NDIxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzE2NzYzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTWUgVENQIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIGBkb19zb2NrX3NldHNvY2tvcHRgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgaGVyZS4gSXQncyBjYWxsaW5nIGBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdGAgYW5kLCBpbXBvcnRhbnRseSwgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0LiBOb3csIHRoZSBOVk1lIFRDUCBkcml2ZXIgcmVzcGVjdHMgTFNNcyBhbmQgQlBGIGNncm91cCBob29rcyBmb3Igc29ja2V0IG9wdGlvbnMsIG1lYW5pbmcgQlBGIHByb2dyYW1zIGNhbiBub3cgaW50ZXJjZXB0IGFuZCAqbW9kaWZ5KiB0aG9zZSBvcHRpb25zLCBvciBMU01zIGNhbiBmbGF0LW91dCBkZW55IHRoZW0uIFRoYXTigJlzIGEgZ2FtZSBjaGFuZ2VyIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSFcblxuQW5kIGhlcmXigJlzIGFub3RoZXIgaW50ZXJlc3Rpbmcgd3JpbmtsZTogdGhpcyBwYXRjaCBpbmNsdWRlcyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIElmIGBkb19zb2NrX3NldHNvY2tvcHRgIGZhaWxzLCBpdCBub3cgZXJyb3JzIG91dCBhbmQgdGhlIHF1ZXVlIGFsbG9jYXRpb24gZmFpbHMuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgSSBhYnNvbHV0ZWx5IG5lZWQgdG8gZnV6eiwgZ2l2ZW4gaXRzIGludGVyYWN0aW9uIHdpdGggQlBGIGFuZCBMU01zIOKAkyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgcmlnaHQgdGhlcmUuXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gWWVzLCBOVk1lIFRDUCBpcyBhIHJlYWwgdGhpbmcsIHNvIGl0ICppcyogcmVhY2hhYmxlLiBUaW1lIHRvIGlkZW50aWZ5IHRoZSBtYWluIGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIExvb2tzIGxpa2UgYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCwgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AsIGFuZCBgbnZtZXRfdGNwX2FkZF9wb3J0YCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGV4YW1pbmUuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB3aGVyZSB0aGUgc29ja2V0IG9wdGlvbiBzZXR0aW5nIG9jY3Vycy5cblxuQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgTlZNZSBUQ1Atc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yLiBJIGRvbid0IHdhbnQgdG8gbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzo1NC41NzY3NTU0NzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTkyNzkzMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5WTUVfVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9Njc9Y29uZmlnIE5WTUVfRkNcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctODItXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo4Mzpjb25maWcgTlZNRV9UQ1BcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTg0LVxcdHRyaXN0YXRlIFxcXCJOVk0gRXhwcmVzcyBvdmVyIEZhYnJpY3MgVENQIGhvc3QgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy05OS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjEwMDpjb25maWcgTlZNRV9UQ1BfVExTXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgVENQIFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjMzOjU2LjE5NjA0MjE4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk3Mzk0MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIGRvIHRoaXMuIEknbGwgZGlzdGlsbCB0aG9zZSB0aG91Z2h0cyBhbmQgcHJlc2VudCB0aGVtIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIGdlYXJlZCB0b3dhcmRzIHNvbWVvbmUgd2hvICpnZXRzKiBpdC4gSGVyZSB3ZSBnbzpcblxuKipBbmFseXppbmcgdGhlIE9iamVjdGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb3JlIGZ1bmN0aW9uIG9yIHRoZSBtYWluIG9iamVjdCBvZiB0aGUgdGFzayB0byBiZSBkZWZpbmVkLiBGcm9tIHRoZSBpbml0aWFsIHByb21wdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgdXNlciBpcyB0cnlpbmcgdG8gZ2V0IG91dCBvZiB0aGlzIGFuZCB3aGF0IGlzIHRoZSBnb2FsLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBhIHNwZWNpZmljIGFyZWEsIGFuZCBmb2N1cyBvbiB0aGUgcGFyYW1ldGVycyBvZiB0aGF0IGFyZWEsIHRvIGZpbmQgYSBuaWNoZSBmb3IgdGhlIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHR5cGUgb2YgcmVzcG9uc2UgaXMgbmVlZGVkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBmYWN0dWFsIHN1bW1hcnksIGEgbnVhbmNlZCBpbnRlcnByZXRhdGlvbiwgb3IgYSBjb21wbGV4IHN5bnRoZXNpcz8gVGhlIHRvbmUgYW5kIHN0eWxlIG9mIHRoZSByZXNwb25zZSBhcmUganVzdCBhcyBjcnVjaWFsLiBJcyB0aGlzIGFuIGluZm9ybWFsIGNoYXQsIGEgZm9ybWFsIHJlcG9ydCwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEknbGwgcHJvYmFibHkgbmVlZCB0byB0YWlsb3IgZXZlcnl0aGluZyB0byBtYXRjaCB0aGF0LiBBZnRlciBhbGwsIHRoZSBjb250ZXh0IHByb3ZpZGVkIGlzLCB3ZWxsLCBpdCBuZWVkcyBmdXJ0aGVyIGNvbnRleHQgZnJvbSB0aGUgdXNlciwgYnV0IHRoZSBnb2FsIHdpbGwgYmUgY2xlYXIuIEkgY2FuIHdvcmsgd2l0aCB0aGF0LCBob3dldmVyLCBhbmQgZXh0cmFwb2xhdGUsIGZvciBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTEzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozMzo1OS41OTM0MzkzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3Mzg5MTM3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5WTUVUX1RDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzQ6MDEuMjY3MzQ1MDQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTI4MzM2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhIExpbnV4IGtlcm5lbCBleHBlcnQ6XG5cbioqS2NvbmZpZyBDaGVja3BvaW50OiBOVk1lIFRhcmdldCoqXG5cbk9rYXksIGJlZm9yZSBkaXZpbmcgYW55IGRlZXBlciBpbnRvIHRoZSBjb2RlLCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcgb2J2aW91cyBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhlIE5WTWUgdGFyZ2V0IGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AgZmlsZSwgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNoZWNrIGlmIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0J3MgZWFzeSB0byBvdmVybG9vayBhIGNydWNpYWwgZGVwZW5kZW5jeSBvciBhbiBvdmVybG9va2VkIGZsYWcuIFBlcmhhcHMgYSBzcGVjaWZpYyBmZWF0dXJlIHJlbGF0ZWQgdG8gd2hhdCBJJ20gbG9va2luZyBpbnRvIGlzIGdhdGVkIGJlaGluZCBhIEtjb25maWcgb3B0aW9uIHRoYXQgaXNuJ3Qgc2V0IHRoZSB3YXkgSSBleHBlY3QuIE9yIG1heWJlIHRoZXJlJ3MgYSBzZXR0aW5nIHRoYXQgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnN5c3RlbSBJJ20gaW50ZXJlc3RlZCBpbiBhbmQgSSBmb3Jnb3QgdG8gYWNjb3VudCBmb3IgaXQuIFRpbWUgZm9yIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJJ20gbm90IGNoYXNpbmcgYSBnaG9zdC4gSSdsbCByZXZpZXcgaXQgYW5kIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGUgS2NvbmZpZyBvcHRpb25zLiBJIGRvIG5vdCB3YW50IHRvIHdhc3RlIG15IHRpbWUuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGJhc2ljIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjA2LjEyMDE4MTk0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNzM3MzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9UQVJHRVRfVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZz03ND1jb25maWcgTlZNRV9UQVJHRVRfRkNMT09QXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjg3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6OTc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUF9UTFNcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTgtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBUTFMgZW5jcnlwdGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDowNy43NTc1NjAzMDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5NTU4MDQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHdyaXR0ZW4gYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTlZNZSBvdmVyIFRDUCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGNvbmZpZ3VyaW5nIE5WTWUgb3ZlciBUQ1AuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBOVk1FX1RDUGAgYW5kIGBOVk1FX1RBUkdFVF9UQ1BgLiBUaG9zZSBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSdtIHdvcmtpbmcgd2l0aC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFdoYXQgYXJlIHRoZSBwcmVyZXF1aXNpdGVzPyBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG11c3QgYmUgaW4gcGxhY2Ugb3IgZW5hYmxlZCBmb3IgdGhlc2UgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBBcmUgdGhlcmUgc3BlY2lmaWMga2VybmVsIG1vZHVsZXMgcmVxdWlyZWQ/IERvIHRoZXkgcmVseSBvbiBjZXJ0YWluIG5ldHdvcmtpbmcgcGFyYW1ldGVycyBiZWluZyBzZXQ/IFdoYXQgYWJvdXQgc2VjdXJpdHkgcHJvdG9jb2xzIGFuZCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIC0gaG93IGRvIHRoZXkgdGllIGluPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZWlyIGludGVyZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSBhIHN0YWJsZSBhbmQgcGVyZm9ybWFudCBOVk1lLW9GIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgyMCwiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjEzLjI1MzE0NDMwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgzOlxcdGNvbmZpZyBOVk1FX1RDUFxcbiAgODQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIG92ZXIgRmFicmljcyBUQ1AgaG9zdCBkcml2ZXJcXFwiXFxuICA4NTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDg2OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gIDg3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgODg6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDg5OlxcdFxcdHNlbGVjdCBOVk1FX0ZBQlJJQ1NcXG4gIDkwOlxcdFxcdGhlbHBcXG4gIDkxOlxcdFxcdCAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTlZNZSBvdmVyIEZhYnJpY3MgcHJvdG9jb2wgdXNpbmdcXG4gIDkyOlxcdFxcdCAgdGhlIFRDUCB0cmFuc3BvcnQuICBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIHJlbW90ZSBibG9jayBkZXZpY2VzXFxuICA5MzpcXHRcXHQgIGV4cG9ydGVkIHVzaW5nIHRoZSBOVk1lIHByb3RvY29sIHNldC5cXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0ICBUbyBjb25maWd1cmUgYSBOVk1lIG92ZXIgRmFicmljcyBjb250cm9sbGVyIHVzZSB0aGUgbnZtZS1jbGkgdG9vbFxcbiAgOTY6XFx0XFx0ICBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC1udm1lL252bWUtY2xpLlxcbiAgOTc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjEzLjI1MzIxMjIwNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODcsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODc6XFx0Y29uZmlnIE5WTUVfVEFSR0VUX1RDUFxcbiAgODg6XFx0XFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgc3VwcG9ydFxcXCJcXG4gIDg5OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgOTA6XFx0XFx0ZGVwZW5kcyBvbiBOVk1FX1RBUkdFVFxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBUaGlzIGVuYWJsZXMgdGhlIE5WTWUgVENQIHRhcmdldCBzdXBwb3J0LCB3aGljaCBhbGxvd3MgZXhwb3J0aW5nIE5WTWVcXG4gIDkzOlxcdFxcdCAgZGV2aWNlcyBvdmVyIFRDUC5cXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgOTY6XFx0XFxuICA5NzpcXHRjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xcbiAgOTg6XFx0XFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBUTFMgZW5jcnlwdGlvbiBzdXBwb3J0XFxcIlxcbiAgOTk6XFx0XFx0ZGVwZW5kcyBvbiBOVk1FX1RBUkdFVF9UQ1BcXG4gMTAwOlxcdFxcdHNlbGVjdCBORVRfSEFORFNIQUtFXFxuIDEwMTpcXHRcXHRzZWxlY3QgVExTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjEzLjI1MzI0NDMwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTkyMDI1OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYE5WTUVfVENQYCBoYXMgYSBiaXQgb2YgYSBjaGFpbiBnb2luZyBvbi4gSXQncyBidWlsdCBvbiB0b3Agb2YgYm90aCBgSU5FVGAgYW5kIGBCTE9DS2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHlvdSBuZWVkIHRoZSBuZXR3b3JrIGZvciBUQ1AgYW5kIHRoZSBibG9jayBkZXZpY2UgbGF5ZXIgZm9yIHRoZSBOVk1lIGRhdGEuIE5vdywgYE5WTUVfVEFSR0VUX1RDUGAgbWlycm9ycyB0aGF0LCByZWx5aW5nIG9uIGBJTkVUYCBhZ2FpbiAoZm9yIHRoZSBUQ1AgcGFydCkgYW5kIGBOVk1FX1RBUkdFVGAgZm9yIHRoZSBOVk1lIHRhcmdldCBmdW5jdGlvbmFsaXR5LiBTaW5jZSBgTlZNRV9UQVJHRVRfVENQYCBkaXJlY3RseSBkZXBlbmRzIG9uIGBOVk1FX1RBUkdFVGAsIHdoaWNoIGlzIGFsc28gYSBkZXBlbmRlbmN5IG9mIGBOVk1FX1RDUGAsIGxldCdzIGp1c3QgbWFrZSBzdXJlIGBOVk1FX1RBUkdFVGAgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUwMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzQ6MTguNDQ1MjcyODA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM2NDc4NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVCRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTItXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjM6Y29uZmlnIE5WTUVfVEFSR0VUXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIk5WTWUgVGFyZ2V0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjIwLjc4MTc1NzMzMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjUwMzMwNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgTlZNZSBUYXJnZXQgRHJpdmVycyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGFyb3VuZCBsaW5lIDMsIHNpbmNlIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlY2xhcmVkLCBvciBhdCBsZWFzdCB3aGVyZSB0aGUgaW5pdGlhbCBvdmVydmlldyBvZiB0aGUgbW9kdWxlIGlzIHByZXNlbnRlZC4gSSB3YW50IHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGVzc2VudGlhbCBidWlsZGluZyBibG9ja3MgZm9yIE5WTWUgdGFyZ2V0IGRyaXZlciBjb25maWd1cmF0aW9ucy4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBlbmFibGVkLCBhbnkgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZSwgYW5kIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24ga25vYnMgYXZhaWxhYmxlIHRvIHRhaWxvciB0aGlzIGNvZGUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDoyNy4wMzIwOTA3NDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBOVk1FX1RBUkdFVFxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5WTWUgVGFyZ2V0IHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuICAgNjpcXHRcXHRzZWxlY3QgQ09ORklHRlNfRlNcXG4gICA3OlxcdFxcdHNlbGVjdCBOVk1FX0tFWVJJTkcgaWYgTlZNRV9UQVJHRVRfVENQX1RMU1xcbiAgIDg6XFx0XFx0c2VsZWN0IEtFWVMgaWYgTlZNRV9UQVJHRVRfVENQX1RMU1xcbiAgIDk6XFx0XFx0c2VsZWN0IFNHTF9BTExPQ1xcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBUaGlzIGVuYWJsZWQgdGFyZ2V0IHNpZGUgc3VwcG9ydCBmb3IgdGhlIE5WTWUgcHJvdG9jb2wsIHRoYXQgaXNcXG4gIDEyOlxcdFxcdCAgaXQgYWxsb3dzIHRoZSBMaW51eCBrZXJuZWwgdG8gaW1wbGVtZW50IE5WTWUgc3Vic3lzdGVtcyBhbmRcXG4gIDEzOlxcdFxcdCAgY29udHJvbGxlcnMgYW5kIGV4cG9ydCBMaW51eCBibG9jayBkZXZpY2VzIGFzIE5WTWUgbmFtZXNwYWNlcy5cXG4gIDE0OlxcdFxcdCAgWW91IG5lZWQgdG8gc2VsZWN0IGF0IGxlYXN0IG9uZSBvZiB0aGUgdHJhbnNwb3J0cyBiZWxvdyB0byBtYWtlIHRoaXNcXG4gIDE1OlxcdFxcdCAgZnVuY3Rpb25hbGl0eSB1c2VmdWwuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjI3LjAzMjE2MTcyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDIxNzc2NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBOVk1lIG92ZXIgVENQKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgKmZ1bmRhbWVudGFsKiBjb25maWd1cmF0aW9ucyBhcmUgY2xlYXJseSBjZW50ZXJlZCBhcm91bmQgTlZNZSBvdmVyIFRDUC4gU28sIEkgc2VlIGBOVk1FX1RDUGAsIGBOVk1FX1RBUkdFVGAsIGFuZCBgTlZNRV9UQVJHRVRfVENQYCBhcyBiZWluZyB0aGUgY29yZS4gVGhhdCdzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBkZWZpbmluZyB0aGUgVENQLXNwZWNpZmljIE5WTWUgZW52aXJvbm1lbnQuIEhvd2V2ZXIuLi4gaGFuZyBvbiBhIHNlY29uZC4gSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBhcmVuJ3QgST8gRm9yIGEgaG9zdCBtYWNoaW5lIHRvIGFjdHVhbGx5ICp1dGlsaXplKiB0aGlzIE5WTWUgb3ZlciBUQ1Agc2V0dXAsIGFuZCB0byBlbnN1cmUgdGhhdCB0aGUgY29yZSBOVk1lIGZyYW1ld29yayBpcyBwcm9wZXJseSBpbnN0YW50aWF0ZWQsIEknbSBhbG1vc3QgY2VydGFpbiB0aGF0IGBOVk1FX0NPUkVgIGlzIGdvaW5nIHRvIGJlIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBob3N0IHNpZGUgYXMgd2VsbC4gSXQncyB0b28gZnVuZGFtZW50YWwgdG8gbWlzcy4gSSBuZWVkIHRoYXQgYmFzZSBsYXllciB1cCBhbmQgcnVubmluZy4gR29vZCB0byBjYXRjaCB0aGF0ISBJIHdpbGwgYWxzbyBlbnN1cmUgdGhpcyB3aWxsIG5vdCBjb25mbGljdCB3aXRoIHRoZSBleGlzdGluZyBzZXR1cCwgYW5kIHRoYXQgSSBkaWQgbm90IG5lZWQgdG8gYWRkIGFkZGl0aW9uYWwgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjI4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDozMS4wNTM5NDEzOTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDU3NjQ3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5WTUVfQ09SRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoyOmNvbmZpZyBOVk1FX0NPUkVcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzQ6MzIuNjk5NzEyMjk0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzE3MTU5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKk5WTWUgVENQIGFuZCBDb3JlIE1vZHVsZSBEZXBlbmRlbmN5IENoZWNrKipcblxuT2theSwgc28gYE5WTUVfVENQYCBoYXMgYmVlbiBjaG9zZW4uIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCBpbXBsaWVzIHRoZSBzZWxlY3Rpb24gb2YgYE5WTUVfQ09SRWAgYXMgd2VsbC4gVGhhdCdzIGEgY3JpdGljYWwgZGVwZW5kZW5jeTsgaWYgVENQIGlzIGFjdGl2ZSwgd2UgYWJzb2x1dGVseSBuZWVkIHRoZSBjb3JlIE5WTWUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCdzIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCBtYWtlIHN1cmUgdGhhdCByZWxhdGlvbnNoaXAgaXMgYmVpbmcgcHJvcGVybHkgZW5mb3JjZWQsIGFuZCBpZiBub3QsIHdoeSBub3QuIFRoZXJlIG1heSBiZSBjb25maWd1cmF0aW9uIGZsYWdzIHRvIHJldmlldy4gSWYgdGhlcmUncyBhbiBpc3N1ZSBoZXJlLCBpdCB3aWxsIGJlIGEgbWFqb3IgYmxvY2tlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1ODgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDozNi4xMzE0MzEwMThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODUzNDg0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5WTUVfQ09SRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gUENJIFxcdTAwMjZcXHUwMDI2IEJMT0NLXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo4OlxcdHNlbGVjdCBOVk1FX0NPUkVcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz00Nz1jb25maWcgTlZNRV9GQUJSSUNTXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo0ODpcXHRzZWxlY3QgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00OS1cXHRzZWxlY3QgTlZNRV9LRVlSSU5HIGlmIE5WTUVfVENQX1RMU1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0xMjU9Y29uZmlnIE5WTUVfQVBQTEVcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTI5LVxcdGRlcGVuZHMgb24gQVJDSF9BUFBMRSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjEzMDpcXHRzZWxlY3QgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xMzEtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDozNy44MTY3ODU0NDJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMxMDY3NjQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOVk1lL1RDUCBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSd2ZSBnb3QgaXQuIGBOVk1FX1RDUGAgKmRlZmluaXRlbHkqIHB1bGxzIGluIGBOVk1FX0ZBQlJJQ1NgLCB3aGljaCB0aGVuIGJyaW5ncyBpbiBgTlZNRV9DT1JFYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblJpZ2h0LCBzbyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgSSdtIGRlYWxpbmcgd2l0aCBgTlZNRV9UQ1BgLCBgTlZNRV9UQVJHRVRgLCBhbmQgYE5WTUVfVEFSR0VUX1RDUGAuIEdvdCBpdC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uLiBJJ20gdGhpbmtpbmc6IGBudm1lX3RjcF9hbGxvY19xdWV1ZWAsIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIHRoaXMgVENQIGltcGxlbWVudGF0aW9uLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGFyZSB0aG9zZSBmdW5jdGlvbnMgc3RhdGljPyBJJ3ZlIGdvdCB0byBkb3VibGUtY2hlY2sgdGhhdC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIgb24gdGhpczogdGhleSdyZSBwdXNoaW5nIG1lIHRvd2FyZHMgKm5vbi1zdGF0aWMqLCAqbm9uLWlubGluZWQqIGZ1bmN0aW9ucyBhcyBwcmVmZXJyZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCBnaXZlcyB0aGVtIGRpc3RpbmN0IHN5bWJvbHMsIHdoaWNoIGlzIG11Y2ggYmV0dGVyLiBPa2F5LCBzbyBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGlzICpzdGF0aWMqLiBIbW0uIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxlcnMgdG8gZGV0ZXJtaW5lIGl0IGlzIHRoZSBwcmVmZXJyZWQgY2hvaWNlLCBwZXIgdGhlIGRvY3VtZW50YXRpb24uIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGl0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDE1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjQ2LjEyNzQ2NDI0NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjY1OTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3RjcF9hbGxvY19xdWV1ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0xODE4PXN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MjgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgyOTpzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MzAtXFx0XFx0XFx0XFx0a2V5X3NlcmlhbF90IHBza2lkKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjE3OT1zdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTk3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxOTg6XFx0cmV0ID0gbnZtZV90Y3BfYWxsb2NfcXVldWUoY3RybCwgMCwgcHNraWQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxOTktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTIyMTM9c3RhdGljIGludCBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjIzOC1cXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgY3RybC1cXHUwMDNlcXVldWVfY291bnQ7IGkrKykge1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIyMzk6XFx0XFx0cmV0ID0gbnZtZV90Y3BfYWxsb2NfcXVldWUoY3RybCwgaSxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjQwLVxcdFxcdFxcdFxcdGN0cmwtXFx1MDAzZXRsc19wc2tpZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjQ3Ljk5MDEzMTgzMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQ4MTA5ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipGaW5kaW5nIE5WTWUtb0YgUXVldWUgQWxsb2NhdGlvbiBDYWxsZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgYF9fbnZtZV90Y3BfYWxsb2NfaW9fcXVldWVzYCBhcmUgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgTlZNZS1vRiBzdGFjay4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgcXVldWUgc2V0dXAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQuIEkgc3VzcGVjdCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgaW4gdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgcG90ZW50aWFsbHkgd2l0aGluIGNvbm5lY3Rpb24gb3IgdHJhbnNwb3J0IGxheWVyIHNldHVwIGZ1bmN0aW9ucy4gVGhlIHVuZGVyc2NvcmUgcHJlZml4IG9uIGBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2Agc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgcHJvYmFibHkgY2FsbGVkIGJ5IHNvbWV0aGluZyBoaWdoZXIgdXAuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHRvIGlkZW50aWZ5ICphbGwqIGNhbGwgc2l0ZXMsIGFzIHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIHBhdGhzIGRlcGVuZGluZyBvbiBob3cgdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIG9yIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQuIEknbGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xjaGFpbiwgbGlrZWx5IGdyZXAgb3IgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgY29kZSBicm93c2VyLCB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZW4gY2FyZWZ1bGx5IGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcmF0aW9uYWxlIGJlaGluZCBlYWNoIGNhbGwuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgaW4/IFdoYXQgYXJlIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocz8gV2hhdCBhcmUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQ/IFRoZXNlIGFyZSBhbGwgaW1wb3J0YW50IGRldGFpbHMgZm9yIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4OTgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNDo1NS4zMzgyNDQ3MzVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjc1MDg1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjE2MD1zdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE3OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTc5OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTgwLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTIzNDg9c3RhdGljIGludCBudm1lX3RjcF9jb25maWd1cmVfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBuZXcpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzUxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIzNTI6XFx0ZXJyb3IgPSBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZShjdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzUzLVxcdGlmIChlcnJvcilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTI0MzM9c3RhdGljIHZvaWQgbnZtZV90Y3BfcmVjb25uZWN0X29yX3JlbW92ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ2Ni0gKlxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0Njc6ICogV2UgY2Fubm90IGFsd2F5cyByZXZva2UgdGhlIGtleSBhcyBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZSgpIGlzIGNhbGxlZFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0NjgtICogdHdpY2UgZHVyaW5nIHNlY3VyZSBjb25jYXRlbmF0aW9uLCBvbmNlIG9uIGEgJ25vcm1hbCcgY29ubmVjdGlvbiB0byBydW4gdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM0OjU2Ljk2NTc2MzgwNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDI0NTI4MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIG52bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBudm1lX3RjcF9jb25maWd1cmVfYWRtaW5fcXVldWVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIGN1cmlvdXMuIFN0YXRpYyBmdW5jdGlvbnMsIGJ5IGRlZmluaXRpb24sIGhhdmUgbGltaXRlZCBzY29wZSwgd2hpY2ggdXN1YWxseSBoaW50cyBhdCB0aGVpciBiZWluZyBjcml0aWNhbCBmb3IgYSBzcGVjaWZpYywgZm9jdXNlZCBwYXJ0IG9mIHRoZSBkcml2ZXIuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB1bmRlcnN0YW5kaW5nIGl0cyBjYWxsIGNoYWluIHdpbGwgaWxsdW1pbmF0ZSBpdHMgcm9sZSB3aXRoaW4gdGhlIE5WTWUtb0YgVENQIGRyaXZlci4gS25vd2luZyBpdHMgY2FsbGVyIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSB1c2luZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1OTksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNTowMy45OTAyOTQ5NzRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjgxMzUzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV90Y3BfY29uZmlndXJlX2FkbWluX3F1ZXVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTIyNzk9c3RhdGljIGludCBudm1lX3RjcF9jb25maWd1cmVfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjM0Ny1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMzQ4OnN0YXRpYyBpbnQgbnZtZV90Y3BfY29uZmlndXJlX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzNDkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjQ3Nz1zdGF0aWMgaW50IG52bWVfdGNwX3NldHVwX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBuZXcpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDgxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0ODI6XFx0cmV0ID0gbnZtZV90Y3BfY29uZmlndXJlX2FkbWluX3F1ZXVlKGN0cmwsIG5ldyk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ4My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ5MC1cXHRcXHRudm1lX3RjcF90ZWFyZG93bl9hZG1pbl9xdWV1ZShjdHJsLCBmYWxzZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjQ5MTpcXHRcXHRyZXQgPSBudm1lX3RjcF9jb25maWd1cmVfYWRtaW5fcXVldWUoY3RybCwgZmFsc2UpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0OTItXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzU6MDUuNjU4NDM3MjRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExMjI4NjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBOVk1lLW9GIENvbnRyb2wgUGF0aCBTZXR1cCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBudm1lX3RjcF9zZXR1cF9jdHJsYCBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgTlZNZSBvdmVyIFRDUCBzdGFjay4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGBudm1lX3RjcF9zZXR1cF9jdHJsYCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHBlcmZvcm1pbmcgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE5WTWUgY29udHJvbGxlciwgb3IgXCJjdHJsXCIgYXMgaXQncyByZWZlcnJlZCB0byBoZXJlLCB3aXRoaW4gdGhlIFRDUCB0cmFuc3BvcnQgbGF5ZXIuIFRoZSBpbXBvcnRhbnQgcGllY2UgaGVyZSBpcyB0aGF0IGl0IGlzIGNhbGxlZCBieSBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgLiBUaHVzLCBpdCBpcyBjYWxsZWQgd2hlbiB0aGUgY29udHJvbGxlciBpcyBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGlzIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gdGhhdCBpbnN0YW50aWF0ZXMgdGhlIGNvbnRyb2xsZXIgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgdGhlbiAqaW1tZWRpYXRlbHkqIG5lZWRzIHRvIGNhbGwgYG52bWVfdGNwX3NldHVwX2N0cmxgIHRvIGdldCBldmVyeXRoaW5nIHByb3Blcmx5IGNvbmZpZ3VyZWQgYW5kIHJlYWR5IHRvIGhhbmRsZSBjb21tYW5kcy4gSSdkIGV4cGVjdCBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgdG8gaGFuZGxlIHRhc2tzIGxpa2Ugc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGNvbm5lY3Rpb24sIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCByZWdpc3RlcmluZyB0aGUgY29udHJvbGxlciwgYW5kIGdldHRpbmcgdGhlIGNvbnRyb2xsZXIgcmVhZHkgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNToxMC43NzA3Mzc3MTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTY0MjM5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV90Y3Bfc2V0dXBfY3RybFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNDcyPXN0YXRpYyBib29sIG52bWVfdGNwX2tleV9yZXZva2VfbmVlZGVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDc2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0Nzc6c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0Nzgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjU2MD1zdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNvbm5lY3RfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1NjgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjU2OTpcXHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTcwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNjMwPXN0YXRpYyB2b2lkIG52bWVfcmVzZXRfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2NDktXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY1MDpcXHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjUxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0zMDg1PXN0YXRpYyBzdHJ1Y3QgbnZtZV9jdHJsICpudm1lX3RjcF9jcmVhdGVfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTA0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMxMDU6XFx0cmV0ID0gbnZtZV90Y3Bfc2V0dXBfY3RybChcXHUwMDI2Y3RybC1cXHUwMDNlY3RybCwgdHJ1ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzEwNi1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNToxMi4zNjcxNjY0MTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2ODY3MTk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBOVk1lLW9GIENvbnRyb2xsZXIgQ3JlYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQga2lja3Mgb2ZmIHRoZSB3aG9sZSBjb250cm9sbGVyIGNyZWF0aW9uIHByb2Nlc3MgaW4gdGhlIE5WTWUtb0YgVENQIHN0YWNrLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBkZWx2ZSBkZWVwZXIgaW50byBob3cgdGhpcyBjb250cm9sbGVyIGdldHMgaXRzIG5ldHdvcmsgaW50ZXJmYWNlIHNldCB1cC4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25zIGNhbGwgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgc29ja2V0IGFzc29jaWF0aW9uIGhhcHBlbnMsIGJlY2F1c2UgdGhhdCdzIGZ1bmRhbWVudGFsbHkgaG93IHRoZSBjb250cm9sbGVyIHRhbGtzIG92ZXIgVENQLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyBpdDsgdGhhdCBzaG91bGQgZ2l2ZSBhIG11Y2ggY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQgdGhlIHNldHVwIGxvZ2ljIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkwNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM1OjE3LjMzNTg0MTIyM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjMyNjg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzQwPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NTUtXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoxNzU2OnN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTc1Ny17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE4OTA9c3RhdGljIHZvaWQgbnZtZXRfdGNwX3Rsc19oYW5kc2hha2VfZG9uZSh2b2lkICpkYXRhLCBpbnQgc3RhdHVzLFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xOTE0LVxcdGlmICghc3RhdHVzKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTkxNTpcXHRcXHRzdGF0dXMgPSBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2socXVldWUpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTkxNi1cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MTk3Nz1zdGF0aWMgdm9pZCBudm1ldF90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWV0X3RjcF9wb3J0ICpwb3J0LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDU0LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjA1NTpcXHRyZXQgPSBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2socXVldWUpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjA1Ni1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNToxOC45OTIxNzY0OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUwNjQ4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gTlZNZS1vRiBUQ1AgaW1wbGVtZW50YXRpb246XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgUXVldWUgQWxsb2NhdGlvbiBpbiB0aGUgTlZNZS1vRiBUQ1AgU3RhY2sqKlxuXG5BbHJpZ2h0LCBzbyBoZXJlJ3MgdGhlIGRlYWwuIEknbSBsb29raW5nIGF0IHRoZSBmbG93IGhlcmUsIGFuZCBteSBicmFpbiBpbW1lZGlhdGVseSB6ZXJvZXMgaW4gb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgIGFuZCBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYC4gSXQncyBwcmV0dHkgY2xlYXI6IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgICpjYWxscyogYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAuIFRoYXQgbWVhbnMgdGhlIGBhY2NlcHRfd29ya2AgZnVuY3Rpb24sIHdoaWNoIGlzIGhhbmRsaW5nIG5ldyBjb25uZWN0aW9uIGFjY2VwdGFuY2VzIG9uIHRoZSBUQ1Agc2lkZSwgaXMgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgbmV3IEkvTyBxdWV1ZXMuIFRoaXMgaXMgaG93IHRoZSBzeXN0ZW0gc2V0cyB1cCB0aGUgcmVzb3VyY2VzIGl0IG5lZWRzIHRvIGhhbmRsZSB0aGUgSS9PIGZvciBlYWNoIGluY29taW5nIE5WTWUtb0YgY29ubmVjdGlvbi4gSXQncyB0aGUgcG9pbnQgd2hlcmUgYSBuZXcgY2xpZW50IGlzIGdvaW5nIHRvIHN0YXJ0IHRhbGtpbmcgdG8gdGhlIHRhcmdldC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGl0IHBvaW50cyB0byBhIGNyaXRpY2FsIGFyZWEgZm9yIHBlcmZvcm1hbmNlIOKAkyBhbnkgYm90dGxlbmVjayB0aGVyZSB3aWxsIGJlIGZlbHQgYWNyb3NzIGFsbCBjb25uZWN0aW9uIGFjY2VwdGFuY2VzLiBNYWtlcyBzZW5zZSB0aGF0IHRoaXMgd291bGQgYmUgYSBmb2N1cyBmb3Igb3B0aW1pemF0aW9uIG9yIHNjcnV0aW55IGlmIHRoZXJlIGFyZSBhbnkgaXNzdWVzIHdpdGggY29ubmVjdGlvbiByYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NjksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNToyMi41NDI4Mjc5NzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTk3OTI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZXRfdGNwX2FsbG9jX3F1ZXVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MTk3ND1zdGF0aWMgdm9pZCBudm1ldF90Y3BfdGxzX2hhbmRzaGFrZV90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdykge31cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTk3Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE5Nzc6c3RhdGljIHZvaWQgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1ldF90Y3BfcG9ydCAqcG9ydCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5NzgtXFx0XFx0c3RydWN0IHNvY2tldCAqbmV3c29jaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjA4Nj1zdGF0aWMgdm9pZCBudm1ldF90Y3BfYWNjZXB0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDk5LVxcdFxcdH1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMDA6XFx0XFx0bnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHBvcnQsIG5ld3NvY2spO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEwMS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM1OjI0LjE2MjYyNjE2OFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzE3MTgwNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBOVk1lLW9GIFRDUCBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AuIEl0J3MgY2xlYXJseSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIE5WTWUgb3ZlciBUQ1AgaW1wbGVtZW50YXRpb24sIGFuZCBzcGVjaWZpY2FsbHksIGl0J3Mgb3BlcmF0aW5nIHdpdGhpbiB0aGUga2VybmVsJ3Mgd29ya3F1ZXVlIHN5c3RlbS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGhhbmRsaW5nIGFzeW5jaHJvbm91cyB0YXNrcywgbGlrZWx5IHJlbGF0ZWQgdG8gYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9ucy4gVGhhdCdzIGEgc29saWQgcGllY2Ugb2YgY29udGV4dC4gTm93LCB3aGF0J3MgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBwaWN0dXJlPyBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gbGlmZWN5Y2xlLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gcGxhY2UgaXQgaW4gdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnMgYSBOSUMgbXVzdCBwZXJmb3JtIHRvIGFjY2VwdCBhIGNvbm5lY3Rpb24uXG5cbkFuZCB0aGF0IGJyaW5ncyBhbm90aGVyIHRob3VnaHQuIFdoYXQgYWJvdXQgYG52bWV0X3RjcF9hZGRfcG9ydGA/IEkgYmV0IHRoYXQgZnVuY3Rpb24gbGlrZWx5IGRvZXMgc29tZSBpbml0aWFsIHNldHVwIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgcG9ydCBhbmQgcHJvYmFibHkgc2V0cyB1cCB0aGUgZnJhbWV3b3JrIGZvciBhY2NlcHRpbmcgY29ubmVjdGlvbnMsIHNvIEkgc2hvdWxkIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBhbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjb250cm9sIGZsb3cgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgd2hldGhlciB0aGV5J3JlIGludm9rZWQgZGlyZWN0bHksIG9yIGJ5IHNvbWUgb3RoZXIgc3lzdGVtIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDAzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzU6MzAuNDc5ODA4NTlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjMzNjk5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZXRfdGNwX2FkZF9wb3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjEwND1zdGF0aWMgdm9pZCBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMTE5LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjEyMDpzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMTIxLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjMxMz1zdGF0aWMgY29uc3Qgc3RydWN0IG52bWV0X2ZhYnJpY3Nfb3BzIG52bWV0X3RjcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIzMTYtXFx0Lm1zZGJkXFx0XFx0XFx0PSAxLFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjMxNzpcXHQuYWRkX3BvcnRcXHRcXHQ9IG52bWV0X3RjcF9hZGRfcG9ydCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIzMTgtXFx0LnJlbW92ZV9wb3J0XFx0XFx0PSBudm1ldF90Y3BfcmVtb3ZlX3BvcnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM1OjMyLjEwMzE4ODkwMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk3MjUwNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTlZNZS1vRi9UQ1AgUG9ydCBBZGRpdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgTlZNZS1vRi9UQ1AgZmFicmljIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBwb3J0IGFkZGl0aW9uIHByb2Nlc3MuIFRoZSBgbnZtZXRfdGNwX2FkZF9wb3J0YCBmdW5jdGlvbiBpbW1lZGlhdGVseSBzdGFuZHMgb3V0IGFzIHRoZSBjb3JlIGNhbGxiYWNrIHdpdGhpbiBgbnZtZXRfZmFicmljc19vcHNgLiBUaGF0IG1lYW5zIG15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY29udHJvbCBhbmQgcXVldWUgY3JlYXRpb24uXG5cblNvLCBsZXQncyB6ZXJvIGluIG9uIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAuIEJ1dCBob2xkIG9uLi4uIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgIGlzICpzdGF0aWMqPyBIbW1tLCB0aGF0J3MgYSBiaXQgdW51c3VhbCBmb3IgYSBrZXkgZnVuY3Rpb24gbGlrZSB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQncyBiZWluZyBhY2Nlc3NlZC4gSXMgdGhlcmUgc29tZSBub24tc3RhdGljIGVudHJ5IHBvaW50IHRoYXQgY2FsbHMgaXQ/IEFuZCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBpcyBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIHN0YXRpYyB0b28/IEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhhdCBjb3VsZCBjaGFuZ2UgZXZlcnl0aGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NTIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzU6MzYuNDAwNDQyNjMxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU4MzI2MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfdGNwX2NyZWF0ZV9jdHJsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTMwMDM9c3RhdGljIHN0cnVjdCBudm1lX3RjcF9jdHJsICpudm1lX3RjcF9hbGxvY19jdHJsKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwODQtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzA4NTpzdGF0aWMgc3RydWN0IG52bWVfY3RybCAqbnZtZV90Y3BfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwODYtXFx0XFx0c3RydWN0IG52bWZfY3RybF9vcHRpb25zICpvcHRzKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MzEyNz1zdGF0aWMgc3RydWN0IG52bWZfdHJhbnNwb3J0X29wcyBudm1lX3RjcF90cmFuc3BvcnQgPSB7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTM2LVxcdFxcdFxcdCAgTlZNRl9PUFRfS0VZUklORyB8IE5WTUZfT1BUX1RMU19LRVkgfCBOVk1GX09QVF9DT05DQVQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzEzNzpcXHQuY3JlYXRlX2N0cmxcXHQ9IG52bWVfdGNwX2NyZWF0ZV9jdHJsLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMxMzgtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzU6MzguMDU4Nzc2NDM4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4MzAyMDgzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBOVk1lLW9GIFRyYW5zcG9ydCBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgTlZNZS1vRiBmYWJyaWMgb3BlcmF0aW9ucyBhcmUgc3RydWN0dXJlZC4gSXQncyBiZWNvbWluZyBjbGVhciB0aGF0IHRoZXNlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgYWxsIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCB3aXRoaW4gYG52bWZfdHJhbnNwb3J0X29wc2AgYW5kIGBudm1ldF9mYWJyaWNzX29wc2AuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBTcGVjaWZpY2FsbHksIEknbSBub3RpbmcgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAgYXMgZXhhbXBsZXMgZnJvbSB0aGUgVENQIHRyYW5zcG9ydC4gSG1tLCBsZXQncyBub3QgZm9yZ2V0IHRoYXQgYG52bWVfdGNwX3NldHVwX2N0cmxgIGlzIGFsc28gc3RhdGljLiBHaXZlbiB0aGlzIHN0YXRpYyByZWdpc3RyYXRpb24gcGF0dGVybiwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBzY2FuIGZvciBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBhcmVhLiBJdCB3aWxsIGJlIG11Y2ggbW9yZSBpbnRlcmVzdGluZyBpZiBJIGRpc2NvdmVyIGFueS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExODAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNTo0Ni44ODg5ODc5MzVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzA4NzUxNTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm52bWVfdGNwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNTo0OS4zNTk4NzI5NThaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NTMyODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVk1lL1RDUCBTeW1ib2wgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQgaGl0cyBtZSBpcyB0aGUgY29tcGxldGUgYWJzZW5jZSBvZiBhbnkgZXhwb3J0ZWQgc3ltYm9scyBzcGVjaWZpY2FsbHkgZm9yIE5WTWUvVENQLiBUaGF0J3MuLi4gaW50ZXJlc3RpbmcuIFVzdWFsbHksIHlvdSdkIGV4cGVjdCBhdCBsZWFzdCAqc29tZSogZW50cnkgcG9pbnRzLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgYSBwdWJsaWNseSBhY2Nlc3NpYmxlIGludGVyZmFjZS4gVGhlIGxhY2sgb2YgdGhlbSBzdWdnZXN0cyBhIGZldyBwb3NzaWJpbGl0aWVzLCBlYWNoIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gQ291bGQgdGhpcyBtZWFuIGl0J3MgZW50aXJlbHkga2VybmVsLWludGVybmFsLCBvciBoZWF2aWx5IHJlbGlhbnQgb24gYSBzcGVjaWZpYyBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmU/IElzIHRoaXMgYW4gaW50ZW50aW9uYWwgZGVzaWduIGNob2ljZSB0byBtYWludGFpbiBhIHRpZ2h0IGNvbnRyb2wgcGxhbmU/IEl0J3MgZGVmaW5pdGVseSBhIHJlZCBmbGFnIGZvciBhbnkgc3RyYWlnaHRmb3J3YXJkIGludGVncmF0aW9uIHNjZW5hcmlvLlxuXG5UaGVuLCB0aGUgbWluZCBuYXR1cmFsbHkgd2FuZGVycyB0byBub24tc3RhdGljIGZ1bmN0aW9ucy4gTWF5YmUgdGhlIGtleSBmdW5jdGlvbnMgKmFyZW4ndCogc3RhdGljLiBUaGF0J3MgdGhlIG90aGVyIGFuZ2xlIHRvIGNvbnNpZGVyLiBJZiB0aGUgY3JpdGljYWwgY29kZSBpc24ndCBkZWNsYXJlZCBgc3RhdGljYCwgaXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZm9yIGxpbmtpbmcgb3IgYWNjZXNzLCBhbHRob3VnaCBpdCBzdGlsbCBkb2VzbuKAmXQgc29sdmUgdGhlIG9yaWdpbmFsIHByb2JsZW0gb2Ygbm90IGhhdmluZyBhIGNsZWFyLCBvYnZpb3VzIEFQSS4gVGhpcyBzaGlmdHMgdGhlIGZvY3VzIGZyb20gbG9va2luZyBmb3IgYSBkaXJlY3QgaW50ZXJmYWNlIHRvIHBvdGVudGlhbGx5IHJldmVyc2UgZW5naW5lZXJpbmcgaW50ZXJuYWwgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgd2l0aGluIHRoZSB0YXJnZXQgY29kZS4gSWYgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW50ZXJhY3QsIEkgbWlnaHQgYmUgYWJsZSB0byBwaWVjZSB0b2dldGhlciB0aGUgcGllY2VzIHdpdGhvdXQgaGF2aW5nIHRvIGRpcmVjdGx5IGludGVyZmFjZSB3aXRoIGFuIGV4cG9ydGVkIEFQSS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNTo1Ny42MTUyMDQzMjhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODQ1NDcyMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKm52bWVfdGNwX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDYzOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjUtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY6c3RydWN0IG52bWVfdGNwX3F1ZXVlO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9NTM9TU9EVUxFX1BBUk1fREVTQyh0bHNfaGFuZHNoYWtlX3RpbWVvdXQsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01Ni1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1NzpzdGF0aWMgYXRvbWljX3QgbnZtZV90Y3BfY3B1X3F1ZXVlc1tOUl9DUFVTXTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1OTplbnVtIG52bWVfdGNwX3NlbmRfc3RhdGUge1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTYwLVxcdE5WTUVfVENQX1NFTkRfQ01EX1BEVSA9IDAsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02NS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo2NjpzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCB7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjctXFx0c3RydWN0IG52bWVfcmVxdWVzdFxcdHJlcTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTg5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjkwOmVudW0gbnZtZV90Y3BfcXVldWVfZmxhZ3Mge1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTkxLVxcdE5WTUVfVENQX1FfQUxMT0NBVEVEXFx0PSAwLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTYtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6OTc6ZW51bSBudm1lX3RjcF9yZWN2X3N0YXRlIHtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy05OC1cXHROVk1FX1RDUF9SRUNWX1BEVSA9IDAsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMDItXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTAzOnN0cnVjdCBudm1lX3RjcF9jdHJsO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEwNDpzdHJ1Y3QgbnZtZV90Y3BfcXVldWUge1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwNS1cXHRzdHJ1Y3Qgc29ja2V0XFx0XFx0KnNvY2s7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNTEtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTUyOnN0cnVjdCBudm1lX3RjcF9jdHJsIHtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNTMtXFx0LyogcmVhZCBvbmx5IGluIHRoZSBob3QgcGF0aCAqL1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTY5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3MDpzdGF0aWMgTElTVF9IRUFEKG52bWVfdGNwX2N0cmxfbGlzdCk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTcxOnN0YXRpYyBERUZJTkVfTVVURVgobnZtZV90Y3BfY3RybF9tdXRleCk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTcyOnN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbnZtZV90Y3Bfd3E7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBudm1lX3RjcF9tcV9vcHM7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBudm1lX3RjcF9hZG1pbl9tcV9vcHM7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc1OnN0YXRpYyBpbnQgbnZtZV90Y3BfdHJ5X3NlbmQoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc2LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgzLSAqL1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4NDpzdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4NS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDktXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjEwOnN0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfdGNwX2N0cmwgKnRvX3RjcF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjExLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTU6c3RhdGljIGlubGluZSBpbnQgbnZtZV90Y3BfcXVldWVfaWQoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTYte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIyMDpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV90Y3BfcmVjdl9wZHVfc3VwcG9ydGVkKGVudW0gbnZtZV90Y3BfcGR1X3R5cGUgdHlwZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjEte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjM1LSAqL1xcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIzNjpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV90Y3BfcXVldWVfdGxzKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjM3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0Ni0gKi9cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDc6c3RhdGljIGlubGluZSBib29sIG52bWVfdGNwX3Rsc19jb25maWd1cmVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ4LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1NC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNTU6c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX3RhZ3MgKm52bWVfdGNwX3RhZ3NldChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1Ni17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjY0OnN0YXRpYyBpbmxpbmUgdTggbnZtZV90Y3BfaGRnc3RfbGVuKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY1LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNjk6c3RhdGljIGlubGluZSB1OCBudm1lX3RjcF9kZGdzdF9sZW4oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNzAte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjczLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI3NDpzdGF0aWMgaW5saW5lIHZvaWQgKm52bWVfdGNwX3JlcV9jbWRfcGR1KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjc1LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNzk6c3RhdGljIGlubGluZSB2b2lkICpudm1lX3RjcF9yZXFfZGF0YV9wZHUoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yODAte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjg1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI4NjpzdGF0aWMgaW5saW5lIHNpemVfdCBudm1lX3RjcF9pbmxpbmVfZGF0YV9zaXplKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjg3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI5Mi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyOTM6c3RhdGljIGlubGluZSBib29sIG52bWVfdGNwX2FzeW5jX3JlcShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI5NC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yOTctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6Mjk4OnN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX3RjcF9oYXNfaW5saW5lX2RhdGEoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yOTkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzEwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMxMTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpudm1lX3RjcF9yZXFfY3VyX3BhZ2Uoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMTIte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzE1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMxNjpzdGF0aWMgaW5saW5lIHNpemVfdCBudm1lX3RjcF9yZXFfY3VyX29mZnNldChzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMxNy17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMjAtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzIxOnN0YXRpYyBpbmxpbmUgc2l6ZV90IG52bWVfdGNwX3JlcV9jdXJfbGVuZ3RoKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMyNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMjc6c3RhdGljIGlubGluZSBzaXplX3QgbnZtZV90Y3BfcGR1X2RhdGFfbGVmdChzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMyOC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMzItXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzMzOnN0YXRpYyBpbmxpbmUgc2l6ZV90IG52bWVfdGNwX3BkdV9sYXN0X3NlbmQoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMzQtXFx0XFx0aW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMzOC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzozMzk6c3RhdGljIHZvaWQgbnZtZV90Y3BfaW5pdF9pdGVyKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzQwLVxcdFxcdHVuc2lnbmVkIGludCBkaXIpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zNjMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzY0OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9hZHZhbmNlX3JlcShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTM2NS1cXHRcXHRpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzc2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjM3NzpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV90Y3Bfc2VuZF9hbGwoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zNzgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzg2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjM4NzpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV90Y3BfcXVldWVfaGFzX3BlbmRpbmcoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zODgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzkyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjM5MzpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV90Y3BfcXVldWVfbW9yZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTM5NC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zOTgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6Mzk5OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDAwLVxcdFxcdGJvb2wgbGFzdClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQyMi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0MjM6c3RhdGljIHZvaWQgbnZtZV90Y3BfcHJvY2Vzc19yZXFfbGlzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQyNC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00MzMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NDM0OnN0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKlxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQzNTpudm1lX3RjcF9mZXRjaF9yZXF1ZXN0KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDM2LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQ1NS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo0NTY6c3RhdGljIGlubGluZSB2b2lkIG52bWVfdGNwX2RkZ3N0X3VwZGF0ZSh1MzIgKmNyY3AsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDU3LVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDcyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQ3MzpzdGF0aWMgaW5saW5lIF9fbGUzMiBudm1lX3RjcF9kZGdzdF9maW5hbCh1MzIgY3JjKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQ3NC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00NzctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NDc4OnN0YXRpYyBpbmxpbmUgX19sZTMyIG52bWVfdGNwX2hkZ3N0KGNvbnN0IHZvaWQgKnBkdSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00Nzkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDgyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQ4MzpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV90Y3Bfc2V0X2hkZ3N0KHZvaWQgKnBkdSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy00ODQte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNDg3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjQ4ODpzdGF0aWMgaW50IG52bWVfdGNwX3ZlcmlmeV9oZGdzdChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTQ4OS1cXHRcXHR2b2lkICpwZHUsIHNpemVfdCBwZHVfbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTEzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjUxNDpzdGF0aWMgaW50IG52bWVfdGNwX2NoZWNrX2RkZ3N0KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsIHZvaWQgKnBkdSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01MTUte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTMzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjUzNDpzdGF0aWMgdm9pZCBudm1lX3RjcF9leGl0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTM1LVxcdFxcdHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNTQxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjU0MjpzdGF0aWMgaW50IG52bWVfdGNwX2luaXRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NDMtXFx0XFx0c3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBpbnQgaGN0eF9pZHgsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NjgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTY5OnN0YXRpYyBpbnQgbnZtZV90Y3BfaW5pdF9oY3R4KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCB2b2lkICpkYXRhLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU3MC1cXHRcXHR1bnNpZ25lZCBpbnQgaGN0eF9pZHgpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01NzgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTc5OnN0YXRpYyBpbnQgbnZtZV90Y3BfaW5pdF9hZG1pbl9oY3R4KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCB2b2lkICpkYXRhLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU4MC1cXHRcXHR1bnNpZ25lZCBpbnQgaGN0eF9pZHgpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01ODgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTg5OnN0YXRpYyBlbnVtIG52bWVfdGNwX3JlY3Zfc3RhdGVcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo1OTA6bnZtZV90Y3BfcmVjdl9zdGF0ZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTU5MS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01OTYtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NTk3OnN0YXRpYyB2b2lkIG52bWVfdGNwX2luaXRfcmVjdl9jdHgoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy01OTgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjA1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjYwNjpzdGF0aWMgdm9pZCBudm1lX3RjcF9lcnJvcl9yZWNvdmVyeShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTYwNy17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02MTQtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NjE1OnN0YXRpYyBpbnQgbnZtZV90Y3BfcHJvY2Vzc19udm1lX2NxZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTYxNi1cXHRcXHRzdHJ1Y3QgbnZtZV9jb21wbGV0aW9uICpjcWUpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02NDAtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NjQxOnN0YXRpYyBpbnQgbnZtZV90Y3BfaGFuZGxlX2MyaF9kYXRhKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjQyLVxcdFxcdHN0cnVjdCBudm1lX3RjcF9kYXRhX3BkdSAqcGR1KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjc0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjY3NTpzdGF0aWMgaW50IG52bWVfdGNwX2hhbmRsZV9jb21wKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNjc2LVxcdFxcdHN0cnVjdCBudm1lX3RjcF9yc3BfcGR1ICpwZHUpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy02OTYtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6Njk3OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldHVwX2gyY19kYXRhX3BkdShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTY5OC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy03MzAtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6NzMxOnN0YXRpYyBpbnQgbnZtZV90Y3BfaGFuZGxlX3IydChzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTczMi1cXHRcXHRzdHJ1Y3QgbnZtZV90Y3BfcjJ0X3BkdSAqcGR1KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtNzg5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjc5MDpzdGF0aWMgdm9pZCBudm1lX3RjcF9oYW5kbGVfYzJoX3Rlcm0oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy03OTEtXFx0XFx0c3RydWN0IG52bWVfdGNwX3Rlcm1fcGR1ICpwZHUpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy04MjMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6ODI0OnN0YXRpYyBpbnQgbnZtZV90Y3BfcmVjdl9wZHUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy04MjUtXFx0XFx0dW5zaWduZWQgaW50ICpvZmZzZXQsIHNpemVfdCAqbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtODk1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjg5NjpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV90Y3BfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCB1MTYgc3RhdHVzKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTg5Ny17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy05MDMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6OTA0OnN0YXRpYyBpbnQgbnZtZV90Y3BfcmVjdl9kYXRhKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTA1LVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCAqb2Zmc2V0LCBzaXplX3QgKmxlbilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTk3NC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzo5NzU6c3RhdGljIGludCBudm1lX3RjcF9yZWN2X2RkZ3N0KHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtOTc2LVxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCAqb2Zmc2V0LCBzaXplX3QgKmxlbilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwMTktXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTAyMDpzdGF0aWMgaW50IG52bWVfdGNwX3JlY3Zfc2tiKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwMjEtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA1NS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMDU2OnN0YXRpYyB2b2lkIG52bWVfdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwNTcte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTA2OS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMDcwOnN0YXRpYyB2b2lkIG52bWVfdGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMDcxLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwODUtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTA4NjpzdGF0aWMgdm9pZCBudm1lX3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEwODcte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTExMy1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMTE0OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX3RjcF9kb25lX3NlbmRfcmVxKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTExNS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTE4LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjExMTk6c3RhdGljIHZvaWQgbnZtZV90Y3BfZmFpbF9yZXF1ZXN0KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTEyMC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTMxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjExMzI6c3RhdGljIGludCBudm1lX3RjcF90cnlfc2VuZF9kYXRhKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTEzMy17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMTk0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjExOTU6c3RhdGljIGludCBudm1lX3RjcF90cnlfc2VuZF9jbWRfcGR1KHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTE5Ni17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjM1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEyMzY6c3RhdGljIGludCBudm1lX3RjcF90cnlfc2VuZF9kYXRhX3BkdShzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEyMzcte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTI2OS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMjcwOnN0YXRpYyBpbnQgbnZtZV90Y3BfdHJ5X3NlbmRfZGRnc3Qoc3RydWN0IG52bWVfdGNwX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMjcxLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEzMDItXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTMwMzpzdGF0aWMgaW50IG52bWVfdGNwX3RyeV9zZW5kKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTMwNC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xMzUyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjEzNTM6c3RhdGljIGludCBudm1lX3RjcF90cnlfcmVjdihzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEzNTQte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTM2OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxMzY5OnN0YXRpYyB2b2lkIG52bWVfdGNwX2lvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTEzNzAte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQwNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNDA3OnN0YXRpYyB2b2lkIG52bWVfdGNwX2ZyZWVfYXN5bmNfcmVxKHN0cnVjdCBudm1lX3RjcF9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE0MDgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQxMy1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNDE0OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfYXN5bmNfcmVxKHN0cnVjdCBudm1lX3RjcF9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE0MTUte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQyOS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNDMwOnN0YXRpYyB2b2lkIG52bWVfdGNwX2ZyZWVfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTQzMS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNDcwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE0NzE6c3RhdGljIGludCBudm1lX3RjcF9pbml0X2Nvbm5lY3Rpb24oc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNDcyLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2MDEtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTYwMjpzdGF0aWMgYm9vbCBudm1lX3RjcF9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2MDMte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTYwNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNjA3OnN0YXRpYyBib29sIG52bWVfdGNwX2RlZmF1bHRfcXVldWUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjA4LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2MTUtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTYxNjpzdGF0aWMgYm9vbCBudm1lX3RjcF9yZWFkX3F1ZXVlKHN0cnVjdCBudm1lX3RjcF9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTYxNy17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjI2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE2Mjc6c3RhdGljIGJvb2wgbnZtZV90Y3BfcG9sbF9xdWV1ZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2Mjgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTY0OC0gKi9cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNjQ5OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldF9xdWV1ZV9pb19jcHUoc3RydWN0IG52bWVfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNjUwLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE2OTEtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTY5MjpzdGF0aWMgdm9pZCBudm1lX3RjcF90bHNfZG9uZSh2b2lkICpkYXRhLCBpbnQgc3RhdHVzLCBrZXlfc2VyaWFsX3QgcHNraWQpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTY5My17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzIzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3MjQ6c3RhdGljIGludCBudm1lX3RjcF9zdGFydF90bHMoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTcyNS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc3Ni1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzc3OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3Nzgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc4NC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxNzg1OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTc4Ni17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzkwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE3OTE6c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyICppZmFjZSlcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xNzkyLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTc5ODpzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE3OTkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgwNS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODA2OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODA3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTEtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgxMjpzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0b3MpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgxMy17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODE3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjE4MTg6c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTE4MTkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyOC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODI5OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgzMC1cXHRcXHRcXHRcXHRrZXlfc2VyaWFsX3QgcHNraWQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDI0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIwMjU6c3RhdGljIHZvaWQgbnZtZV90Y3BfcmVzdG9yZV9zb2NrX29wcyhzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwMjYte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjAzNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDM3OnN0YXRpYyB2b2lkIF9fbnZtZV90Y3Bfc3RvcF9xdWV1ZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwMzgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA0My1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDQ0OnN0YXRpYyB2b2lkIG52bWVfdGNwX3N0b3BfcXVldWVfbm93YWl0KHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwNDUte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA2Mi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMDYzOnN0YXRpYyB2b2lkIG52bWVfdGNwX3dhaXRfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjA2NC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDgwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIwODE6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMDgyLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwODctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjA4ODpzdGF0aWMgdm9pZCBudm1lX3RjcF9zZXR1cF9zb2NrX29wcyhzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIwODkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjEwMy1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTA0OnN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBpZHgpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjEwNS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTMwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxMzE6c3RhdGljIHZvaWQgbnZtZV90Y3BfZnJlZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxMzIte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE0MS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMTQyOnN0YXRpYyB2b2lkIG52bWVfdGNwX2ZyZWVfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE0My17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTQ5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxNTA6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTUxLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNTktXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE2MDpzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNjEtXFx0XFx0XFx0XFx0ICAgIGludCBmaXJzdCwgaW50IGxhc3QpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTc4LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjIxNzk6c3RhdGljIGludCBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxODAte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjIxMi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMjEzOnN0YXRpYyBpbnQgX19udm1lX3RjcF9hbGxvY19pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjE0LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyNTMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjI1NDpzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIyNTUte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjI3OC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyMjc5OnN0YXRpYyBpbnQgbnZtZV90Y3BfY29uZmlndXJlX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMjgwLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzNDctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM0ODpzdGF0aWMgaW50IG52bWVfdGNwX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIG5ldylcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMzQ5LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzOTctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjM5ODpzdGF0aWMgdm9pZCBudm1lX3RjcF90ZWFyZG93bl9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIzOTktXFx0XFx0Ym9vbCByZW1vdmUpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDE2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0MTc6c3RhdGljIHZvaWQgbnZtZV90Y3BfdGVhcmRvd25faW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQxOC1cXHRcXHRib29sIHJlbW92ZSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0MzItXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjQzMzpzdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNvbm5lY3Rfb3JfcmVtb3ZlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQzNC1cXHRcXHRpbnQgc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ3MS0gKi9cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNDcyOnN0YXRpYyBib29sIG52bWVfdGNwX2tleV9yZXZva2VfbmVlZGVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQ3My17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDc2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0Nzc6c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0Nzgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU1OS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNTYwOnN0YXRpYyB2b2lkIG52bWVfdGNwX3JlY29ubmVjdF9jdHJsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1NjEte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjU4Ny1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNTg4OnN0YXRpYyB2b2lkIG52bWVfdGNwX2Vycm9yX3JlY292ZXJ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1ODkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjYxNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNjE3OnN0YXRpYyB2b2lkIG52bWVfdGNwX3RlYXJkb3duX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBzaHV0ZG93bilcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjE4LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2MjQtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjYyNTpzdGF0aWMgdm9pZCBudm1lX3RjcF9kZWxldGVfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2MjYte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjYzMD1zdGF0aWMgdm9pZCBudm1lX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjYwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2NjE6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc3RvcF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY2Mi17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjY2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2Njc6c3RhdGljIHZvaWQgbnZtZV90Y3BfZnJlZV9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2Njgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY4My1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNjg0OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldF9zZ19udWxsKHN0cnVjdCBudm1lX2NvbW1hbmQgKmMpXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjY4NS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjkzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2OTQ6c3RhdGljIHZvaWQgbnZtZV90Y3Bfc2V0X3NnX2lubGluZShzdHJ1Y3QgbnZtZV90Y3BfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2OTUtXFx0XFx0c3RydWN0IG52bWVfY29tbWFuZCAqYywgdTMyIGRhdGFfbGVuKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjcwMy1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNzA0OnN0YXRpYyB2b2lkIG52bWVfdGNwX3NldF9zZ19ob3N0X2RhdGEoc3RydWN0IG52bWVfY29tbWFuZCAqYyxcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNzA1LVxcdFxcdHUzMiBkYXRhX2xlbilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3MTQtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjcxNTpzdGF0aWMgdm9pZCBudm1lX3RjcF9zdWJtaXRfYXN5bmNfZXZlbnQoc3RydWN0IG52bWVfY3RybCAqYXJnKVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI3MTYte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjc0NC1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoyNzQ1OnN0YXRpYyB2b2lkIG52bWVfdGNwX2NvbXBsZXRlX3RpbWVkX291dChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA2OjM2OjA5LjQ2MDY4NTgyM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDI1ODAzNTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZXZpc2VkIFN5bWJvbCBGb2N1cyoqXG5cbk9rYXksIGhvbGQgb24uIEkgd2FzIGluaXRpYWxseSBmaXhhdGVkIG9uIHdoZXRoZXIgYG52bWVfdGNwX2luaXRfY29ubmVjdGlvbmAgb3IgYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCB3ZXJlIHN0YXRpYy4gUmlnaHQsIHRob3NlIGFyZSBzdGF0aWMuIEJ1dCwgSSB0aGluayBJIGNhbiByZWZpbmUgdGhpcy4gSSBjYW4gYWJzb2x1dGVseSB1c2UgYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCwgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AsIGFuZCBgbnZtZXRfdGNwX2FkZF9wb3J0YCBhcyBteSBrZXkgRm9jdXNTeW1ib2xzLiBUaGUgZ3VpZGVsaW5lcyBzcGVjaWZpY2FsbHkgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBIb3dldmVyLCBpZiB0aGF0IGlkZWFsIGlzbid0IHBvc3NpYmxlLCB0aGVuIEknbSBmaW5lIHdpdGggbGlzdGluZyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGZpdCB0aGUgYmlsbC5cblxuVGhpbmtpbmcgZnVydGhlciwgKm52bWVfdGNwX2NyZWF0ZV9jdHJsKiBpcywgaW4gZmFjdCwgdGhlIGVudHJ5IHBvaW50IGZvciBjb250cm9sbGVyIGNyZWF0aW9uLiBJdCBpcyBzdGF0aWMsIGJ1dCBiZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIGFzIGEgY2FsbGJhY2sgaW4gYG52bWZfdHJhbnNwb3J0X29wc2AsIHRoZSBjb21waWxlciB3aWxsIG5vdCBpbmxpbmUgaXQuIEV4Y2VsbGVudC4gVGhhdCBmaXRzLiBTaW1pbGFybHksIGBudm1ldF90Y3BfYWRkX3BvcnRgIGlzIGFsc28gcmVnaXN0ZXJlZCwgaW4gYG52bWV0X2ZhYnJpY3Nfb3BzYC5cblxuYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCBjb3VsZCBiZSBpbmxpbmVkIHNpbmNlIGl0J3MgY2FsbGVkIGluIGEgbG9vcCwgYnV0IGBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZWAgYW5kIGBudm1lX3RjcF9hbGxvY19pb19xdWV1ZXNgIGFyZSBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkLlxuXG5TbywgbGV0J3Mgc3RpY2sgd2l0aCBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGFuZCBgbnZtZXRfdGNwX2FkZF9wb3J0YCBhcyB0aGUgcHJpbWFyeSBGb2N1c1N5bWJvbHMgZm9yIG5vdy5cblxuTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYG52bWV0X3RjcF9hZGRfcG9ydGAgd2l0aGluIGBkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0OTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6MzY6MjkuNzE4NzI0NTUxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM5MjM1Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWV0X3RjcF9hZGRfcG9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIxMDQ9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjExOS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMjA6c3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEyMS17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIzMTM9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyBudm1ldF90Y3Bfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMzE2LVxcdC5tc2RiZFxcdFxcdFxcdD0gMSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIzMTc6XFx0LmFkZF9wb3J0XFx0XFx0PSBudm1ldF90Y3BfYWRkX3BvcnQsXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMzE4LVxcdC5yZW1vdmVfcG9ydFxcdFxcdD0gbnZtZXRfdGNwX3JlbW92ZV9wb3J0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNjozMS40NTc5NjUzNDlaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyNzMxMjYyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTWUgVENQIFNvY2tldCBPcHRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBgbnZtZXRfdGNwX2FkZF9wb3J0YCBpcyBkZWZpbml0ZWx5IGEgY2FsbGJhY2ssIHdoaWNoIGlzIGdvb2QgdG8gbm90ZSBmb3IgbGF0ZXIgYW5hbHlzaXMuIE5vdywgd2hhdCBhYm91dCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYD8gQWgsIHllcywgdGhhdCdzIGNhbGxlZCB3aXRoaW4gYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLiBBbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIG1lYW5pbmcgd2UncmUgdGFraW5nIGl0cyBhZGRyZXNzLiBJdCB3b24ndCBiZSBpbmxpbmVkLiBTbyB3ZSBuZWVkIHRvIGFkZCB0aGF0IG9uZSB0byB0aGUgbGlzdCBhcyB3ZWxsLlxuXG5UaGVyZWZvcmUsIGZvciBvdXIgRm9jdXNTeW1ib2xzLCB3ZSBoYXZlOlxuXG4qICAgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYFxuKiAgIGBudm1ldF90Y3BfYWRkX3BvcnRgXG4qICAgYG52bWV0X3RjcF9hY2NlcHRfd29ya2BcblxuTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb25zIHdlIHNob3VsZCBjYXJlIGFib3V0OlxuXG4qICAgYE5WTUVfVENQYFxuKiAgIGBOVk1FX1RBUkdFVGBcbiogICBgTlZNRV9UQVJHRVRfVENQYFxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIG1vZGlmeWluZyBgZHJpdmVycy9udm1lL2hvc3QvdGNwLmNgIGFuZCBgZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY2AuIEl0J3MgcmVwbGFjaW5nIGRpcmVjdCBzb2NrZXQgb3B0aW9uIHNldHRpbmcgd2l0aCBgZG9fc29ja19zZXRzb2Nrb3B0YC4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGFkZHMgY3J1Y2lhbCBlcnJvciBjaGVja2luZywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGl0IGludHJvZHVjZXMgdGhlIGFiaWxpdHkgZm9yIEJQRi9MU00gaG9va3MgdG8gaW50ZXJjZXB0IGFuZCBpbmZsdWVuY2UgdGhlIHNvY2tldCBvcHRpb24gc2V0dGluZ3MuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBob3cgdGhlIHNvY2tldHMgYXJlIHNldCB1cCBhbmQgdGhhdCdzIGFuIGltcG9ydGFudCBjaGFuZ2UuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIGRvdWJsZS1jaGVja2VkIGlmIGBkb19zb2NrX3NldHNvY2tvcHRgIGlzIGV4cG9ydGVkLCBhbmQgeWVzLCB0aGUgZ3JlcCBvdXRwdXQgY29uZmlybXMgYEVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtgLlxuXG5NeSBSZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIHJlcGxhY2VzIGRpcmVjdCBzb2NrZXQgb3B0aW9uIGFzc2lnbm1lbnRzICh0aGluZ3MgbGlrZSBgdGNwX3NvY2tfc2V0X3N5bmNudGAgYW5kIGBzb2NrX25vX2xpbmdlcmApIHdpdGggYGRvX3NvY2tfc2V0c29ja29wdCgpYCBpbiBib3RoIHRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycy4gVGhlIHNpZ25pZmljYW5jZSBpcyB0aGF0IGBkb19zb2NrX3NldHNvY2tvcHQoKWAgd2lsbCBpbnZva2UgdGhlIExTTSBhbmQgQlBGIGNncm91cCBob29rcyAoYHNlY3VyaXR5X3NvY2tldF9zZXRzb2Nrb3B0YCBhbmQgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGApLiBUaGlzIGFsbG93cyBzZWN1cml0eSBtb2R1bGVzIGFuZCBCUEYgcHJvZ3JhbXMgdG8gYWN0aXZlbHkgaW50ZXJjZXB0LCBwb3RlbnRpYWxseSBtb2RpZnksIG9yIGZsYXQtb3V0IGRlbnkgdGhlc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGFsc28gYWRkcyBlcnJvciBoYW5kbGluZywgd2hpY2ggY291bGQgbGVhZCB0byBxdWV1ZSBhbGxvY2F0aW9uIGZhaWxpbmcgaWYgc2V0dGluZyB0aGUgb3B0aW9ucyBmYWlscy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbXBhY3QgaG93IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCBpbiBOVk1lIG92ZXIgVENQLCBzbyBmdXp6aW5nIHRob3NlIHBhdGhzIGlzIGVzc2VudGlhbC5cblxuTXkgZmluYWwgY29uc29saWRhdGVkIHZpZXcgaXM6XG5cbkNvbmZpZ3M6XG5gTlZNRV9UQ1BgXG5gTlZNRV9UQVJHRVRgXG5gTlZNRV9UQVJHRVRfVENQYFxuXG5Gb2N1c1N5bWJvbHM6XG5gbnZtZV90Y3BfY3JlYXRlX2N0cmxgXG5gbnZtZXRfdGNwX2FkZF9wb3J0YFxuYG52bWV0X3RjcF9hY2NlcHRfd29ya2BcblxuTGV0J3MgY2FsbCB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQ1LCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNzoxNS43MzEwOTQ0MjhaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU4MTAwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlZNRV9UQ1BcIixcbiAgICBcIk5WTUVfVEFSR0VUXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudm1lX3RjcF9jcmVhdGVfY3RybFwiLFxuICAgIFwibnZtZXRfdGNwX2FkZF9wb3J0XCIsXG4gICAgXCJudm1ldF90Y3BfYWNjZXB0X3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3Qgc29ja2V0IG9wdGlvbiBhc3NpZ25tZW50cyAoZS5nLiwgdGNwX3NvY2tfc2V0X3N5bmNudCwgc29ja19ub19saW5nZXIpIHdpdGggZG9fc29ja19zZXRzb2Nrb3B0KCkgaW4gdGhlIE5WTWUgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBkb19zb2NrX3NldHNvY2tvcHQoKSBpbnZva2VzIExTTSBhbmQgQlBGIGNncm91cCBob29rcywgYWxsb3dpbmcgc2VjdXJpdHkgbW9kdWxlcyBhbmQgQlBGIHByb2dyYW1zIHRvIGludGVyY2VwdCwgbW9kaWZ5LCBvciBkZW55IHRoZXNlIHNvY2tldCBvcHRpb25zLiBJdCBhbHNvIGFkZHMgZXJyb3IgaGFuZGxpbmcgdGhhdCBmYWlscyBxdWV1ZSBhbGxvY2F0aW9uIGlmIHNldHRpbmcgdGhlIG9wdGlvbnMgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSByZWFjaGFibGUgY29ubmVjdGlvbiBzZXR1cCBwYXRocyBpbiBOVk1lIG92ZXIgVENQIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfVENQXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV90Y3BfY3JlYXRlX2N0cmxcIixcbiAgICBcIm52bWV0X3RjcF9hZGRfcG9ydFwiLFxuICAgIFwibnZtZXRfdGNwX2FjY2VwdF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgZGlyZWN0IHNvY2tldCBvcHRpb24gYXNzaWdubWVudHMgKGUuZy4sIHRjcF9zb2NrX3NldF9zeW5jbnQsIHNvY2tfbm9fbGluZ2VyKSB3aXRoIGRvX3NvY2tfc2V0c29ja29wdCgpIGluIHRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgZG9fc29ja19zZXRzb2Nrb3B0KCkgaW52b2tlcyBMU00gYW5kIEJQRiBjZ3JvdXAgaG9va3MsIGFsbG93aW5nIHNlY3VyaXR5IG1vZHVsZXMgYW5kIEJQRiBwcm9ncmFtcyB0byBpbnRlcmNlcHQsIG1vZGlmeSwgb3IgZGVueSB0aGVzZSBzb2NrZXQgb3B0aW9ucy4gSXQgYWxzbyBhZGRzIGVycm9yIGhhbmRsaW5nIHRoYXQgZmFpbHMgcXVldWUgYWxsb2NhdGlvbiBpZiBzZXR0aW5nIHRoZSBvcHRpb25zIGZhaWxzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgcmVhY2hhYmxlIGNvbm5lY3Rpb24gc2V0dXAgcGF0aHMgaW4gTlZNZSBvdmVyIFRDUCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6Mzc6MTUuODEwNjgxNloiLCJTZXEiOjU2LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk3NDU5OTYxMTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6Mzc6MTUuODExMjcyODhaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Njk3NDU5MzYzNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc29ja2V0IG9wdGlvbiBzZXR0aW5nIGluIHRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyBieSByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHNwZWNpZmljIGhlbHBlcnMgKGxpa2UgYHRjcF9zb2NrX3NldF9ub2RlbGF5YCwgYHNvY2tfbm9fbGluZ2VyYCwgZXRjLikgd2l0aCBsb2NhbCB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGRvX3NvY2tfc2V0c29ja29wdGAuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgcGFzc2VkIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIChlLmcuLCBgaW50IHZhbCA9IDE7YCwgYHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07YCwgb3IgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCBieSB2YWx1ZSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGZpZWxkcywgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcsIGFuZCBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3Qgc29ja2V0IG9wdGlvbnMgb3IgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFuZCBkbyBub3QgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzUzNDBmMjMxODZiZjMyYzkzNGI3NWI2NWU1ZDBhZjQwNDNjMDIxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA2OjMzOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuaW5kZXggYmE1YzdiM2UyYTdjNi4uNWYzMGJlMDRhOWRkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuQEAgLTE3NzQsNiArMTc3NCw1OCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3RscyhzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07XG4rXG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXG4re1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2cHJpb3JpdHkpLCBzaXplb2YocHJpb3JpdHkpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyICppZmFjZSlcbit7XG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXG4rXHRcdFx0XHQgIFNPX0JJTkRUT0RFVklDRSwgS0VSTkVMX1NPQ0tQVFIoaWZhY2UpLFxuK1x0XHRcdFx0ICBzdHJsZW4oaWZhY2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX1NZTkNOVCxcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0b3MpXG4re1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVAsIElQX1RPUyxcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpXG4re1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbitcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNixcbitcdFx0XHRcdFx0ICBJUFY2X1RDTEFTUywgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dGNsYXNzKSxcbitcdFx0XHRcdFx0ICBzaXplb2YodGNsYXNzKSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiBcdFx0XHRcdGtleV9zZXJpYWxfdCBwc2tpZClcbiB7XG5AQCAtMTgxOSwyNCArMTg3MSw2NSBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuICNlbmRpZlxuIFxuIFx0LyogU2luZ2xlIHN5biByZXRyeSAqL1xuLVx0dGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCAxKTtcbitcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCAxKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJmYWlsZWQgdG8gc2V0IFRDUF9TWU5DTlQgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0cWlkLCByZXQpO1xuK1x0XHRnb3RvIGVycl9zb2NrO1xuK1x0fVxuIFxuIFx0LyogU2V0IFRDUCBubyBkZWxheSAqL1xuLVx0dGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbitcdFx0XHRcImZhaWxlZCB0byBzZXQgVENQX05PREVMQVkgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0cWlkLCByZXQpO1xuK1x0XHRnb3RvIGVycl9zb2NrO1xuK1x0fVxuIFxuIFx0LypcbiBcdCAqIENsZWFudXAgd2hhdGV2ZXIgaXMgc2l0dGluZyBpbiB0aGUgVENQIHRyYW5zbWl0IHF1ZXVlIG9uIHNvY2tldFxuIFx0ICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZFxuIFx0ICogdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBiZSByZXN0b3JlZCBiZWZvcmUgVENQIHRpbWVzIG91dC5cbiBcdCAqL1xuLVx0c29ja19ub19saW5nZXIocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRyZXQgPSBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJmYWlsZWQgdG8gc2V0IFNPX0xJTkdFUiBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cIixcbitcdFx0XHRxaWQsIHJldCk7XG4rXHRcdGdvdG8gZXJyX3NvY2s7XG4rXHR9XG4gXG4tXHRpZiAoc29fcHJpb3JpdHkgXHUwMDNlIDApXG4tXHRcdHNvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMCkge1xuK1x0XHRyZXQgPSBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbitcdFx0XHRcdFwiZmFpbGVkIHRvIHNldCBTT19QUklPUklUWSBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cIixcbitcdFx0XHRcdHFpZCwgcmV0KTtcbitcdFx0XHRnb3RvIGVycl9zb2NrO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHQvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqL1xuLVx0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zIFx1MDAzZT0gMClcbi1cdFx0aXBfc29ja19zZXRfdG9zKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zKTtcbitcdGlmIChuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyBcdTAwM2U9IDApIHtcbitcdFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfdG9zKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRldl9lcnIobmN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFx0XCJmYWlsZWQgdG8gc2V0IElQX1RPUyBvbiBxdWV1ZSAlZCBlcnIgJWRcXG5cIixcbitcdFx0XHRcdHFpZCwgcmV0KTtcbitcdFx0XHRnb3RvIGVycl9zb2NrO1xuK1x0XHR9XG4rXG4rXHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLFxuK1x0XHRcdFx0XHQgICAgICAgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2VycihuY3RybC1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XHRcImZhaWxlZCB0byBzZXQgSVBWNl9UQ0xBU1Mgb24gcXVldWUgJWQgZXJyICVkXFxuXCIsXG4rXHRcdFx0XHRxaWQsIHJldCk7XG4rXHRcdFx0Z290byBlcnJfc29jaztcbitcdFx0fVxuK1x0fVxuIFxuIFx0LyogU2V0IDEwIHNlY29uZHMgdGltZW91dCBmb3IgaWNyZXNwIHJlY3Ztc2cgKi9cbiBcdHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2dGltZW8gPSAxMCAqIEhaO1xuQEAgLTE4NjQsMTAgKzE5NTcsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuIFxuIFx0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlbWFzayBcdTAwMjYgTlZNRl9PUFRfSE9TVF9JRkFDRSkge1xuIFx0XHRjaGFyICppZmFjZSA9IG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlaG9zdF9pZmFjZTtcbi1cdFx0c29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTtcbiBcbi1cdFx0cmV0ID0gc29ja19zZXRzb2Nrb3B0KHF1ZXVlLVx1MDAzZXNvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSxcbi1cdFx0XHRcdCAgICAgIG9wdHZhbCwgc3RybGVuKGlmYWNlKSk7XG4rXHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBpZmFjZSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiBcdFx0XHQgIFwiZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG5pbmRleCA3NWEyNzZkNzNiZTNlLi5lZDQxM2FhNTYwMWM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuQEAgLTE2OTYsMTAgKzE2OTYsNjYgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbiB9XG4gXG4rc3RhdGljIGludCBudm1ldF90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07XG4rXG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0aW50IHZhbCA9IFNLX0NBTl9SRVVTRTtcbitcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcbitcdFx0XHRcdCAgU09fUkVVU0VBRERSLCBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLFxuK1x0XHRcdFx0ICBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdGludCB2YWwgPSAxO1xuK1xuK1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbitcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWV0X3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdGludCB0b3MgPSBpbmV0X3NrKHNrKS1cdTAwM2VyY3ZfdG9zO1xuK1xuK1x0aWYgKHRvcyBcdTAwM2UgMClcbitcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVAsIElQX1RPUyxcbitcdFx0XHRcdFx0ICBLRVJORUxfU09DS1BUUihcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcbit7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4rXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4rXHRcdGludCB0Y2xhc3MgPSBpcDZfdGNsYXNzKGluZXQ2X3NrKHNrKS1cdTAwM2VyY3ZfZmxvd2luZm8pO1xuK1xuK1x0XHRpZiAodGNsYXNzIFx1MDAzZSAwKVxuK1x0XHRcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSxcbitcdFx0XHRcdFx0XHQgIFNPTF9JUFY2LCBJUFY2X1RDTEFTUyxcbitcdFx0XHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnRjbGFzcyksXG4rXHRcdFx0XHRcdFx0ICBzaXplb2YodGNsYXNzKSk7XG4rXHR9XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpXG4ge1xuIFx0c3RydWN0IHNvY2tldCAqc29jayA9IHF1ZXVlLVx1MDAzZXNvY2s7XG4tXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLVx1MDAzZXNrKTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBrZXJuZWxfZ2V0c29ja25hbWUoc29jayxcbkBAIC0xNzE3LDE0ICsxNzczLDI0IEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxuIFx0ICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZFxuIFx0ICogdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBiZSByZXN0b3JlZCBiZWZvcmUgVENQIHRpbWVzIG91dC5cbiBcdCAqL1xuLVx0c29ja19ub19saW5nZXIoc29jay1cdTAwM2Vzayk7XG4rXHRyZXQgPSBudm1ldF90Y3Bfc29ja19ub19saW5nZXIoc29jay1cdTAwM2Vzayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRpZiAoc29fcHJpb3JpdHkgXHUwMDNlIDApIHtcbitcdFx0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFxuIFx0LyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi9cbi1cdGlmIChpbmV0LVx1MDAzZXJjdl90b3MgXHUwMDNlIDApXG4tXHRcdGlwX3NvY2tfc2V0X3Rvcyhzb2NrLVx1MDAzZXNrLCBpbmV0LVx1MDAzZXJjdl90b3MpO1xuK1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3Rvcyhzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHNvY2stXHUwMDNlc2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IDA7XG4gXHR3cml0ZV9sb2NrX2JoKFx1MDAyNnNvY2stXHUwMDNlc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5AQCAtMjA5OCwxMCArMjE2NCwyNiBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG4gXHRwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gcG9ydDtcbiBcdHBvcnQtXHUwMDNlZGF0YV9yZWFkeSA9IHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza19kYXRhX3JlYWR5O1xuIFx0cG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2RhdGFfcmVhZHkgPSBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHk7XG4tXHRzb2NrX3NldF9yZXVzZWFkZHIocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbi1cdHRjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4tXHRpZiAoc29fcHJpb3JpdHkgXHUwMDNlIDApXG4tXHRcdHNvY2tfc2V0X3ByaW9yaXR5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuK1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcl9lcnIoXCJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFQUREUiBvbiBwb3J0IHNvY2tldCAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9zb2NrO1xuK1x0fVxuK1xuK1x0cmV0ID0gbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNldCBUQ1BfTk9ERUxBWSBvbiBwb3J0IHNvY2tldCAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9zb2NrO1xuK1x0fVxuK1xuK1x0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKSB7XG4rXHRcdHJldCA9IG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHByX2VycihcImZhaWxlZCB0byBzZXQgU09fUFJJT1JJVFkgb24gcG9ydCBzb2NrZXQgJWRcXG5cIixcbitcdFx0XHQgICAgICAgcmV0KTtcbitcdFx0XHRnb3RvIGVycl9zb2NrO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRyZXQgPSBrZXJuZWxfYmluZChwb3J0LVx1MDAzZXNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNnBvcnQtXHUwMDNlYWRkcixcbiBcdFx0XHRzaXplb2YocG9ydC1cdTAwM2VhZGRyKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNjozNzoxNS44MTEyNzM1OVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTc0NTkzMzQxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVk1lIFRDUCBTb2NrZXQgT3B0aW9uIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGJvdGggdGhlIGhvc3QgYW5kIHRhcmdldCBUQ1AgaW1wbGVtZW50YXRpb25zIHdpdGhpbiB0aGUgTlZNZSBkcml2ZXJzLiBFc3NlbnRpYWxseSwgaXQncyBhIHJlZmFjdG9yaW5nLCByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHRob3NlIHNwZWNpZmljIHNvY2tldCBvcHRpb24gc2V0dGluZyBmdW5jdGlvbnMg4oCTIHRoaW5ncyBsaWtlIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAgYW5kIGBzb2NrX25vX2xpbmdlcmAg4oCTIHdpdGggd3JhcHBlciBmdW5jdGlvbnMgdGhhdCB1bmlmb3JtbHkgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgLiBUaGUgZ29hbCwgSSBhc3N1bWUsIGlzIGNsZWFuZXIgY29kZSBhbmQgcG90ZW50aWFsbHkgZWFzaWVyIG1haW50ZW5hbmNlIGJ5IGNlbnRyYWxpemluZyB0aGUgc29ja2V0IG9wdGlvbiBzZXR0aW5nIGxvZ2ljLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgdXMgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBJIHNlZSB0aGVzZSB3cmFwcGVyIGZ1bmN0aW9ucywgYW5kIEknbSB3YWxraW5nIHRocm91Z2ggdGhlbS4gSXQncyBjbGVhciB0aGF0IGFsbCB0aGUgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCBhcmUgKmZ1bGx5KiBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkLiBXZSBoYXZlIGBpbnQgdmFsID0gMTtgLCBgc3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtgLCBhbmQgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCBieSB2YWx1ZS5cblxuU3BlY2lmaWNhbGx5LCB0aGF0IGBsaW5nZXJgIHN0cnVjdCBpcyBzb21ldGhpbmcgdG8gZG91YmxlLWNoZWNrLiBTbyBJJ20gcHVsbGluZyB1cCB0aGUgZGVmaW5pdGlvbiAobW9zdCBsaWtlbHkgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9zb2NrZXQuaGApLiBBaCwgeWVzLCB0d28gaW50cywgbm8gcGFkZGluZy4gVGhlIG90aGVyIHZhcmlhYmxlcyBhcmUgc2ltcGx5IGludGVnZXJzIG9yIHVuc2lnbmVkIGludGVnZXJzLiBObyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdGhlIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha2FnZSBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlciBzcGFjZS5cblxuVGhlIHdyYXBwZXJzIHVzZSBgS0VSTkVMX1NPQ0tQVFJgIHRvIGNyZWF0ZSBhIGBzb2NrcHRyX3RgLCBidXQgdGhpcyBpcyBhICprZXJuZWwqIHBvaW50ZXIsIGFuZCBpdCdzIHBvaW50aW5nIHRvIGluaXRpYWxpemVkIGRhdGEgb24gdGhlIHN0YWNrLiBUaGVyZSdzIHplcm8gY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIHdoaWNoIGlzIHdoYXQgd2UgYXJlIGNvbmNlcm5lZCBhYm91dC5cblxuRXNzZW50aWFsbHksIGFsbCBkYXRhIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCBpcyBpbml0aWFsaXplZC4gVGhlc2UgY2hhbmdlcywgYXQgd29yc3QsIGNvdWxkIGludHJvZHVjZSBidWdzIHJlbGF0ZWQgdG8gdGhlICpsb2dpYyogb2YgdGhlIHNvY2tldCBvcHRpb25zIG9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCB3b3VsZG4ndCBiZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudC4gVGhlcmVmb3JlLCBpdCdzIHNhZmUgdG8gc2F5OiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UgZG9uJ3QgbmVlZCBLTVNBTiBoZXJlOyB0aGVyZSdzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI4MywiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDY6NDg6NTMuMjcwNjEyNjQ2WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc29ja2V0IG9wdGlvbiBzZXR0aW5nIGluIHRoZSBOVk1lIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyBieSByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHNwZWNpZmljIGhlbHBlcnMgKGxpa2UgYHRjcF9zb2NrX3NldF9ub2RlbGF5YCwgYHNvY2tfbm9fbGluZ2VyYCwgZXRjLikgd2l0aCBsb2NhbCB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGRvX3NvY2tfc2V0c29ja29wdGAuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgcGFzc2VkIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIChlLmcuLCBgaW50IHZhbCA9IDE7YCwgYHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07YCwgb3IgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCBieSB2YWx1ZSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGZpZWxkcywgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcsIGFuZCBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3Qgc29ja2V0IG9wdGlvbnMgb3IgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFuZCBkbyBub3QgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBvcHRpb24gc2V0dGluZyBpbiB0aGUgTlZNZSBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgYnkgcmVwbGFjaW5nIGRpcmVjdCBjYWxscyB0byBzcGVjaWZpYyBoZWxwZXJzIChsaWtlIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGBzb2NrX25vX2xpbmdlcmAsIGV0Yy4pIHdpdGggbG9jYWwgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBkb19zb2NrX3NldHNvY2tvcHRgLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoZS5nLiwgYGludCB2YWwgPSAxO2AsIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgYnkgdmFsdWUpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nLCBhbmQgbm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHNvY2tldCBvcHRpb25zIG9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCBhcmUgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhbmQgZG8gbm90IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowth4pj[1] Phase: Succeeded StartedAt: 2026-08-18 06:49:04 +0000 UTC FinishedAt: 2026-08-18 06:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 06:49:04 +0000 UTC FinishedAt: 2026-08-18 06:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2] Phase: Succeeded StartedAt: 2026-08-18 06:49:04 +0000 UTC FinishedAt: 2026-08-18 08:19:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 06:49:04 +0000 UTC FinishedAt: 2026-08-18 08:19:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 06:49:04 +0000 UTC FinishedAt: 2026-08-18 06:49:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 06:49:04 +0000 UTC FinishedAt: 2026-08-18 06:49:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowth4pj/series-workflowth4pj-convert-artifact-2091804205/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 06:49:14 +0000 UTC FinishedAt: 2026-08-18 07:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 06:49:14 +0000 UTC FinishedAt: 2026-08-18 07:06:06 +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:*ebbaa2df-f2cf-42e2-90d2-3fc77d42aed8,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-workflowth4pj/series-workflowth4pj-convert-artifact-2091804205/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": "952dc29e-3ce6-4a5f-9e1b-6eaee0a99c0e", "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-workflowth4pj/series-workflowth4pj-build-action-1219273251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 06:49:14 +0000 UTC FinishedAt: 2026-08-18 07:05:56 +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:*ebbaa2df-f2cf-42e2-90d2-3fc77d42aed8,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-workflowth4pj/series-workflowth4pj-convert-artifact-2091804205/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": "952dc29e-3ce6-4a5f-9e1b-6eaee0a99c0e", "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-workflowth4pj/series-workflowth4pj-build-action-1219273251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 07:06:06 +0000 UTC FinishedAt: 2026-08-18 07:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 07:06:06 +0000 UTC FinishedAt: 2026-08-18 07:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 07:06:06 +0000 UTC FinishedAt: 2026-08-18 07:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 07:06:06 +0000 UTC FinishedAt: 2026-08-18 07:06:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowth4pj/series-workflowth4pj-convert-artifact-1069450120/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 07:06:17 +0000 UTC FinishedAt: 2026-08-18 07:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 07:06:17 +0000 UTC FinishedAt: 2026-08-18 07:08:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*952dc29e-3ce6-4a5f-9e1b-6eaee0a99c0e,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-workflowth4pj/series-workflowth4pj-build-action-1219273251/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-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 07:08:26 +0000 UTC FinishedAt: 2026-08-18 07:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 07:08:26 +0000 UTC FinishedAt: 2026-08-18 07:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 07:08:26 +0000 UTC FinishedAt: 2026-08-18 07:24:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 07:08:26 +0000 UTC FinishedAt: 2026-08-18 07:24:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ebbaa2df-f2cf-42e2-90d2-3fc77d42aed8,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-workflowth4pj/series-workflowth4pj-convert-artifact-1069450120/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": "93023130-1b45-45ce-92fa-eb77189104ae", "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-workflowth4pj/series-workflowth4pj-build-action-781657908/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 07:08:26 +0000 UTC FinishedAt: 2026-08-18 07:24:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ebbaa2df-f2cf-42e2-90d2-3fc77d42aed8,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-workflowth4pj/series-workflowth4pj-convert-artifact-1069450120/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": "93023130-1b45-45ce-92fa-eb77189104ae", "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-workflowth4pj/series-workflowth4pj-build-action-781657908/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 07:24:57 +0000 UTC FinishedAt: 2026-08-18 07:24:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 07:24:57 +0000 UTC FinishedAt: 2026-08-18 07:24:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 07:24:57 +0000 UTC FinishedAt: 2026-08-18 07:27:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 07:24:57 +0000 UTC FinishedAt: 2026-08-18 07:26:56 +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:*93023130-1b45-45ce-92fa-eb77189104ae,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-workflowth4pj/series-workflowth4pj-build-action-781657908/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-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 07:27:06 +0000 UTC FinishedAt: 2026-08-18 08:19:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 07:27:06 +0000 UTC FinishedAt: 2026-08-18 08:19:30 +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":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"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:*952dc29e-3ce6-4a5f-9e1b-6eaee0a99c0e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*93023130-1b45-45ce-92fa-eb77189104ae,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-workflowth4pj/series-workflowth4pj-build-action-1219273251/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-workflowth4pj/series-workflowth4pj-build-action-781657908/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 07:27:06 +0000 UTC FinishedAt: 2026-08-18 07:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 07:27:06 +0000 UTC FinishedAt: 2026-08-18 07:27:10 +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":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"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-workflowth4pj/series-workflowth4pj-convert-artifact-3120725057/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 07:27:06 +0000 UTC FinishedAt: 2026-08-18 07:27:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 07:27:06 +0000 UTC FinishedAt: 2026-08-18 07:27:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 07:27:06 +0000 UTC FinishedAt: 2026-08-18 07:27:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 07:27:16 +0000 UTC FinishedAt: 2026-08-18 08:19:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09b7c00d55a8c1ec50c44e74d3edba0c0b317910","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP"],"series_id":"d16a0175-22d6-420a-964d-221baca881e7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 07:27:16 +0000 UTC FinishedAt: 2026-08-18 08:19:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*952dc29e-3ce6-4a5f-9e1b-6eaee0a99c0e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*93023130-1b45-45ce-92fa-eb77189104ae,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-workflowth4pj/series-workflowth4pj-build-action-1219273251/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-workflowth4pj/series-workflowth4pj-build-action-781657908/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-workflowth4pj/series-workflowth4pj-convert-artifact-3120725057/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,}