Name: series-workflow2sdmq Phase: Succeeded StartedAt: 2026-09-15 06:16:59 +0000 UTC FinishedAt: 2026-09-15 10:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[0] Phase: Succeeded StartedAt: 2026-09-15 06:16:59 +0000 UTC FinishedAt: 2026-09-15 07:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 06:16:59 +0000 UTC FinishedAt: 2026-09-15 07:08:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b7fee0cd63a958580fc652ac2cb7be0d545f61aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "PSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b7fee0cd63a958580fc652ac2cb7be0d545f61aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "PSI" ], "series_id": "d9c11db9-af53-474d-9f8c-d70bccb18b2e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_set_quota_goal_current_value", "damos_quota_score", "damos_goal_tune_esz_bp_temporal", "damos_set_effective_quota", "damos_adjust_quota" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "b7fee0cd63a958580fc652ac2cb7be0d545f61aa", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUmIzM0OywKICAgICYjMzQ7ZGFtb3NfcXVvdGFfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbCYjMzQ7LAogICAgJiMzNDtkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJiMzOTtzIHF1b3RhIGdvYWwgbG9naWMgaW4gYG1tL2RhbW9uL2NvcmUuY2AgZm9yIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIG1ldHJpY3MgYW5kIGFkZHMgYSBjb3JyZXNwb25kaW5nIEtVbml0IHRlc3QuIFNwZWNpZmljYWxseSwgd2hlbiBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYYCAoYSBkb21haW4tbGV2ZWwgc2VudGluZWwgdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIFBTSSBzYW1wbGUgaGFzIHlldCBiZWVuIHJlY29yZGVkKSwgaXQgc2V0cyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gMGAgaW5zdGVhZCBvZiBgZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWVgIGlmIHRoZSB0dW5lciBpcyBgREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTGAuXG5cbkRlc3BpdGUgdGhlIGNvZGUgY29tbWVudCByZWZlcnJpbmcgdG8gXCYjMzQ7dW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbFwmIzM0OywgdGhpcyBpcyBwdXJlbHkgYSBzZW1hbnRpYyBzZW50aW5lbCB2YWx1ZTogYGxhc3RfcHNpX3RvdGFsYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBVNjRfTUFYYCB1cG9uIGFsbG9jYXRpb24gb3IgY29tbWl0IChgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgYWNjZXNzZWQgb3IgZXhwb3NlZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTi9EQU1PUyBxdW90YSBnb2FsIGV2YWx1YXRpb24gaW4gbW0vZGFtb24vY29yZS5jLCBlbnN1cmluZyB0aGF0IHVubWVhc3VyZWQgUFNJIGdvYWxzIHVuZGVyIGEgdGVtcG9yYWwgZ29hbCB0dW5lciBkbyBub3QgcHJlbWF0dXJlbHkgemVybyB0aGUgZWZmZWN0aXZlIHF1b3RhIGR1cmluZyBpbml0aWFsIHR1bmluZyByb3VuZHMuIFRoaXMgYWx0ZXJzIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBleGVjdXRpb24gYW5kIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NTQyNTU0NWJkYjhjM2JjNDRlYmNlYjZjYTA1NDI2MzkwNjY0ZTMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDE6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAwNmNmMmFiN2U5N2Q3Li5lNmQ4N2ZkMzk5MmVlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMTYxLDEyICYjNDM7MzE2MSwxOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4gXHRcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XG4tXHRcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cbi1cdFx0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcbi1cdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZTtcbi1cdFx0ZWxzZVxuJiM0MztcdFx0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkge1xuJiM0MztcdFx0XHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXG4mIzQzO1x0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPT1cbiYjNDM7XHRcdFx0XHRcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXG4mIzQzO1x0XHRcdFx0LyogYW4gYWNoaWV2ZWQgc2NvcmUgd291bGQgemVybyB0aGUgdGVtcG9yYWwgcXVvdGEgKi9cbiYjNDM7XHRcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWU7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxuIFx0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbiYjNDM7XHRcdH1cbiBcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggYzAxZTZhNzVjYWRjMS4uMmI5YjI0Y2U3ZGFkMyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtODg5LDYgJiM0Mzs4ODksNzQgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0fSk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBVbm1lYXN1cmVkIFBTSSBnb2FscyBtdXN0IG5vdCBkaXNhYmxlIHRoZSB0ZW1wb3JhbCBxdW90YS5cbiYjNDM7ICogS2VlcCBzeiAqIDEwMDAwIHdpdGhpbiBhIDMyLWJpdCB1bnNpZ25lZCBsb25nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xuJiM0MztcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge307XG4mIzQzO1x0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge1xuJiM0MztcdFx0LnN6ID0gU1pfNjRLLFxuJiM0MztcdFx0LmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzID0ge307XG4mIzQzO1x0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgc3JjID0ge1xuJiM0MztcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbiYjNDM7XHRcdC50YXJnZXRfdmFsdWUgPSBVTE9OR19NQVgsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb3MgKnM7XG4mIzQzO1xuJiM0MztcdGlmICghYylcbiYjNDM7XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Y3R4IGFsbG9jIGZhaWxcJiMzNDspO1xuJiM0MztcdHMgPSBkYW1vbl9uZXdfc2NoZW1lKFx1MDAyNnBhdHRlcm4sIERBTU9TX1NUQVQsIDAsIFx1MDAyNnF1b3RhLCBcdTAwMjZ3bWFya3MsXG4mIzQzO1x0XHRcdE5VTUFfTk9fTk9ERSk7XG4mIzQzO1x0aWYgKCFzKSB7XG4mIzQzO1x0XHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiYjNDM7XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c2NoZW1lIGFsbG9jIGZhaWxcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XHRkYW1vbl9hZGRfc2NoZW1lKGMsIHMpO1xuJiM0MztcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsIFVMT05HX01BWCk7XG4mIzQzO1x0aWYgKCFnb2FsKSB7XG4mIzQzO1x0XHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiYjNDM7XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Z29hbCBhbGxvYyBmYWlsXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2cy1cdTAwM2VxdW90YSwgZ29hbCk7XG4mIzQzO1xuJiM0MztcdC8qIGZyZXNoIGdvYWwsIGZpcnN0IHR1bmluZyByb3VuZCAqL1xuJiM0MztcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuJiM0MztcbiYjNDM7XHQvKiBzZWNvbmQgcm91bmQ6IGxhc3RfcHNpX3RvdGFsIGlzIGluaXRpYWxpc2VkIG5vdyAqL1xuJiM0MztcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuJiM0MztcbiYjNDM7XHQvKiBjb21taXQgYSBQU0kgZ29hbCBvbnRvIHRoZSBpbml0aWFsaXNlZCBQU0kgZ29hbCAqL1xuJiM0MztcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNnNyYyk7XG4mIzQzO1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7XG4mIzQzO1xuJiM0MztcdC8qIGEgbWVhc3VyZWQgcm91bmQgdGhhdCByZWFjaGVzIHRoZSB0YXJnZXQgZGlzYWJsZXMgdGhlIHF1b3RhICovXG4mIzQzO1x0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUgPSAxMDtcbiYjNDM7XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpIC0gMTA7XG4mIzQzO1x0LyogVTY0X01BWCBtYXJrcyBhbiB1bm1lYXN1cmVkIGdvYWwsIGtlZXAgdGhlIHNhbXBsZSBhd2F5IGZyb20gaXQgKi9cbiYjNDM7XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKVxuJiM0MztcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbC0tO1xuJiM0MztcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAwdWwpO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgY29uc2lzdCB0dW5lciBrZWVwcyBpdHMgcXVvdGEgb3ZlciBhbiB1bm1lYXN1cmVkIHJvdW5kICovXG4mIzQzO1x0cy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyID0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUO1xuJiM0MztcdHMtXHUwMDNlcXVvdGEuZXN6X2JwID0gU1pfMzJLICogMTAwMDA7XG4mIzQzO1x0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2c3JjKTtcbiYjNDM7XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfMzJLKTtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FscywgaW50IG5yX2RzdF9nb2FscyxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyY19nb2FscywgaW50IG5yX3NyY19nb2FscylcbkBAIC0xODg3LDYgJiM0MzsxOTU1LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9uZXdfZmlsdGVyKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbCksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzKSxcbiYjNDM7XHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2kpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YSksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfZmlsdGVyKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtQU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlJiMzNDssCiAgICAmIzM0O2RhbW9zX3F1b3RhX3Njb3JlJiMzNDssCiAgICAmIzM0O2RhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwmIzM0OywKICAgICYjMzQ7ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSYjMzQ7LAogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04vREFNT1MgcXVvdGEgZ29hbCBldmFsdWF0aW9uIGluIG1tL2RhbW9uL2NvcmUuYywgZW5zdXJpbmcgdGhhdCB1bm1lYXN1cmVkIFBTSSBnb2FscyB1bmRlciBhIHRlbXBvcmFsIGdvYWwgdHVuZXIgZG8gbm90IHByZW1hdHVyZWx5IHplcm8gdGhlIGVmZmVjdGl2ZSBxdW90YSBkdXJpbmcgaW5pdGlhbCB0dW5pbmcgcm91bmRzLiBUaGlzIGFsdGVycyBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgZXhlY3V0aW9uIGFuZCBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04mIzM5O3Mgc3lzZnMgaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODU0MjU1NDViZGI4YzNiYzQ0ZWJjZWI2Y2EwNTQyNjM5MDY2NGUzMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA3OjAxOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDA2Y2YyYWI3ZTk3ZDcuLmU2ZDg3ZmQzOTkyZWUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTMxNjEsMTIgJiM0MzszMTYxLDE4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYywKIAkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6CiAJCW5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7Ci0JCS8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi8KLQkJaWYgKGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpCi0JCQlnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlOwotCQllbHNlCiYjNDM7CQlpZiAoZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkgewomIzQzOwkJCS8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi8KJiM0MzsJCQlpZiAocy0mZ3Q7cXVvdGEuZ29hbF90dW5lciA9PQomIzQzOwkJCQkJREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCkKJiM0MzsJCQkJLyogYW4gYWNoaWV2ZWQgc2NvcmUgd291bGQgemVybyB0aGUgdGVtcG9yYWwgcXVvdGEgKi8KJiM0MzsJCQkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IDA7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlOwomIzQzOwkJfSBlbHNlIHsKIAkJCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0KIAkJCQlnb2FsLSZndDtsYXN0X3BzaV90b3RhbDsKJiM0MzsJCX0KIAkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsOwogCQlicmVhazsKIAljYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggYzAxZTZhNzVjYWRjMS4uMmI5YjI0Y2U3ZGFkMyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtODg5LDYgJiM0Mzs4ODksNzQgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCQl9KTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVW5tZWFzdXJlZCBQU0kgZ29hbHMgbXVzdCBub3QgZGlzYWJsZSB0aGUgdGVtcG9yYWwgcXVvdGEuCiYjNDM7ICogS2VlcCBzeiAqIDEwMDAwIHdpdGhpbiBhIDMyLWJpdCB1bnNpZ25lZCBsb25nLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTsKJiM0MzsJc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIHBhdHRlcm4gPSB7fTsKJiM0MzsJc3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0gewomIzQzOwkJLnN6ID0gU1pfNjRLLAomIzQzOwkJLmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3MgPSB7fTsKJiM0MzsJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgc3JjID0gewomIzQzOwkJLm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUywKJiM0MzsJCS50YXJnZXRfdmFsdWUgPSBVTE9OR19NQVgsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsOwomIzQzOwlzdHJ1Y3QgZGFtb3MgKnM7CiYjNDM7CiYjNDM7CWlmICghYykKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtjdHggYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJcyA9IGRhbW9uX25ld19zY2hlbWUoJmFtcDtwYXR0ZXJuLCBEQU1PU19TVEFULCAwLCAmYW1wO3F1b3RhLCAmYW1wO3dtYXJrcywKJiM0MzsJCQlOVU1BX05PX05PREUpOwomIzQzOwlpZiAoIXMpIHsKJiM0MzsJCWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwomIzQzOwkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O3NjaGVtZSBhbGxvYyBmYWlsJiMzNDspOwomIzQzOwl9CiYjNDM7CWRhbW9uX2FkZF9zY2hlbWUoYywgcyk7CiYjNDM7CWdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsIFVMT05HX01BWCk7CiYjNDM7CWlmICghZ29hbCkgewomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoYyk7CiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7Z29hbCBhbGxvYyBmYWlsJiMzNDspOwomIzQzOwl9CiYjNDM7CWRhbW9zX2FkZF9xdW90YV9nb2FsKCZhbXA7cy0mZ3Q7cXVvdGEsIGdvYWwpOwomIzQzOwomIzQzOwkvKiBmcmVzaCBnb2FsLCBmaXJzdCB0dW5pbmcgcm91bmQgKi8KJiM0MzsJZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtJmd0O3F1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTsKJiM0MzsKJiM0MzsJLyogc2Vjb25kIHJvdW5kOiBsYXN0X3BzaV90b3RhbCBpcyBpbml0aWFsaXNlZCBub3cgKi8KJiM0MzsJZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtJmd0O3F1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTsKJiM0MzsKJiM0MzsJLyogY29tbWl0IGEgUFNJIGdvYWwgb250byB0aGUgaW5pdGlhbGlzZWQgUFNJIGdvYWwgKi8KJiM0MzsJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgJmFtcDtzcmMpOwomIzQzOwlkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy0mZ3Q7cXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspOwomIzQzOwomIzQzOwkvKiBhIG1lYXN1cmVkIHJvdW5kIHRoYXQgcmVhY2hlcyB0aGUgdGFyZ2V0IGRpc2FibGVzIHRoZSBxdW90YSAqLwomIzQzOwlnb2FsLSZndDt0YXJnZXRfdmFsdWUgPSAxMDsKJiM0MzsJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCkgLSAxMDsKJiM0MzsJLyogVTY0X01BWCBtYXJrcyBhbiB1bm1lYXN1cmVkIGdvYWwsIGtlZXAgdGhlIHNhbXBsZSBhd2F5IGZyb20gaXQgKi8KJiM0MzsJaWYgKGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpCiYjNDM7CQlnb2FsLSZndDtsYXN0X3BzaV90b3RhbC0tOwomIzQzOwlkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy0mZ3Q7cXVvdGEuZXN6LCAwdWwpOwomIzQzOwomIzQzOwkvKiB0aGUgY29uc2lzdCB0dW5lciBrZWVwcyBpdHMgcXVvdGEgb3ZlciBhbiB1bm1lYXN1cmVkIHJvdW5kICovCiYjNDM7CXMtJmd0O3F1b3RhLmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1Q7CiYjNDM7CXMtJmd0O3F1b3RhLmVzel9icCA9IFNaXzMySyAqIDEwMDAwOwomIzQzOwlkYW1vc19jb21taXRfcXVvdGFfZ29hbChnb2FsLCAmYW1wO3NyYyk7CiYjNDM7CWRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLSZndDtxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzMySyk7CiYjNDM7CiYjNDM7CWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsCiAJCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbHMsIGludCBucl9kc3RfZ29hbHMsCiAJCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmNfZ29hbHMsIGludCBucl9zcmNfZ29hbHMpCkBAIC0xODg3LDYgJiM0MzsxOTU1LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfbmV3X2ZpbHRlciksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKSwKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzKSwKJiM0MzsJS1VOSVRfQ0FTRShkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKSwKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhKSwKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzKSwKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlciksCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaDogUXVvdGEgR29hbCBBZGp1c3RtZW50IGFuZCBLVW5pdCBUZXN0KioKCk9rYXksIHNvIEkgc2VlIGEgcGF0Y2ggc3VibWl0dGVkIGZvciBEQU1PTiwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgbW0vZGFtb24vY29yZS5jYCBhbmQgYSBuZXcgS1VuaXQgdGVzdCBpbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gTGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBnb2FsIGlzIHRvIGV2YWx1YXRlIHRoaXMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2h5LgoKRmlyc3QsIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBjb2RlIGRpZmYgaW4gYGNvcmUuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgbGluZSAzMTYxLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaG93IERBTU9OIHNldHMgdGhlIGBjdXJyZW50X3ZhbHVlYCBmb3IgcXVvdGEgZ29hbHMsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBxdW90YSB0YXJnZXQgaXMgYmFzZWQgb24gc29tZSBraW5kIG9mIFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pLiBUaGUgY29kZSBhZGRyZXNzZXMgdGhlIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGNhc2UuCgpCZWZvcmUgdGhpcyBjaGFuZ2UsIGlmIGBsYXN0X3BzaV90b3RhbGAgd2FzIHVuaW5pdGlhbGl6ZWQgKGBVNjRfTUFYYCksIHRoZSBgY3VycmVudF92YWx1ZWAgd291bGQganVzdCBiZSBzZXQgdG8gdGhlIGB0YXJnZXRfdmFsdWVgLiBOb3csIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY2hlY2suICBJZiB0aGUgcXVvdGEgdHVuZXIgaXMgdGVtcG9yYWwgKGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYCkgYW5kIGBsYXN0X3BzaV90b3RhbGAgaXMgdW5pbml0aWFsaXplZCwgdGhlIGBjdXJyZW50X3ZhbHVlYCBiZWNvbWVzIHplcm8uIE90aGVyd2lzZSwgaXQgYmVoYXZlcyBhcyBiZWZvcmUgKHdpdGggYW4gdW5pbml0aWFsaXplZCBgbGFzdF9wc2lfdG90YWxgKS4gSWYgYGxhc3RfcHNpX3RvdGFsYCBoYXMgYmVlbiBpbml0aWFsaXplZCwgdGhlIGBjdXJyZW50X3ZhbHVlYCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IFBTSSB0b3RhbCBhbmQgdGhlIGxhc3Qgb25lLiBUaGUgYGxhc3RfcHNpX3RvdGFsYCBpcyB1cGRhdGVkIGluIGVpdGhlciB0aGUgaW5pdGlhbGl6ZWQgb3IgdW5pbml0aWFsaXplZCBjYXNlLgoKRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBsb29rcyBsaWtlIGEgcmVmaW5lbWVudCBpbiB0aGUgdGVtcG9yYWwgcXVvdGEgYWRqdXN0bWVudCBsb2dpYy4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBtYWtlIHRoZSB0ZW1wb3JhbCBxdW90YSB6ZXJvIGlmIHVuaW5pdGlhbGl6ZWQsIHJhdGhlciB0aGFuIGJlaW5nIHNldCB0byB0aGUgdGFyZ2V0IHZhbHVlLgoKSSBhbHNvIHNlZSBhIG5ldyBLVW5pdCB0ZXN0LCBgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaWAuIFRoaXMgaXMgZ3JlYXQuIEl0JiMzOTtsbCBiZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSB0ZXN0IGlzIHZlcmlmeWluZywgd2hpY2ggd2lsbCBzaGVkIG1vcmUgbGlnaHQgb24gdGhlIGludGVuZGVkIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHRlc3QgY29kZSBpbiBgY29yZS1rdW5pdC5oYCB0byBzZWUgdGhlIHNwZWNpZmljcy4gTXkgZ3Vlc3MgaXMgaXQgdmVyaWZpZXMgdGhlIG5ldyBjb25kaXRpb25hbCBsb2dpYyBJIGp1c3QgZGVzY3JpYmVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgUFNJIHZhbHVlcyBhcmUgc2V0IHVwIGFuZCBob3cgdGhlIGBjdXJyZW50X3ZhbHVlYCBpcyBhc3NlcnRlZCBpbiB0aGUgdGVzdC4gVGhlIHRlc3Qgd2lsbCBob3BlZnVsbHkgc2hvdyBtZSB0aGUgc2NlbmFyaW9zIHRoaXMgbG9naWMgaGFuZGxlcywgd2hpY2ggaXMga2V5LiBNeSBleHBlcmllbmNlIHdpdGggREFNT04gdGVsbHMgbWUgdGhpcyBsaWtlbHkgYWltcyB0byBmaW5lLXR1bmUgdGhlIHF1b3RhIGJlaGF2aW9yIGluIGVkZ2UgY2FzZXMgb3IgYXQgdGhlIHN0YXJ0IG9mIERBTU9OJiMzOTtzIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE1MDpcdFx0cmV0dXJuIG11bHRfZnJhYyh0aHAsIDEwMDAwLCB0b3RhbF9wYWdlcyAtIGZyZWVfcGFnZXMpO1xuMzE1MTpcdH1cbjMxNTI6XHRcbjMxNTM6XHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4zMTU0Olx0XHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4zMTU1Olx0e1xuMzE1NjpcdFx0dTY0IG5vd19wc2lfdG90YWw7XG4zMTU3Olx0XG4zMTU4Olx0XHRzd2l0Y2ggKGdvYWwtXHUwMDNlbWV0cmljKSB7XG4zMTU5Olx0XHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XG4zMTYwOlx0XHRcdC8qIFVzZXIgc2hvdWxkIGFscmVhZHkgc2V0IGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSAqL1xuMzE2MTpcdFx0XHRicmVhaztcbjMxNjI6XHRcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxuMzE2MzpcdFx0XHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuMzE2NDpcdFx0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XG4zMTY1Olx0XHRcdFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xuMzE2NjpcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPT1cbjMxNjc6XHRcdFx0XHRcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbjMxNjg6XHRcdFx0XHRcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXG4zMTY5Olx0XHRcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xuMzE3MDpcdFx0XHRcdGVsc2VcbjMxNzE6XHRcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuMzE3MjpcdFx0XHR9IGVsc2Uge1xuMzE3MzpcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxuMzE3NDpcdFx0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbjMxNzU6XHRcdFx0fVxuMzE3NjpcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcbjMxNzc6XHRcdFx0YnJlYWs7XG4zMTc4Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4zMTc5Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4zMTgwOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbV9icChnb2FsKTtcbjMxODE6XHRcdFx0YnJlYWs7XG4zMTgyOlx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbjMxODM6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxuMzE4NDpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xuMzE4NTpcdFx0XHRicmVhaztcbjMxODY6XHRcdGNhc2UgREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUDpcbjMxODc6XHRcdGNhc2UgREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxuMzE4ODpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcbjMxODk6XHRcdFx0XHRcdGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xuMzE5MDpcdFx0XHRicmVhaztcbjMxOTE6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XG4zMTkyOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLFxuMzE5MzpcdFx0XHRcdFx0Z29hbC1cdTAwM2VuaWQpO1xuMzE5NDpcdFx0XHRicmVhaztcbjMxOTU6XHRcdGNhc2UgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQOlxuMzE5NjpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcbjMxOTc6XHRcdFx0YnJlYWs7XG4zMTk4Olx0XHRkZWZhdWx0OlxuMzE5OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzY2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIENhbGxzIHRvIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbGVycyBvZiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlYnVnZ2luZyB0YXNrLCBidXQgdGhlIGFwcHJvYWNoIEkgdGFrZSB3aWxsIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4KCk15IGluaXRpYWwgYXBwcm9hY2ggd291bGQgYmUgdG8gdXNlIGEgc3RhdGljIGFuYWx5c2lzIHRvb2wsIGxpa2UgZ3JlcCB3aXRoIHNvbWUganVkaWNpb3VzIHVzZSBvZiByZWdleCwgdG8gc2VhcmNoIHRoZSBlbnRpcmUgcHJvamVjdCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGlzIGdpdmVzIG1lIGEgcXVpY2sgb3ZlcnZpZXcgb2YgYWxsIHBvdGVudGlhbCBjYWxsIHNpdGVzLiBIb3dldmVyLCBzdGF0aWMgYW5hbHlzaXMgY2FuIGJlIGEgYml0IGJsdW50OyBpdCBtaWdodCBtaXNzIGNhbGxzIGlmIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIG1hY3JvIGV4cGFuc2lvbnMuIEkmIzM5O2QgdGhlbiBoYXZlIHRvIHJlZmluZSB0aGUgc2VhcmNoLgoKSWYgdGhhdCBwcm92ZXMgaW5zdWZmaWNpZW50LCBvciBpZiB0aGUgY29kZSBpcyBwYXJ0aWN1bGFybHkgY29tcGxleCwgSSYjMzk7bGwgbmVlZCB0byBlbXBsb3kgYSBkZWJ1Z2dlci4gSSBjYW4gc2V0IGEgYnJlYWtwb2ludCBvbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgYW5kIHRoZW4gcnVuIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGEgdGVzdCBjYXNlIHRoYXQgSSBrbm93IHNob3VsZCB0cmlnZ2VyIGl0cyBleGVjdXRpb24uIFRoaXMgaXMgd2hlcmUgYSBnb29kIHRlc3QgZW52aXJvbm1lbnQgY29tZXMgaW4gaGFuZHkuIFN0ZXBwaW5nIHRocm91Z2ggdGhlIGNvZGUgd2lsbCBzaG93IG1lIHRoZSBhY3R1YWwgY2FsbCBzdGFjayBhbmQgYWxsb3cgbWUgdG8gb2JzZXJ2ZSB0aGUgZXhlY3V0aW9uIGNvbnRleHQgbGVhZGluZyB1cCB0byB0aGUgZnVuY3Rpb24gY2FsbC4gSSBjYW4gYWxzbyBsb29rIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBjb250cm9scyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgZXZlciBjYWxsZWQsIG9yIGlzIGNhbGxlZCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLgoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyBhIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIFRoaXMgbWlnaHQgaW52b2x2ZSBhIGNvbWJpbmF0aW9uIG9mIHN0YXRpYyBhbmFseXNpcywgZHluYW1pYyBkZWJ1Z2dpbmcsIGFuZCBldmVuIHNvbWUgY29kZSByZXZpZXcgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMxMzc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19odWdlcGFnZV9tZW1fYnAodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE1Mi1cbm1tL2RhbW9uL2NvcmUuYzozMTUzOnN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0zMTU0LVx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjA0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzIxMC1cdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcbm1tL2RhbW9uL2NvcmUuYzozMjExOlx0XHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMyMTItXHRcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDE1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipUcmFjaW5nIHRoZSBMaW5lYWdlIG9mIGBkYW1vc19xdW90YV9zY29yZWAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIGh1bnQgZG93biB3aGVyZSBgZGFtb3NfcXVvdGFfc2NvcmVgIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IHNpZ25pZmljYW50IGludmVzdGlnYXRpb24sIHJpZ2h0PyBJIHdhbnQgdG8gc2VlIGFsbCB0aGUgY2FsbGVycywgYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIGlzIGFic29sdXRlbHkgY3J1Y2lhbDsgaXQgdGVsbHMgbWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGRhbW9zX3F1b3RhX3Njb3JlYCBvcGVyYXRlcyBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0cyBvdXRwdXQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyBpdHMgcm9sZSB3aXRoaW4gdGhlIHdpZGVyIGZyYW1ld29yaywgaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvciBldmVuIGFudGljaXBhdGUgdGhlIHJpcHBsZSBlZmZlY3RzIG9mIGFueSBjaGFuZ2VzIEkgbWlnaHQgbWFrZSB0byB0aGF0IGZ1bmN0aW9uLiBTbywgc2hvdyBtZSB0aGUgY2FsbGVycyEgTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfcXVvdGFfc2NvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjAzLS8qIFJldHVybiB0aGUgaGlnaGVzdCBzY29yZSBzaW5jZSBpdCBtYWtlcyBzY2hlbWVzIGxlYXN0IGFnZ3Jlc3NpdmUgKi9cbm1tL2RhbW9uL2NvcmUuYzozMjA0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy0zMjA1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzIyMD1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjIyLVx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG5tbS9kYW1vbi9jb3JlLmM6MzIyMzpcdHVuc2lnbmVkIGxvbmcgc2NvcmUgPSBkYW1vc19xdW90YV9zY29yZShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMjI0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjI5PXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzIzMi1cdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jOjMyMzM6XHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzIzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjIzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBDYWxsZXJzIHRvIERBTU9TIFR1bmluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyB0aGVzZSBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAgYW5kIGBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3RgIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBrbm93aW5nIHRoZWlyIGJhc2ljIGRlZmluaXRpb24g4oCTIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICpjb250ZXh0KiBvZiB0aGVpciBjYWxscy4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBtb2R1bGVzLCBjbGFzc2VzLCBvciBmdW5jdGlvbnMgYXJlIHJlbHlpbmcgb24gdGhlbS4gQXJlIHRoZXkgYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gdG9wLWxldmVsIHNjcmlwdHMsIG9yIGFyZSB0aGV5IGJ1cmllZCBkZWVwIHdpdGhpbiBhIGNvbXBsZXggYXJjaGl0ZWN0dXJlPyBXaGF0IGRhdGEgYXJlIHRoZXkgcmVjZWl2aW5nIGFzIGlucHV0PyBXaGF0IGlzIHRoZWlyIGV4cGVjdGVkIG91dHB1dCwgYW5kIHdoZXJlIGRvZXMgdGhhdCBvdXRwdXQgZ28/IFRoaXMgaGVscHMgcGFpbnQgYSBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSB3aG9sZSBzeXN0ZW0uIFRoaXMgYW5hbHlzaXMgc2hvdWxkIGhlbHAgbWUsIGJhc2VkIG9uIHRoZSByZXN1bHRzLCB0byBmb3JtIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHR1bmluZyBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgdG8gc3VwcG9ydCB0aGUgb3ZlcmFsbCBnb2FsIG9mIHRoZSBzeXN0ZW0uIEkgd2lsbCBuZWVkIHRvIHVzZSBjYWxsIGdyYXBoIGFuYWx5c2lzLCBjcm9zcy1yZWZlcmVuY2luZywgb3IgcGVyaGFwcyBldmVuIGR5bmFtaWMgYW5hbHlzaXMgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19nb2FsX3R1bmVfZXN6X2JwXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzIwND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyMTktXG5tbS9kYW1vbi9jb3JlLmM6MzIyMDpzdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyMjEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjI4LVxubW0vZGFtb24vY29yZS5jOjMyMjk6c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxubW0vZGFtb24vY29yZS5jLTMyMzAtXHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI0Nj1zdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjU5LVx0XHRpZiAocXVvdGEtXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QpXG5tbS9kYW1vbi9jb3JlLmM6MzI2MDpcdFx0XHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3QoY3R4LCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMjYxLVx0XHRlbHNlIGlmIChxdW90YS1cdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXG5tbS9kYW1vbi9jb3JlLmM6MzI2MjpcdFx0XHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKGN0eCwgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzI2My1cdFx0ZXN6ID0gcXVvdGEtXHUwMDNlZXN6X2JwIC8gMTAwMDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgcGF0dGVybnMgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgY2FsbHMgdG8gYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/JiMzNDsgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8ga25vdyB0aGUgY29kZWJhc2UgbG9jYXRpb25zIGFuZCBjb250ZXh0cyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGVhY2ggY2FsbC4gQXJlIHdlIHRhbGtpbmcgY29yZSBxdW90YSBtYW5hZ2VtZW50IGxvZ2ljLCBhIHNwZWNpZmljIGZlYXR1cmUsIG9yIHBvdGVudGlhbGx5LCBhIHRlc3QgaGFybmVzcz8KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGFyZ3VtZW50cyBwYXNzZWQuICpXaGF0KiBpcyBiZWluZyBzZXQ/IFF1b3RhIHR5cGUsIHZhbHVlcywgb3RoZXIgcGFyYW1ldGVycz8gS25vd2luZyB0aGUgYXJndW1lbnRzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5IGFuZCB0aGUgZGF0YSBpdCBvcGVyYXRlcyBvbi4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIGFyZ3VtZW50cyBhcmUgZGVyaXZlZC4gQXJlIHRoZXkgY29taW5nIGZyb20gdXNlciBpbnB1dCwgY29uZmlndXJhdGlvbiBmaWxlcywgY2FsY3VsYXRlZCB2YWx1ZXMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHNvdXJjZSBoZWxwcyBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGxvZ2ljYWwgZmxhd3MuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyAqd2hlbiogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEFyZSB0aGVzZSBxdW90YSBhZGp1c3RtZW50cyB0cmlnZ2VyZWQgYnkgdXNlciBhY3Rpb25zLCBiYWNrZ3JvdW5kIHByb2Nlc3Nlcywgc3lzdGVtIGV2ZW50cywgb3Igc29tZXRoaW5nIGVsc2U/IFRoZSB0aW1pbmcgaGFzIGEgYmlnIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBxdW90YSBtYW5hZ2VtZW50IHN5c3RlbSYjMzk7cyBiZWhhdmlvciwgYW5kIGhvdyB3ZSBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMuIElzIHRoZXJlIGFueSBsb2NraW5nIGludm9sdmVkPyBBbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uPwoKRmluYWxseSwgd2hhdCBhcmUgdGhlICpjb25zZXF1ZW5jZXMqIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhlY3V0aW9uPyBEb2VzIGl0IGRpcmVjdGx5IG1vZGlmeSBhIGRhdGFiYXNlLCB1cGRhdGUgY2FjaGVzLCB0cmlnZ2VyIG5vdGlmaWNhdGlvbnMsIG9yIHNvbWUgY29tYmluYXRpb24gb2YgdGhlc2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlIGVmZmVjdHMuIEFuZCBtb3N0IGltcG9ydGFudGx5LCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaGVyZT8gQ2FuIG1hbGljaW91cyBhY3RvcnMgZXhwbG9pdCB0aGVzZSBjYWxscyB0byBieXBhc3MgcXVvdGEgbGltaXRzLCBjYXVzZSBkZW5pYWwgb2Ygc2VydmljZSwgb3IgbWFuaXB1bGF0ZSBkYXRhPyBLbm93aW5nIHdoZXJlIHRoaXMgY2FsbCBsaXZlcyBpcyBrZXkuIElzIGl0IGluIGNvZGUgdGhhdCBsaXZlcyBvbiB0aGUgc2VydmVyLCBhIGNsaWVudCBvciBpbiBzb21lIG90aGVyIGNvbnRleHQ/IEkgd2FudCB0byBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW4gYXR0YWNrIHN1cmZhY2UuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBlbnRpcmUgY2FsbCBncmFwaCwgdGhlIGFyZ3VtZW50cywgdGhlIHRpbWluZywgYW5kIHRoZSB1bHRpbWF0ZSBpbXBhY3QgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzIyOT1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyNDUtICovXG5tbS9kYW1vbi9jb3JlLmM6MzI0NjpzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyNDcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjk2PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMDktXHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG5tbS9kYW1vbi9jb3JlLmM6MzMxMDpcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzExLVx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMyNS1cdFx0XHRjYWNoZWRfZXN6ID0gcXVvdGEtXHUwMDNlZXN6O1xubW0vZGFtb24vY29yZS5jOjMzMjY6XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzMyNy1cdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyOC1cdC8qIGZyZXNoIGdvYWwsIGZpcnN0IHR1bmluZyByb3VuZCAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkyOTpcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTMwLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MzItXHQvKiBzZWNvbmQgcm91bmQ6IGxhc3RfcHNpX3RvdGFsIGlzIGluaXRpYWxpc2VkIG5vdyAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkzMzpcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTM0LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MzctXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChnb2FsLCBcdTAwMjZzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkzODpcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTM5LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDYtXHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwtLTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NDc6XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk0OC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgMHVsKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTUzLVx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NTQ6XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk1NS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfMzJLKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc0NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKlRyYWNpbmcgRG93biBhIERBTU9OIFF1b3RhIElzc3VlKioKCk9rYXksIHNvIGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgYW5kIGl0JiMzOTtzIG5lc3RsZWQgZGVlcCBpbiBgbW0vZGFtb24vY29yZS5jYC4gIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzICpjYWxsaW5nKiBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gSSYjMzk7bGwgd2FudCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbjsgdW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBnb2luZyB0byBpbGx1bWluYXRlIHRoZSBjaXJjdW1zdGFuY2VzIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uIGFuZCBnaXZlIG1lIHNvbWUgY29udGV4dC4gSXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgdG8gZmlndXJpbmcgb3V0IGFueSBxdW90YS1yZWxhdGVkIHByb2JsZW1zIHRoYXQgbWF5IGJlIGFyaXNpbmcgd2l0aGluIERBTU9OLiBUaW1lIHRvIGRpZyBpbiBhbmQgY2hlY2sgdGhvc2UgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMjgyPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyOTUtXG5tbS9kYW1vbi9jb3JlLmM6MzI5NjpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyOTcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzc3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzkyLVxubW0vZGFtb24vY29yZS5jOjMzOTM6XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzk0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE3NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBEQU1PTiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGxpdmVzIHdpdGhpbiB0aGUgYGtkYW1vbmRfZm5gIHdvcmtlciB0aHJlYWQsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGJyb2FkZXIgYGtkYW1vbmRgIGluZnJhc3RydWN0dXJlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgY29udGV4dHVhbGl6ZXMgaXRzIHJvbGUuIFRoZW4gdGhlcmUmIzM5O3MgdGhpcyBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gLCBwcm92aWRpbmcgdXNlcnNwYWNlIGNvbnRyb2wgb3ZlciBEQU1PTiBxdW90YXMsIGdvYWxzLCBhbmQgc28gb24uIE15IG5leHQgc3RlcCBoZXJlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSByZWxldmFudCBgS2NvbmZpZ2Agb3B0aW9ucyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5hYmxlbWVudCBjcml0ZXJpYSBmb3IgYm90aCBEQU1PTiBpbiBnZW5lcmFsLCBhbmQgc3BlY2lmaWNhbGx5IHRoaXMgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyByZXF1aXJlZCBhdCBjb21waWxlIHRpbWUgZm9yIGFsbCBvZiB0aGlzIHRvIGJlIGF2YWlsYWJsZSwgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2luZy4gVGhpcyBpcyBmdW5kYW1lbnRhbDsgdW5kZXJzdGFuZGluZyB0aGUgcHJlcmVxdWlzaXRlcyB1cGZyb250IHNhdmVzIGEgbG90IG9mIHdhc3RlZCBlZmZvcnQgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29yZSBCdWlsZCBhbmQgUFNJIFF1b3RhIEVuYWJsZW1lbnQqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgYGNvcmUuY2AgYnVpbGQgYW5kIHRob3NlIFBTSSBxdW90YSBnb2Fscy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBtbS9kYW1vbi9NYWtlZmlsZWAuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBjb3JlLmNgIGFyZSBkZWZpbmVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb25zIG9yIGJ1aWxkIGZsYWdzIHJlbGF0ZWQgdG8gUFNJIHF1b3RhIGludGVncmF0aW9uIHdvdWxkIGJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gc2VlIGlmIGBjb3JlLmNgIGlzIGJlaW5nIGNvbXBpbGVkIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMgb3IgaWYgaXQmIzM5O3MgZ2VuZXJhbGx5IGluY2x1ZGVkLiBGdXJ0aGVybW9yZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIHJlbGF0ZWQgdG8gUFNJIHF1b3RhIHN1cHBvcnQg4oCTIHBlcmhhcHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MsIG9iamVjdCBmaWxlIGluY2x1c2lvbiwgb3IgbGlua2VyIGRpcmVjdGl2ZXMgdGhhdCBhcmUgdHJpZ2dlcmVkIGJ5IGEgcGFydGljdWxhciBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcyYjMzk7bGwgcmVxdWlyZSBhIGJpdCBvZiBjcm9zcy1yZWZlcmVuY2luZyBhbmQgcG90ZW50aWFsbHkgc29tZSBgZ3JlcGBpbmcgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgc3VidGxlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgZm9yIGRpYWdub3NpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHVuZGVyc3RhbmRpbmcgaG93IFBTSSBxdW90YSBpbnRlcmFjdGlvbnMgYXJlIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzQ1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfREFNT05gLiBUaGUgS2NvbmZpZyBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydCwgc28gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGNoZWNrIG91dCBgbW0vZGFtb24vS2NvbmZpZ2AuIExldCYjMzk7cyBnZXQgYSBnb29kIHBpY3R1cmUgb2YgdGhlIHNpdHVhdGlvbi4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGZpcnN0IDQwIGxpbmVzIG9mIHRoZSBmaWxlLCBqdXN0IHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZCBhbmQgdW5kZXJzdGFuZCB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuIEhvcGVmdWxseSwgdGhhdCBnaXZlcyBtZSBlbm91Z2ggY29udGV4dCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBEQU1PTlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxuICAgOTpcdFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcbiAgMTA6XHRcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXG4gIDEzOlx0XHQgIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxuICAxNjpcdFx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBEQU1PTlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG4gIDIwOlx0XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxuICAyMTpcdFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuICAyMjpcdFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxuICAyNzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI4Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDI5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAzMDpcdFx0aGVscFxuICAzMTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDM0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICAzNTpcdFxuICAzNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBEQU1PTl9WQUREUlxuICAzOTpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbiAgNDA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ2MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIERBTU9OIFN5c2ZzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gREFNT04g4oCTIER5bmFtaWMgQWNjZXNzIE1vbml0b3Jpbmcg4oCTIGFnYWluLiBSaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGBDT05GSUdfREFNT05fU1lTRlNgLCBhbmQgdGhlIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgaXMgdHVja2VkIGF3YXkgaW4gYG1tL2RhbW9uL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgbWFpbiBmZWF0dXJlIGZsYWdzIGZvciBEQU1PTiB3aWxsIGJlIHNldCB1cC4gVGltZSB0byBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgdGhlIGRlZmF1bHQgdmFsdWUgaXMsIGFuZCBvZiBjb3Vyc2UsIHdoYXQmIzM5O3MgYmVlbiBzYWlkIGluIGNvbW1lbnRzIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBob29rcyBpbnRvIHN5c2ZzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4gIDgxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgODI6XHRcbiAgODM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDg0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA4NTpcdFxuICA4NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4NzpcdFxuICA4ODpcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXG4gIDg5Olx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4gIDkwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xuICA5MzpcdFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG4gIDk0Olx0XHQgIHRob3NlLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxuICA5NzpcdFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXG4gIDk4Olx0XHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxuICA5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE5OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgUFNJIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgYGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWxgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIGdyYWJiaW5nIHNvbWUga2luZCBvZiBQU0kgKFByZXNzdXJlIFN0YWxsIEluZm9ybWF0aW9uKSByZWxhdGVkIG1lbW9yeSBkYXRhLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIHRoaW5nIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBmdW5jdGlvbi4gSXMgaXQgaW4gdGhlIG1haW4gY29kZWJhc2UsIG9yIG1heWJlIGEgc2VwYXJhdGUgY29uZmlndXJhdGlvbiBmaWxlPyBJIGhhdmUgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZGVwZW5kZW5jeSBsaWVzIGFuZCBob3cgdGhpcyBQU0kgZGF0YSBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLCB0byBkZXRlcm1pbmUgaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI4NjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQodW5zaWduZWQgbG9uZyBsYXN0X2lucHV0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODk0LVxubW0vZGFtb24vY29yZS5jOjI4OTU6c3RhdGljIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtMjg5Ni17XG4tLVxubW0vZGFtb24vY29yZS5jLTI5MDQtXG5tbS9kYW1vbi9jb3JlLmM6MjkwNTpzdGF0aWMgaW5saW5lIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtMjkwNi17XG4tLVxubW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTYyLVx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG5tbS9kYW1vbi9jb3JlLmM6MzE2MzpcdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbm1tL2RhbW9uL2NvcmUuYy0zMTY0LVx0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQyLVx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUgPSAxMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NDM6XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpIC0gMTA7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQ0LVx0LyogVTY0X01BWCBtYXJrcyBhbiB1bm1lYXN1cmVkIGdvYWwsIGtlZXAgdGhlIHNhbXBsZSBhd2F5IGZyb20gaXQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERBTU9OIENvcmUmIzM5O3MgSGVhcnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgY2h1bmsgb2YgY29kZSB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbTogbGluZXMgMjg5MCB0byAyOTE1IGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBpbnRlcmVzdGluZyBtaWdodCBiZSBoYXBwZW5pbmcgaW4gdGhhdCByZWdpb247IHBlcmhhcHMgaXQmIzM5O3MgcmVsYXRlZCB0byBhIHJlY2VudCBvYnNlcnZhdGlvbiBvciBhIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gZGlhZ25vc2UuIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gc29tZXRoaW5nIHNwZWNpZmljIGhlcmU6IHBlcmhhcHMgREFNT04mIzM5O3MgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgZXZlbnRzLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIG9yIG1heWJlIHRoZSBsb2dpYyBzdXJyb3VuZGluZyByZWdpb24gbWFuYWdlbWVudCBvciBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhvc2UgbGluZXMsIGFuZCBteSBleHBlcmllbmNlIHRlbGxzIG1lIEkmIzM5O2xsIGxpa2VseSBiZSBsb29raW5nIGZvciBrZXkgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciB2YXJpYWJsZSBhc3NpZ25tZW50cyB0aGF0IG1pZ2h0IHJldmVhbCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IGNvZGUgYmxvY2suIEZyb20gcGFzdCBleHBlcmllbmNlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IERBTU9OIGlzIGtlZXBpbmcgdHJhY2sgb2YgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBpbiB0aGF0IHJhbmdlLCBhbmQgaG93IGl0IGlzIG1ha2luZyBkZWNpc2lvbnMgYWJvdXQgbWVtb3J5IGFjY2Vzc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg5MDpcdFx0cmV0dXJuIFVMT05HX01BWDtcbjI4OTE6XHR9XG4yODkyOlx0XG4yODkzOlx0I2lmZGVmIENPTkZJR19QU0lcbjI4OTQ6XHRcbjI4OTU6XHRzdGF0aWMgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcbjI4OTY6XHR7XG4yODk3Olx0XHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2cHNpX2Rpc2FibGVkKSlcbjI4OTg6XHRcdFx0cmV0dXJuIDA7XG4yODk5Olx0XHRyZXR1cm4gZGl2X3U2NChwc2lfc3lzdGVtLnRvdGFsW1BTSV9BVkdTXVtQU0lfTUVNICogMl0sXG4yOTAwOlx0XHRcdFx0TlNFQ19QRVJfVVNFQyk7XG4yOTAxOlx0fVxuMjkwMjpcdFxuMjkwMzpcdCNlbHNlXHQvKiBDT05GSUdfUFNJICovXG4yOTA0Olx0XG4yOTA1Olx0c3RhdGljIGlubGluZSB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxuMjkwNjpcdHtcbjI5MDc6XHRcdHJldHVybiAwO1xuMjkwODpcdH1cbjI5MDk6XHRcbjI5MTA6XHQjZW5kaWZcdC8qIENPTkZJR19QU0kgKi9cbjI5MTE6XHRcbjI5MTI6XHQjaWZkZWYgQ09ORklHX05VTUFcbjI5MTM6XHRzdGF0aWMgYm9vbCBpbnZhbGlkX21lbV9ub2RlKGludCBuaWQpXG4yOTE0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ4NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUXVvdGEgR29hbCBNZXRyaWMqKgoKT2theSwgc28gYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGtpY2tzIGluIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBhcyB0aGUgcXVvdGEgZ29hbCBtZXRyaWMuIFJpZ2h0LiBOb3csIHdoZXJlIGlzICp0aGF0KiBtZXRyaWMgYWN0dWFsbHkgYmVpbmcgc2V0PyBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBzeXNmcyBhbmQgdHJhY2sgZG93biB0aGUgc291cmNlIG9mIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB1bmRlcnN0YW5kIHRoaXMgaW50ZXJhY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCBzeXNmcyBmaWxlcyBhcmUgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTI4PWVudW0gZGFtb3NfYWN0aW9uIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTQ2LSAqIEBEQU1PU19RVU9UQV9VU0VSX0lOUFVUOlx0VXNlci1pbnB1dCB2YWx1ZS5cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxNDc6ICogQERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcdFN5c3RlbSBsZXZlbCBzb21lIG1lbW9yeSBQU0kgaW4gdXMuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTQ4LSAqIEBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlx0TWVtVXNlZCByYXRpbyBvZiBhIG5vZGUuXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTE2MT1lbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNjItXHREQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE2MzpcdERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNjQtXHREQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz02ODg9c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy02OTgtXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcbm1tL2RhbW9uL2NvcmUuYzo2OTk6XHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbm1tL2RhbW9uL2NvcmUuYy03MDAtXHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTkxPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTk0LVx0c3dpdGNoIChkc3QtXHUwMDNlbWV0cmljKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTE5NTpcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxubW0vZGFtb24vY29yZS5jLTExOTYtXHRcdGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XG4tLVxubW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTYxLVx0XHRicmVhaztcbm1tL2RhbW9uL2NvcmUuYzozMTYyOlx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG5tbS9kYW1vbi9jb3JlLmMtMzE2My1cdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cdGlmIChxdW90YV9tZW1fcHJlc3N1cmVfdXMpIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVx0XHRcdFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzNT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNDAtXHR7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI0MTpcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjQyLVx0XHQubmFtZSA9IFwmIzM0O3NvbWVfbWVtX3BzaV91c1wmIzM0Oyxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODA0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE0LVx0c3dpdGNoIChkc3QtXHUwMDNlbWV0cmljKSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODE1Olx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE2LVx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWxhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODMyPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzQtXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBkc3QgPSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODM1Olx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgzNi1cdFx0LnRhcmdldF92YWx1ZSA9IDEwMDAsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0Mi1cdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NDM6XHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDQtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODg0LVx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4NTpcdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4Ni1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkwNS1cdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHNyYyA9IHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MDY6XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA3LVx0XHQudGFyZ2V0X3ZhbHVlID0gVUxPTkdfTUFYLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjAtXHRkYW1vbl9hZGRfc2NoZW1lKGMsIHMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkyMTpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsIFVMT05HX01BWCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIyLVx0aWYgKCFnb2FsKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzMyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBUZW1wb3JhbCBHb2FsIFR1bmluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIGBnb2FsX3R1bmVyYCBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGhpbiB0aGF0IGZyYW1ld29yay4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYC4gSSBuZWVkIHRvIHNvbGlkaWZ5IHRoZSBkZXRhaWxzIG9mIHRoZSBvdmVyYXJjaGluZyBzdHJ1Y3R1cmUgYmVmb3JlIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyBiZWhhdmlvciBvZiB0aGUgYGdvYWxfdHVuZXJgLiBMZXQgbWUgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgd2hvbGUgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTE5OD1zdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyMC0gKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOlx0QWltIGxvbmcgdGVybSBjb25zaXN0ZW50IHF1b3RhLlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjIyMTogKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTDpcdEFpbSB6ZXJvIHF1b3RhIGFzYXAuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjIyLSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oPTIyMz1lbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyNC1cdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVCxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoyMjU6XHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyNi19O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTUzPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE2Ni1cdFx0XHRpZiAocy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyID09XG5tbS9kYW1vbi9jb3JlLmM6MzE2NzpcdFx0XHRcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbm1tL2RhbW9uL2NvcmUuYy0zMTY4LVx0XHRcdFx0LyogYW4gYWNoaWV2ZWQgc2NvcmUgd291bGQgemVybyB0aGUgdGVtcG9yYWwgcXVvdGEgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI0Nj1zdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjYwLVx0XHRcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChjdHgsIHMpO1xubW0vZGFtb24vY29yZS5jOjMyNjE6XHRcdGVsc2UgaWYgKHF1b3RhLVx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbm1tL2RhbW9uL2NvcmUuYy0zMjYyLVx0XHRcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoY3R4LCBzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTgyMj1zdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfdHVuZXJfbmFtZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgyNy1cdHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODI4Olx0XHQudHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4MjktXHRcdC5uYW1lID0gXCYjMzQ7dGVtcG9yYWxcJiMzNDssXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTAxLVx0XHQuc3ogPSBTWl82NEssXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTAyOlx0XHQuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTAzLVx0fTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA0OT1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNjUtXHRcdC5zeiA9IDksXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTA2NjpcdFx0LmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNjctXHRcdC5mYWlsX2NoYXJnZV9udW0gPSAxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgdHVuaW5nIHByb2Nlc3MuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgYWxsIHVuZm9sZHMuCgoqKkRpZ2dpbmcgaW50byB0aGUgREFNT04gVHVuaW5nIFByb2Nlc3MqKgoKUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIHR1bmluZyBvZiB0aGlzIERBTU9OIHN5c3RlbSwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2UgZm91ciBrZXkgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgOiBgZGFtb3NfcXVvdGFfc2NvcmVgLCBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAsIGBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3RgLCBhbmQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLiBUaGVzZSBzaG91bGQgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBpbnNpZ2h0cyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgcXVvdGFzIGFuZCBnb2FsIGFkanVzdG1lbnRzIGFyZSB3b3JraW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZWxlbWVudHMgaW50ZXJhY3QgdG8gcmVmaW5lIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgZGVjaXNpb25zLiBLbm93aW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzIwMDpcdFx0fVxuMzIwMTpcdH1cbjMyMDI6XHRcbjMyMDM6XHQvKiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmUgc2luY2UgaXQgbWFrZXMgc2NoZW1lcyBsZWFzdCBhZ2dyZXNzaXZlICovXG4zMjA0Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuMzIwNTpcdHtcbjMyMDY6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xuMzIwNzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjA4Olx0XHR1bnNpZ25lZCBsb25nIGhpZ2hlc3Rfc2NvcmUgPSAwO1xuMzIwOTpcdFxuMzIxMDpcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xuMzIxMTpcdFx0XHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xuMzIxMjpcdFx0XHRoaWdoZXN0X3Njb3JlID0gbWF4KGhpZ2hlc3Rfc2NvcmUsXG4zMjEzOlx0XHRcdFx0XHRtdWx0X2ZyYWMoZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlLCAxMDAwMCxcbjMyMTQ6XHRcdFx0XHRcdFx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpKTtcbjMyMTU6XHRcdH1cbjMyMTY6XHRcbjMyMTc6XHRcdHJldHVybiBoaWdoZXN0X3Njb3JlO1xuMzIxODpcdH1cbjMyMTk6XHRcbjMyMjA6XHRzdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuMzIyMTpcdHtcbjMyMjI6XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMzIyMzpcdFx0dW5zaWduZWQgbG9uZyBzY29yZSA9IGRhbW9zX3F1b3RhX3Njb3JlKGMsIHMpO1xuMzIyNDpcdFxuMzIyNTpcdFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQoXG4zMjI2Olx0XHRcdFx0bWF4KHF1b3RhLVx1MDAzZWVzel9icCwgMTAwMDBVTCksIHNjb3JlKTtcbjMyMjc6XHR9XG4zMjI4Olx0XG4zMjI5Olx0c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuMzIzMDpcdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4zMjMxOlx0e1xuMzIzMjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjMzOlx0XHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XG4zMjM0Olx0XG4zMjM1Olx0XHRpZiAoc2NvcmUgXHUwMDNlPSAxMDAwMClcbjMyMzY6XHRcdFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gMDtcbjMyMzc6XHRcdGVsc2UgaWYgKHF1b3RhLVx1MDAzZXN6KVxuMzIzODpcdFx0XHRxdW90YS1cdTAwM2Vlc3pfYnAgPSBxdW90YS1cdTAwM2VzeiAqIDEwMDAwO1xuMzIzOTpcdFx0ZWxzZVxuMzI0MDpcdFx0XHRxdW90YS1cdTAwM2Vlc3pfYnAgPSBVTE9OR19NQVg7XG4zMjQxOlx0fVxuMzI0MjpcdFxuMzI0MzpcdC8qXG4zMjQ0Olx0ICogQ2FsbGVkIG9ubHkgaWYgcXVvdGEtXHUwMDNlbXMsIG9yIHF1b3RhLVx1MDAzZXN6IGFyZSBzZXQsIG9yIHF1b3RhLVx1MDAzZWdvYWxzIGlzIG5vdCBlbXB0eVxuMzI0NTpcdCAqL1xuMzI0NjpcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMjQ3Olx0e1xuMzI0ODpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjQ5Olx0XHR1bnNpZ25lZCBsb25nIHRocm91Z2hwdXQ7XG4zMjUwOlx0XHR1bnNpZ25lZCBsb25nIGVzeiA9IFVMT05HX01BWDtcbjMyNTE6XHRcdHVuc2lnbmVkIGxvbmcgZXN6X3RpbWU7XG4zMjUyOlx0XG4zMjUzOlx0XHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xuMzI1NDpcdFx0XHRxdW90YS1cdTAwM2Vlc3ogPSBxdW90YS1cdTAwM2VzejtcbjMyNTU6XHRcdFx0cmV0dXJuO1xuMzI1NjpcdFx0fVxuMzI1NzpcdFxuMzI1ODpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xuMzI1OTpcdFx0XHRpZiAocXVvdGEtXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QpXG4zMjYwOlx0XHRcdFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0KGN0eCwgcyk7XG4zMjYxOlx0XHRcdGVsc2UgaWYgKHF1b3RhLVx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbjMyNjI6XHRcdFx0XHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKGN0eCwgcyk7XG4zMjYzOlx0XHRcdGVzeiA9IHF1b3RhLVx1MDAzZWVzel9icCAvIDEwMDAwO1xuMzI2NDpcdFx0fVxuMzI2NTpcdFxuMzI2NjpcdFx0aWYgKHF1b3RhLVx1MDAzZW1zKSB7XG4zMjY3Olx0XHRcdGlmIChxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKVxuMzI2ODpcdFx0XHRcdHRocm91Z2hwdXQgPSBtdWx0X2ZyYWMocXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeixcbjMyNjk6XHRcdFx0XHRcdFx0MTAwMDAwMCwgcXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyk7XG4zMjcwOlx0XHRcdGVsc2VcbjMyNzE6XHRcdFx0XHR0aHJvdWdocHV0ID0gUEFHRV9TSVpFICogMTAyNDtcbjMyNzI6XHRcdFx0ZXN6X3RpbWUgPSBtYXgodGhyb3VnaHB1dCAqIHF1b3RhLVx1MDAzZW1zLCBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4zMjczOlx0XHRcdGVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTtcbjMyNzQ6XHRcdH1cbjMyNzU6XHRcbjMyNzY6XHRcdGlmIChxdW90YS1cdTAwM2VzeiBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlc3ogXHUwMDNjIGVzeilcbjMyNzc6XHRcdFx0ZXN6ID0gcXVvdGEtXHUwMDNlc3o7XG4zMjc4Olx0XG4zMjc5Olx0XHRxdW90YS1cdTAwM2Vlc3ogPSBlc3o7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDAwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIERBTU9OIFF1b3RhIElzc3VlIGFuZCBXb3J0aEZ1enppbmcgRGV0ZXJtaW5hdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7dmUgaWRlbnRpZmllZCBhIGJ1ZyBpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHF1b3RhIGltcGxlbWVudGF0aW9uIHJlbGF0ZWQgdG8gaG93IFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pIGlzIGhhbmRsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIHdoZW4gYSBQU0ktYmFzZWQgcXVvdGEgZ29hbCBpcyB1bmluaXRpYWxpemVkIChpLmUuLCBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgIGlzIHNldCB0byBgVTY0X01BWGApLCB0aGUgZXhpc3RpbmcgY29kZSB3YXMgbGVhZGluZyB0byBhbiBpbW1lZGlhdGUgZGlzYWJsaW5nIG9mIHRoZSBxdW90YS4gVGhlIGluaXRpYWwgbG9naWMgd2FzIHNldHRpbmcgdGhlIGN1cnJlbnQgdmFsdWUgZXF1YWwgdG8gdGhlIHRhcmdldCB2YWx1ZSBpZiBsYXN0X3BzaV90b3RhbCB3YXMgZXF1YWwgdG8gVTY0X01BWC4gQW5kIHNpbmNlIHRoZSBjb2RlIHdhcyBpbnRlbmRlZCBmb3IgUFNJIHRyYWNraW5nLCB0aGUgbG9naWMgd291bGQgY2F1c2UgYW4gaXNzdWUgaW4gd2hpY2ggdGhlIGVzel9icCB2YWx1ZSB3aWxsIGJlIHNldCB0byAwLgoKVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBieSBzZXR0aW5nIHRoZSBgY3VycmVudF92YWx1ZWAgdG8gYDBgIGlmIHRoZSBnb2FsIHR1bmVyIGlzIERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwuIFRoaXMgcHJldmVudHMgdGhlIHNjb3JlIGNhbGN1bGF0aW9uIGZyb20gdHJpZ2dlcmluZyB0aGUgcXVvdGEgZGlzYWJsZSBvbiB0aGUgZmlyc3Qgcm91bmQuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBmaXggd29ydGggZnV6emluZz8KCkxldCYjMzk7cyBhcHBseSB0aGUgdHJpYWdlIGNyaXRlcmlhIEkgaGF2ZSBpbiBtaW5kLiBUaGUgY3JpdGVyaWEgc3RhdGVzIHRoYXQgcmVhY2hhYmlsaXR5IGlzIGtleSBhbmQgdGhhdCBtb2RpZmljYXRpb25zIGluIGBtbS9gIHN1YnN5c3RlbXMgYXJlIGhpZ2hseSByZWxldmFudC4gVGhlIGZpeCBkaXJlY3RseSB0b3VjaGVzIGBtbS9kYW1vbi9jb3JlLmNgLCB3aGljaCBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vYCkgc3Vic3lzdGVtLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgKnBvdGVudGlhbGx5KiBoaWdoLXByaW9yaXR5IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IG5leHQgbGluZSBvZiByZWFzb25pbmcgaXMgdG8gZGV0ZXJtaW5lIGlmIERBTU9OIGl0c2VsZiBpcyByZWFjaGFibGUuIFRoZSBjcml0ZXJpYSBzYXkgZnV6emluZyBpcyB1c2VmdWwgaWYgY29kZSBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gYXdhcmUgdGhhdCBEQU1PTiBpcyBkZXNpZ25lZCB0byBiZSBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBpbnRlcmZhY2VzIChzcGVjaWZpY2FsbHksIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9gKSBhbmQgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCBzeXNmcy4gVGhpcyBpcyB2ZXJ5IHJlbGV2YW50IGJlY2F1c2UgdGhlIGNyaXRlcmlhIGFsc28gc3RhdGUgdGhhdCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBBbmQgREFNT04gdXNlcyBRRU1VIG9uIGFtZDY0IHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuCgpTeXprYWxsZXIgcHJvdmlkZXMgZ2VuZXJpYyBmaWxlIG9wZXJhdGlvbnMgLyBzeXNmcyB3cml0ZXMuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgcmVhY2hhYmxlIGZyb20gc3l6a2FsbGVyLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEV4YW1pbmluZyB0aGUgS2NvbmZpZyBmaWxlcywgSSBzZWU6CgoxLiAgYERBTU9OYCBuZWVkcyB0byBiZSBlbmFibGVkLgoyLiAgYERBTU9OX1NZU0ZTYCBpcyBhbHNvIHJlcXVpcmVkIGZvciBzeXNmcyBpbnRlcmFjdGlvbi4KMy4gIGBQU0lgIGlzIHVzZWQgYnkgdGhlIERBTU9TIHF1b3RhIGltcGxlbWVudGF0aW9uLCBidXQgdGhlIGNvZGUgc3RpbGwgY29tcGlsZXMgd2l0aG91dCBQU0kgYW5kIHJldHVybnMgMC4KClNvLCBJIHdpbGwgY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIGlzIHdvcnRod2hpbGUgdG8gZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBTSVxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9NzE1PWNvbmZpZyBUQVNLX0lPX0FDQ09VTlRJTkdcbi0tXG5pbml0L0tjb25maWctNzIzLVxuaW5pdC9LY29uZmlnOjcyNDpjb25maWcgUFNJXG5pbml0L0tjb25maWctNzI1LVx0Ym9vbCBcJiMzNDtQcmVzc3VyZSBzdGFsbCBpbmZvcm1hdGlvbiB0cmFja2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAzOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIG15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRvIGNoZWNrIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nIHRoYXQgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDcyNCBtaWdodCBob2xkIHNvbWUgY2x1ZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHdoYXQgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSXQmIzM5O3MgYSBicm9hZCBzdGFydGluZyBwb2ludCwgYnV0IGBpbml0L0tjb25maWdgIGlzIG9mdGVuIHRoZSBwbGFjZSB0byBnbyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGtlcm5lbCBpbml0aWFsaXphdGlvbiBvciBnZW5lcmFsIGJ1aWxkIG9wdGlvbnMsIGFuZCBsaW5lIDcyNCBmZWVscyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byBiZWdpbiB0aGUgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgZWRpdG9yIGFuZCBkbyBzb21lIGNvbnRleHQtYXdhcmUgc2VhcmNoaW5nIHdpdGhpbiB0aGF0IGxpbmUgYW5kIGl0cyBzdXJyb3VuZGluZyBsaW5lcyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IEkgYW0gbG9va2luZyBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMDpcdFx0ICB0YXNrIGhhcyBjYXVzZWQuXG4gNzIxOlx0XG4gNzIyOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbiA3MjM6XHRcbiA3MjQ6XHRjb25maWcgUFNJXG4gNzI1Olx0XHRib29sIFwmIzM0O1ByZXNzdXJlIHN0YWxsIGluZm9ybWF0aW9uIHRyYWNraW5nXCYjMzQ7XG4gNzI2Olx0XHRzZWxlY3QgS0VSTkZTXG4gNzI3Olx0XHRoZWxwXG4gNzI4Olx0XHQgIENvbGxlY3QgbWV0cmljcyB0aGF0IGluZGljYXRlIGhvdyBvdmVyY29tbWl0dGVkIHRoZSBDUFUsIG1lbW9yeSxcbiA3Mjk6XHRcdCAgYW5kIElPIGNhcGFjaXR5IGFyZSBpbiB0aGUgc3lzdGVtLlxuIDczMDpcdFxuIDczMTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGtlcm5lbCB3aWxsIGNyZWF0ZSAvcHJvYy9wcmVzc3VyZS8gd2l0aCB0aGVcbiA3MzI6XHRcdCAgcHJlc3N1cmUgc3RhdGlzdGljcyBmaWxlcyBjcHUsIG1lbW9yeSwgYW5kIGlvLiBUaGVzZSB3aWxsIGluZGljYXRlXG4gNzMzOlx0XHQgIHRoZSBzaGFyZSBvZiB3YWxsdGltZSBpbiB3aGljaCBzb21lIG9yIGFsbCB0YXNrcyBpbiB0aGUgc3lzdGVtIGFyZVxuIDczNDpcdFx0ICBkZWxheWVkIGR1ZSB0byBjb250ZW50aW9uIG9mIHRoZSByZXNwZWN0aXZlIHJlc291cmNlLlxuIDczNTpcdFxuIDczNjpcdFx0ICBJbiBrZXJuZWxzIHdpdGggY2dyb3VwIHN1cHBvcnQsIGNncm91cHMgKGNncm91cDIgb25seSkgd2lsbFxuIDczNzpcdFx0ICBoYXZlIGNwdS5wcmVzc3VyZSwgbWVtb3J5LnByZXNzdXJlLCBhbmQgaW8ucHJlc3N1cmUgZmlsZXMsXG4gNzM4Olx0XHQgIHdoaWNoIGFnZ3JlZ2F0ZSBwcmVzc3VyZSBzdGFsbHMgZm9yIHRoZSBncm91cGVkIHRhc2tzIG9ubHkuXG4gNzM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBEQU1PTiBtaWdodCBuZWNlc3NpdGF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmV5b25kIHdoYXQgd2UmIzM5O3ZlIGFscmVhZHkgY29uc2lkZXJlZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFzc29jaWF0ZWQgYWRkcmVzcy1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIOKAkyBzb21ldGhpbmcgbGlrZSBgREFNT05fUEFERFJgIG9yIGBEQU1PTl9WQUREUmAgbWlnaHQgYmUgcmVsZXZhbnQuIFRvIGNsYXJpZnkgdGhpcywgSSYjMzk7bGwgZGl2ZSBpbnRvIGBtbS9kYW1vbi9LY29uZmlnYCB0byBnZXQgYSBkZWZpbml0aXZlIG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIG1vc3QgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiAgMjE6XHRcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbiAgMjI6XHRcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcbiAgMjc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyODpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAyOTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODE4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQU1PTiYjMzk7cyBGb2N1cyBTeW1ib2wgU2VsZWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBGb2N1c1N5bWJvbCBzZWxlY3Rpb24gcHJvY2Vzcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBmdW5jdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiwgdGhlIG9uZSBtb2RpZmllZCwgaXMgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSG1tLCBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBzdGF0aWMuIFllcywgaXQgaXM6IGBzdGF0aWMgdm9pZGAuIFRoYXQgcmFpc2VzIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgaXQuIFdvcnRoIGludmVzdGlnYXRpbmcuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgZGFtb3NfcXVvdGFfc2NvcmVgLiBJIHNlZSB0aGF0IGBkYW1vc19xdW90YV9zY29yZWAgdGhlbiBmZWVkcyBpbnRvIGBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3RgIGFuZCBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAuIFRoZXNlLCBpbiB0dXJuLCBhcmUgY2FsbGVkIGJ5IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBkYW1vc19hZGp1c3RfcXVvdGFgLCBhbmQgZmluYWxseSBieSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhhdCBnaXZlcyBhIG5pY2UgY2FsbCBzdGFjay4KCk5vdywgd2hlcmUgYXJlIHRoZSBnb2FscyBjb25maWd1cmVkIGZyb20gc3lzZnM/IEkgbmVlZCB0byBjaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfcXVvdGFfZ29hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz02ODI9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy02ODctXG5tbS9kYW1vbi9jb3JlLmM6Njg4OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYzo2ODk6XHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxubW0vZGFtb24vY29yZS5jLTY5MC1cdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXG5tbS9kYW1vbi9jb3JlLmMtNjkxLXtcbm1tL2RhbW9uL2NvcmUuYzo2OTI6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL2NvcmUuYy02OTMtXG4tLVxubW0vZGFtb24vY29yZS5jLTcwNC1cbm1tL2RhbW9uL2NvcmUuYzo3MDU6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxubW0vZGFtb24vY29yZS5jLTcwNi17XG4tLVxubW0vZGFtb24vY29yZS5jLTcwOS1cbm1tL2RhbW9uL2NvcmUuYzo3MTA6c3RhdGljIHZvaWQgZGFtb3NfZGVsX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNzExLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzE0LVxubW0vZGFtb24vY29yZS5jOjcxNTpzdGF0aWMgdm9pZCBkYW1vc19mcmVlX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNzE2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzE5LVxubW0vZGFtb24vY29yZS5jOjcyMDp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbm1tL2RhbW9uL2NvcmUuYy03MjEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy03MjUtXG5tbS9kYW1vbi9jb3JlLmM6NzI2OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbm1tL2RhbW9uL2NvcmUuYy03Mjcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04MTQ9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtODE1LXtcbm1tL2RhbW9uL2NvcmUuYzo4MTY6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZywgKmdfbmV4dDtcbm1tL2RhbW9uL2NvcmUuYy04MTctXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmLCAqbmV4dDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE2Nj12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ny1cbm1tL2RhbW9uL2NvcmUuYzoxMTc4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbnRoX3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtMTE3OS1cdFx0aW50IG4sIHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbm1tL2RhbW9uL2NvcmUuYy0xMTgwLXtcbm1tL2RhbW9uL2NvcmUuYzoxMTgxOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG5tbS9kYW1vbi9jb3JlLmMtMTE4Mi1cdGludCBpID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE5MT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcbm1tL2RhbW9uL2NvcmUuYzoxMTkyOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxubW0vZGFtb24vY29yZS5jLTExOTMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMjE1PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmM6MTIxNjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjE3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTI0MD1pbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjQxLXtcbm1tL2RhbW9uL2NvcmUuYzoxMjQyOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FsLCAqbmV4dCwgKnNyY19nb2FsLCAqbmV3X2dvYWw7XG5tbS9kYW1vbi9jb3JlLmMtMTI0My1cdGludCBpID0gMCwgaiA9IDAsIGVycjtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTg3OT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg4Mi1cdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xubW0vZGFtb24vY29yZS5jOjE4ODM6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL2NvcmUuYy0xODg0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNDA3PXN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDA5LVx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiB8fCBxdW90YS1cdTAwM2VzeiB8fCBxdW90YS1cdTAwM2VtcyB8fFxubW0vZGFtb24vY29yZS5jOjI0MTA6XHRcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XG5tbS9kYW1vbi9jb3JlLmMtMjQxMS19XG4tLVxubW0vZGFtb24vY29yZS5jPTI5MTg9c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxubW0vZGFtb24vY29yZS5jOjI5MTk6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxubW0vZGFtb24vY29yZS5jLTI5MjAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yOTQ2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG5tbS9kYW1vbi9jb3JlLmM6Mjk0NzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMjk0OC17XG4tLVxubW0vZGFtb24vY29yZS5jPTMxMDA9c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxubW0vZGFtb24vY29yZS5jOjMxMDE6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxubW0vZGFtb24vY29yZS5jLTMxMDIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTA2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG5tbS9kYW1vbi9jb3JlLmM6MzEwNzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMzEwOC17XG4tLVxubW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxubW0vZGFtb24vY29yZS5jOjMxNTQ6XHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMzE1NS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMyMDQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyMDUte1xubW0vZGFtb24vY29yZS5jOjMyMDY6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL2NvcmUuYy0zMjA3LVx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjMxLXtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjMyOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG5tbS9kYW1vbi9scnVfc29ydC5jLTIzMy1cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTE5OS1cdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xubW0vZGFtb24vcmVjbGFpbS5jOjIwMDpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xubW0vZGFtb24vcmVjbGFpbS5jLTIwMS1cdHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIxNT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxNi1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxNzpcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIyOT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMzA6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjMxLVx0Y2hhciAqbmFtZTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTY4ND1zdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5MS1cdHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3N6O1x0LyogRWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMgKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjkyOlx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5My1cdHVuc2lnbmVkIGludCBmYWlsX2NoYXJnZV9udW07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4MTc9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MTg6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgdHVuZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxOS1cdGNoYXIgKm5hbWU7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NTU6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODU2LVx0aW50IGksIGVycjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg5OD1pbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkwNy1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MDg6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MDktXHRcdGludCBlcnI7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgwND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODA1Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgwNjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDcte1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MzI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODMzLXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MzQ6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBkc3QgPSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM1LVx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDEtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODQyOlx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0My1cdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDgtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODQ5Olx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODUwLVx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTMtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODU0Olx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU1LVx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjAtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODYxOlx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODYyLVx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjctXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODY4Olx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODY5LVx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlAsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3NS1cdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NzY6XHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NzctXHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODgzLVx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4NDpcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04ODUtXHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODk2PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDQtXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3MgPSB7fTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MDU6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBzcmMgPSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA2LVx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDgtXHR9O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkwOTpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkxMC1cdHN0cnVjdCBkYW1vcyAqcztcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9OTYwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTYxOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWxzLCBpbnQgbnJfZHN0X2dvYWxzLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk2MjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyY19nb2FscywgaW50IG5yX3NyY19nb2Fscylcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NjMte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk2NC1cdHN0cnVjdCBkYW1vc19xdW90YSBkc3QsIHNyYztcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NjU6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCwgKm5leHQ7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTY2LVx0Ym9vbCBza2lwID0gdHJ1ZTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTAxND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMTYtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3IodGVzdCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDE3Olx0XHRcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXt9LCAwLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwMTg6XHRcdFx0KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsW10pe1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMTktXHRcdFx0XHR7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMjQtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3IodGVzdCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDI1Olx0XHRcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDI2LVx0XHRcdFx0e1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDMxLVx0XHRcdH0sIDEsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTAzMjpcdFx0XHQoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxbXSl7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAzMy1cdFx0XHRcdHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAzOC1cdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2Zvcih0ZXN0LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwMzk6XHRcdFx0KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsW10pe1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNDAtXHRcdFx0XHR7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNDUtXHRcdFx0fSwgMSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDQ2Olx0XHRcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXt9LCAwKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDQ3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gUXVvdGEgU2NvcmUgU2V0dGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIHRoZSBmdW5jdGlvbiB3ZSBuZWVkIHRvIGV4YW1pbmUsIGFzIGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgZXhhY3RseSB3aGF0IHRoaXMgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGZ1bmN0aW9uICpkb2VzKi4mIzM0OyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHF1b3RhIHNjb3JlcyB3aXRoaW4gdGhlIERBTU9OIHN5c3RlbSBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4OTA6XHRcdFx0ZGVmYXVsdDpcbjI4OTE6XHRcdFx0XHRicmVhaztcbjI4OTI6XHRcdFx0fVxuMjg5MzpcdFx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChxdW90YSwgZ29hbCk7XG4yODk0Olx0XHR9XG4yODk1Olx0XHRyZXR1cm4gMDtcbjI4OTY6XHR9XG4yODk3Olx0XG4yODk4Olx0aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4yODk5Olx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbjI5MDA6XHR7XG4yOTAxOlx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbjI5MDI6XHRcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHt9O1xuMjkwMzpcdFx0aW50IGkgPSAwO1xuMjkwNDpcdFxuMjkwNTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cXVvdGEuZ29hbHMpO1xuMjkwNjpcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7XG4yOTA3Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnN5c2ZzX3NjaGVtZTtcbjI5MDg6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcsICpnX25leHQ7XG4yOTA5Olx0XHRcdGludCBlcnI7XG4yOTEwOlx0XG4yOTExOlx0XHRcdC8qIHVzZXIgY291bGQgaGF2ZSByZW1vdmVkIHRoZSBzY2hlbWUgc3lzZnMgZGlyICovXG4yOTEyOlx0XHRcdGlmIChpIFx1MDAzZT0gc3lzZnNfc2NoZW1lcy1cdTAwM2VucilcbjI5MTM6XHRcdFx0XHRicmVhaztcbjI5MTQ6XHRcbjI5MTU6XHRcdFx0c3lzZnNfc2NoZW1lID0gc3lzZnNfc2NoZW1lcy1cdTAwM2VzY2hlbWVzX2FycltpXTtcbjI5MTY6XHRcdFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3NjaGVtZS1cdTAwM2VxdW90YXMtXHUwMDNlZ29hbHMsXG4yOTE3Olx0XHRcdFx0XHRcdTAwMjZxdW90YSk7XG4yOTE4Olx0XHRcdGlmIChlcnIpIHtcbjI5MTk6XHRcdFx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcdTAwMjZxdW90YSlcbjI5MjA6XHRcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChnKTtcbjI5MjE6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjkyMjpcdFx0XHR9XG4yOTIzOlx0XHRcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcdTAwMjZzY2hlbWUtXHUwMDNlcXVvdGEsIFx1MDAyNnF1b3RhKTtcbjI5MjQ6XHRcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXHUwMDI2cXVvdGEpXG4yOTI1Olx0XHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xuMjkyNjpcdFx0XHRpZiAoZXJyKVxuMjkyNzpcdFx0XHRcdHJldHVybiBlcnI7XG4yOTI4Olx0XHRcdGkmIzQzOyYjNDM7O1xuMjkyOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk4MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYC4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBkYW1vc19xdW90YV9zY29yZWAsIHdoaWNoIGlzIGl0c2VsZiBpbnZva2VkIGR1cmluZyBEQU1PTiBydW50aW1lLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZGFtb25kYC4gVGhhdCYjMzk7cyB0aHJvdWdoIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIC0mZ3Q7IGBkYW1vc19hZGp1c3RfcXVvdGFgIC0mZ3Q7IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCAtJmd0OyBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAgLyBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0YCAtJmd0OyBgZGFtb3NfcXVvdGFfc2NvcmVgIC0mZ3Q7IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYC4gVGhpcyBmdW5jdGlvbiBpcyBhbHNvIHJlYWNoZWQgd2hlbiBzeXNmcyBpcyB3cml0dGVuIHRvIGFkanVzdCBEQU1PUyBzZXR0aW5ncy4gYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgIGRpcmVjdGx5IHNldHMgdGhlIGVmZmVjdGl2ZSBxdW90YS4KCk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0eXBpY2FsIGVudmlyb25tZW50cy4gQWgsIGl0IHNlZW1zIERBTU9OIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBubyBleG90aWMgaGFyZHdhcmUgaXMgbmVlZGVkLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgYWNjZXNzaWJsZSBmb3IgdGVzdGluZy4KCk5vdywgZG9lcyBpdCB0b3VjaCBjb3JlIHN1YnN5c3RlbXM/IFllcywgYG1tL2RhbW9uL2AgbGl2ZXMgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vYCksIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBxdW90YSBjYWxjdWxhdGlvbnMgd2hlbiB0aGUgbWV0cmljIGlzIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLiBUaGlzIGFsaWducyB3aXRoIHRoZSAmIzM0O0NvcmUgU3Vic3lzdGVtcyYjMzQ7IGNyaXRlcmlhLCBhbmQgdGhlcmVmb3JlLCBXb3J0aEZ1enppbmc9dHJ1ZS4KCkxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbjoKKiAgIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYAoqICAgYGRhbW9zX3F1b3RhX3Njb3JlYAoqICAgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgCiogICBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAKKiAgIGBkYW1vc19hZGp1c3RfcXVvdGFgCgpBcmUgdGhlc2UgZnVuY3Rpb25zIGxpa2VseSB0byBiZSBldmVyeXdoZXJlPyBObywgdGhlc2Ugc2VlbSBzcGVjaWZpYyB0byBEQU1PTiBhbmQgREFNT1MsIG5vdCB1YmlxdWl0b3VzIG1lbW9yeSBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuCgpOb3csIHRoZSBlbmFibGVtZW50IGNvbmZpZ3MuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBjb25maWdzIGFyZSBlbmFibGVkOgoKKiAgIGBEQU1PTmAgKHRoZSBiYXNlKQoqICAgYERBTU9OX1NZU0ZTYCAodXNlci1zcGFjZSBjb250cm9sIHRocm91Z2ggc3lzZnMpCiogICBgUFNJYCAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24gYmVjYXVzZSBvZiBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCkKCkhtbSwgYSBxdWljayBub3RlLCBJIHdvbmRlciBpZiBgREFNT05fUEFERFJgIG9yIGBEQU1PTl9WQUREUmAgYXJlIHByZXJlcXVpc2l0ZXM/IEkgc2hvdWxkIGNoZWNrIGBrZGFtb25kX2ZuYCBpbiBgbW0vZGFtb24vY29yZS5jYCB0byBzZWUgaG93IERBTU9OIHNjaGVtZXMgd29yayB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTEwODM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEwNS0gKiBiZSBjYWxsZWQgZnJvbSBhIHNhZmUgY29udGV4dHMuICBTdWNoIGNvbnRleHRzIGluY2x1ZGUgZGFtb25fY3R4IHNldHVwIHRpbWVcbm1tL2RhbW9uL2NvcmUuYzoxMTA2OiAqIHdoaWxlIHRoZSBrZGFtb25kIGlzIG5vdCB5ZXQgc3RhcnRlZCwgYW5kIGluc2lkZSBvZiBrZGFtb25kX2ZuKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTEwNy0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTEwLSAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxubW0vZGFtb24vY29yZS5jOjExMTE6ICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXG5tbS9kYW1vbi9jb3JlLmMtMTExMi0gKiBhcHBseWluZyBhdXRvLXR1bmVkIG1vbml0b3JpbmcgaW50ZXJ2YWxzLlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTE4PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTQ0LVx0Lypcbm1tL2RhbW9uL2NvcmUuYzoxMTQ1Olx0ICogbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXMgd2lsbCBiZSB1cGRhdGVkIGluc2lkZSBrZGFtb25kX2ZuKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cdCAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAzOC1cbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDQwLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNTYtXHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xubW0vZGFtb24vY29yZS5jOjIwNTc6XHRcdGN0eC1cdTAwM2VrZGFtb25kID0ga3RocmVhZF9ydW4oa2RhbW9uZF9mbiwgY3R4LCBcJiMzNDtrZGFtb25kLiVkXCYjMzQ7LFxubW0vZGFtb24vY29yZS5jLTIwNTgtXHRcdFx0XHRucl9ydW5uaW5nX2N0eHMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTUxPXZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNTUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jdHhzOyBpJiM0MzsmIzQzOylcbm1tL2RhbW9uL2NvcmUuYzoyMTU2Olx0XHQvKiBucl9ydW5uaW5nX2N0eHMgaXMgZGVjcmVtZW50ZWQgaW4ga2RhbW9uZF9mbiAqL1xubW0vZGFtb24vY29yZS5jLTIxNTctXHRcdF9fZGFtb25fc3RvcChjdHhzW2ldKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzg4OD1zdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkwOS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozOTEwOnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxubW0vZGFtb24vY29yZS5jLTM5MTEte1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xODc2PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xOTAyLSAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE5MDM6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXCYjMzQ7bW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlXCYjMzQ7KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5MDQtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTIwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIFN5c2ZzIEludGVyZmFjZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBEQU1PTiBpbml0aWFsaXphdGlvbiBmcm9tIHRoZSBzeXNmcyBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgREFNT04gbW9uaXRvciBpcyB0cmlnZ2VyZWQsIGNvbmZpZ3VyZWQsIGFuZCBjb250cm9sbGVkIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRocyBhbmQgZmluZCBvdXQgZXhhY3RseSBob3cgdGhlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIEkgd2FudCB0byBzZWUgaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHRyYW5zbGF0ZXMgaW50byBrZXJuZWwtc3BhY2UgYWN0aW9ucy4gV2hhdCBzeXNmcyBhdHRyaWJ1dGVzIGFyZSBpbnZvbHZlZCwgYW5kIGhvdyBkbyB0aGV5IGltcGFjdCB0aGUgREFNT04gc3RhcnR1cCBzZXF1ZW5jZT8gVGltZSB0byBnZXQgaW50byB0aGUgY29kZSBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTEwODM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEwOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcbm1tL2RhbW9uL2NvcmUuYzoxMTA5OiAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcbm1tL2RhbW9uL2NvcmUuYy0xMTEwLSAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDM5PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA0MS0vKlxubW0vZGFtb24vY29yZS5jOjIwNDI6ICogX19kYW1vbl9zdGFydCgpIC0gU3RhcnRzIG1vbml0b3Jpbmcgd2l0aCBnaXZlbiBjb250ZXh0LlxubW0vZGFtb24vY29yZS5jLTIwNDMtICogQGN0eDpcdG1vbml0b3JpbmcgY29udGV4dFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQ4LSAqL1xubW0vZGFtb24vY29yZS5jOjIwNDk6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0yMDUwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA3MS0vKipcbm1tL2RhbW9uL2NvcmUuYzoyMDcyOiAqIGRhbW9uX3N0YXJ0KCkgLSBTdGFydHMgdGhlIG1vbml0b3JpbmdzIGZvciBhIGdpdmVuIGdyb3VwIG9mIGNvbnRleHRzLlxubW0vZGFtb24vY29yZS5jLTIwNzMtICogQGN0eHM6XHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3Jpbmdcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA4MC0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcbm1tL2RhbW9uL2NvcmUuYzoyMDgxOiAqICYjMzk7ZGFtb25fc3RhcnQoKSYjMzk7IGNhbGwgaXMgY3VycmVudGx5IHJ1bm5pbmcsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGJ1dFxubW0vZGFtb24vY29yZS5jLTIwODItICogcmV0dXJucyAtRUJVU1kuXG4tLVxubW0vZGFtb24vY29yZS5jLTIwODUtICovXG5tbS9kYW1vbi9jb3JlLmM6MjA4NjppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbm1tL2RhbW9uL2NvcmUuYy0yMDg3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjExMS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2N0eHM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6MjExMjpcdFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTEzLVx0XHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjE0PWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI2Mi0gKlxubW0vZGFtb24vY29yZS5jOjIyNjM6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMjY0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDAxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDEzLVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTQ6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy00MTUtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMjQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzM2LVxubW0vZGFtb24vcmVjbGFpbS5jOjMzNzpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzM4LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9zdGF0LmM9MjAwPXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zdGFydCh2b2lkKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yMTItXHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vc3RhdC5jOjIxMzpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9zdGF0LmMtMjE0LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjUxNT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNTM5LVx0fVxubW0vZGFtb24vc3lzZnMuYzoyNTQwOlx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XG5tbS9kYW1vbi9zeXNmcy5jLTI1NDEtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTExCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIEFjdGl2YXRpb24gYW5kIE1vbml0b3JpbmcgT3B0aW9ucyoqCgpPa2F5LCBzbyBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgIGlzIHRoZSBrZXkgdG8gYWN0dWFsbHkgZW5hYmxpbmcgREFNT04uIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAuIE5vdywgSSBzZWUgdGhhdCB3ZSBoYXZlIHRoZXNlIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9WQUREUmAgbWFjcm9zIHRoYXQgZGVmaW5lIGhvdyB0aGUgbW9uaXRvcmluZyBvcGVyYXRpb25zIGFyZSBjb25maWd1cmVkLiBJdCYjMzk7cyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHR5cGljYWxseSB1c2VkIGZvciBzcGVjaWZpYyB0aGluZ3MsIGJ1dCBJIHRoaW5rIGZvciBteSB0ZXN0aW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIERBTU9TIHF1b3RhIHN0dWZmIG9yIG15IG93biBjdXN0b20gc2NoZW1lcywgSSYjMzk7ZCBiZSBzZXR0aW5nIHRoZSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgdmlhIHN5c2ZzLCBlaXRoZXIgdGhyb3VnaCB0aGUgYHN0YXRlYCBmaWxlIG9yIHRoZSBgb3BzYCBmaWxlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBkYW1vbl9zeXNmc19zZXRfdGFyZ2V0c2AgZnVuY3Rpb24gb3IgdGhlIGBvcHNgIHNwZWNpZmljYWxseSB0byBjb25maXJtIHRoYXQgYmVoYXZpb3IgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfREFNT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3Q9NTE9VG8gdXNlIHRoaXMgZmVhdHVyZSwgeW91IHNob3VsZCBmaXJzdCBlbnN1cmUgeW91ciBzeXN0ZW0gaXMgcnVubmluZyBvbiBhIGtlcm5lbFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3Q6NTI6dGhhdCBpcyBidWlsdCB3aXRoIGBgQ09ORklHX0RBTU9OX0xSVV9TT1JUPXlgYC5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTUzLVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q9NDM9VG8gdXNlIHRoaXMgZmVhdHVyZSwgeW91IHNob3VsZCBmaXJzdCBlbnN1cmUgeW91ciBzeXN0ZW0gaXMgcnVubmluZyBvbiBhIGtlcm5lbFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdDo0NDp0aGF0IGlzIGJ1aWx0IHdpdGggYGBDT05GSUdfREFNT05fUkVDTEFJTT15YGAuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW0ucnN0LTQ1LVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0PTIwPVlvdSBzaG91bGQgZmlyc3QgZW5zdXJlIHlvdXIgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYSBrZXJuZWwgYnVpbHQgd2l0aFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGFydC5yc3Q6MjE6YGBDT05GSUdfREFNT05fKj15YGAuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXJ0LnJzdC0yMi1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXQucnN0PTMxPVRvIHVzZSB0aGlzIGZlYXR1cmUsIHlvdSBzaG91bGQgZmlyc3QgZW5zdXJlIHlvdXIgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYSBrZXJuZWxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdC5yc3Q6MzI6dGhhdCBpcyBidWlsdCB3aXRoIGBgQ09ORklHX0RBTU9OX1NUQVQ9eWBgLiAgVGhlIGZlYXR1cmUgY2FuIGJlIGVuYWJsZWQgYnlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdC5yc3Q6MzM6ZGVmYXVsdCBhdCBidWlsZCB0aW1lLCBieSBzZXR0aW5nIGBgQ09ORklHX0RBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUYGAgdHJ1ZS5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdC5yc3QtMzQtXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0LnJzdD00NT1TZXR0aW5nIGl0IGFzIGBgTmBgIGRpc2FibGVzIERBTU9OX1NUQVQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgYnlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdC5yc3Q6NDY6YGBDT05GSUdfREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRgYCBidWlsZCBjb25maWcgb3B0aW9uLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0LnJzdC00Ny1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdD0zNz1zeXNmcyBJbnRlcmZhY2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdC0zOS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0OjQwOkRBTU9OIHN5c2ZzIGludGVyZmFjZSBpcyBidWlsdCB3aGVuIGBgQ09ORklHX0RBTU9OX1NZU0ZTYGAgaXMgZGVmaW5lZC4gIEl0XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdC00MS1jcmVhdGVzIG11bHRpcGxlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyB1bmRlciBpdHMgc3lzZnMgZGlyZWN0b3J5LFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdD0zMz1EQU1PTl9MUlVfU09SVOS9v+eUqERBTU9O5a+75om+54Ot6aG177yI6IyD5Zu05YaF55qE6aG16Z2i6K6/6Zeu6aKR546H6auY5LqO55So5oi35oyH5a6a55qE6ZiI5YC877yJ5ZKM5Ya36aG1XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTQ2LeS9v+eUqOatpOeJueaAp++8jOS9oOmmluWFiOmcgOimgeehruiupOS9oOeahOezu+e7n+S4rei/kOihjOeahOWGheaguOWcqOe8luivkeaXtuWQr+eUqOS6hlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0OjQ3OmBgQ09ORklHX0RBTU9OX0xSVV9TT1JUPXlgYC5cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdC00OC1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdD0zNj1EQU1PTl9SRUNMQUlN5om+5Yiw5Zyo54m55a6a5pe26Ze05YaF5rKh5pyJ6KKr6K6/6Zeu55qE5YaF5a2Y5Yy65Z+f5bm25YiG6aG144CC5Li65LqG6YG/5YWN5a6D5Zyo5YiG6aG15pON5L2c5Lit5raI6ICX6L+H5aSaXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3QtNDItXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdDo0MzropoHkvb/nlKjov5nkuKrlip/og73vvIzkvaDpppblhYjopoHnoa7kv53kvaDnmoTns7vnu5/ov5DooYzlnKjkuIDkuKrku6UgYGBDT05GSUdfREFNT05fUkVDTEFJTT15YGAg5p6E5bu655qE5YaFXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdC00NC3moLjkuIrjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGFydC5yc3QtMjYtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGFydC5yc3Q6Mjc66aaW5YWI77yM5L2g6KaB56Gu5L+d5L2g5b2T5YmN57O757uf5Lit6LeR55qE5YaF5qC45p6E5bu65pe26YCJ5a6a5LqG6L+Z5Liq5Yqf6IO96YCJ6aG5IGBgQ09ORklHX0RBTU9OXyo9eWBgLlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI4LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdD0zNT1zeXNmc+aOpeWPo1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0LTM2LT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0OjM3OkRBTU9O55qEc3lzZnPmjqXlj6PmmK/lnKjlrprkuYkgYGBDT05GSUdfREFNT05fU1lTRlNgYCDml7blu7rnq4vnmoTjgILlroPlnKjlhbZzeXNmc+ebruW9leS4i+WIm+W7uuWkmlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0LTM4LeS4quebruW9leWSjOaWh+S7tu+8jCBgYFx1MDAzY3N5c2ZzXHUwMDNlL2tlcm5lbC9tbS9kYW1vbi9gYCDjgILkvaDlj6/ku6XpgJrov4flr7nor6Xnm67lvZXkuIvnmoTmlofku7bov5vooYzlhpnlhaXlkoxcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3Q9MzM9REFNT05fTFJVX1NPUlTkvb/nlKhEQU1PTuWwi+aJvueGsemgge+8iOevhOWcjeWFp+eahOmggemdouioquWVj+mgu+eOh+mrmOaWvOeUqOaItuaMh+WumueahOmWvuWAvO+8ieWSjOWGt+mggVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdC00Ni3kvb/nlKjmraTnibnmgKfvvIzkvaDpppblhYjpnIDopoHnorroqo3kvaDnmoTns7vntbHkuK3pgYvooYznmoTlhafmoLjlnKjnt6jora/mmYLllZPnlKjkuoZcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdDo0NzpgYENPTkZJR19EQU1PTl9MUlVfU09SVD15YGAuXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3QtNDgtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q9MzY9REFNT05fUkVDTEFJTeaJvuWIsOWcqOeJueWumuaZgumWk+WFp+aykuacieiiq+ioquWVj+eahOWFp+WtmOWNgOWfn+S4puWIhumggeOAgueIsuS6humBv+WFjeWug+WcqOWIhumggeaTjeS9nOS4rea2iOiAl+mBjuWkmlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW0ucnN0LTQyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q6NDM66KaB5L2/55So6YCZ5YCL5Yqf6IO977yM5L2g6aaW5YWI6KaB56K65L+d5L2g55qE57O757Wx6YGL6KGM5Zyo5LiA5YCL5LulIGBgQ09ORklHX0RBTU9OX1JFQ0xBSU09eWBgIOani+W7uueahOWFp1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3QtNDQt5qC45LiK44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI2LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0OjI3OummluWFiO+8jOS9oOimgeeiuuS/neS9oOeVtuWJjeezu+e1seS4rei3keeahOWFp+aguOani+W7uuaZgumBuOWumuS6humAmeWAi+WKn+iDvemBuOmghSBgYENPTkZJR19EQU1PTl8qPXlgYC5cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXJ0LnJzdC0yOC1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3Q9MzU9c3lzZnPmjqXlj6NcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdC0zNi09PT09PT09PT1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdDozNzpEQU1PTueahHN5c2Zz5o6l5Y+j5piv5Zyo5a6a576pIGBgQ09ORklHX0RBTU9OX1NZU0ZTYGAg5pmC5bu656uL55qE44CC5a6D5Zyo5YW2c3lzZnPnm67pjITkuIvlibXlu7rlpJpcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdC0zOC3lgIvnm67pjITlkozmlofku7bvvIwgYGBcdTAwM2NzeXNmc1x1MDAzZS9rZXJuZWwvbW0vZGFtb24vYGAg44CC5L2g5Y+v5Lul6YCa6YGO5bCN6Kmy55uu6YyE5LiL55qE5paH5Lu26YCy6KGM5a+r5YWl5ZKMXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTk5OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGFtb25fc3pfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTktXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA2MDojaWZkZWYgQ09ORklHX0RBTU9OXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA2MS1cbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTE1Mj1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTExNTYtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTE1NzojZW5kaWZcdC8qIENPTkZJR19EQU1PTiAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTExNTgtXG4tLVxubW0vTWFrZWZpbGU9MTM2PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgJiM0Mzs9IGRlYnVnX3BhZ2VfcmVmLm9cbm1tL01ha2VmaWxlOjEzNzpvYmotJChDT05GSUdfREFNT04pICYjNDM7PSBkYW1vbi9cbm1tL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vXG4tLVxubW0vZGFtb24vTWFrZWZpbGU9Mz1vYmoteVx0XHRcdFx0Oj0gY29yZS5vXG5tbS9kYW1vbi9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xubW0vZGFtb24vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbm1tL2RhbW9uL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG5tbS9kYW1vbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG5tbS9kYW1vbi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbm1tL2RhbW9uL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQ5PXVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzItXG5tbS9kYW1vbi9jb3JlLmM6MzczOiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9jb3JlLmMtMzc0LXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00MjM9c3RhdGljIGlubGluZSB2b2lkIGRhbW9uX2luc2VydF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDMwLVxubW0vZGFtb24vY29yZS5jOjQzMTojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jLTQzMi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yOTQ2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4tLVxubW0vZGFtb24vY29yZS5jLTI5OTEtXG5tbS9kYW1vbi9jb3JlLmM6Mjk5MjojaWZkZWYgQ09ORklHX0RBTU9OX1BBRERSXG5tbS9kYW1vbi9jb3JlLmMtMjk5My0vKlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDA0LSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgZGFtb25fZ2V0X2ZvbGlvKCkgZnJvbSBvcHMtY29tbW9uLmMsIHdoaWNoIGlzXG5tbS9kYW1vbi9jb3JlLmM6MzAwNTogKiBvbmx5IGF2YWlsYWJsZSB3aGVuIENPTkZJR19EQU1PTl9QQUREUiBpcyBlbmFibGVkLiBJdCBhbHNvIHJlcXVpcmVzIHRoZVxubW0vZGFtb24vY29yZS5jLTMwMDYtICogY29udGV4dCB0byBiZSB1c2luZyBQQUREUiBvcGVyYXRpb25zIGZvciBtZWFuaW5nZnVsIHJlc3VsdHMuXG4tLVxubW0vZGFtb24vY29yZS5jPTMwNzI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwOTEtfVxubW0vZGFtb24vY29yZS5jOjMwOTI6I2Vsc2UgLyogQ09ORklHX0RBTU9OX1BBRERSICovXG5tbS9kYW1vbi9jb3JlLmMtMzA5My1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA5Ny19XG5tbS9kYW1vbi9jb3JlLmM6MzA5ODojZW5kaWYgLyogQ09ORklHX0RBTU9OX1BBRERSICovXG5tbS9kYW1vbi9jb3JlLmMtMzA5OS0jZWxzZSAvKiBDT05GSUdfTlVNQSAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzc3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDI0LVxubW0vZGFtb24vY29yZS5jOjM0MjU6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL2NvcmUuYy0zNDI2LXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzUzMz1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzU1OS1cbm1tL2RhbW9uL2NvcmUuYzozNTYwOiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9jb3JlLmMtMzU2MS1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfc3BsaXRfcmVnaW9uX2F0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jPTM3Nzc9c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2Vjcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc4NC1cbm1tL2RhbW9uL2NvcmUuYzozNzg1OiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9jb3JlLmMtMzc4Ni1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vc3RhdC5jPTMwPXN0YXRpYyBib29sIGVuYWJsZWQgX19yZWFkX21vc3RseSA9IElTX0VOQUJMRUQoXG5tbS9kYW1vbi9zdGF0LmM6MzE6XHRDT05GSUdfREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFQpO1xubW0vZGFtb24vc3RhdC5jLTMyLW1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcdTAwMjZlbmFibGVkX3BhcmFtX29wcywgTlVMTCwgMDYwMCk7XG4tLVxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnPTI9Q09ORklHX0tVTklUPXlcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzozOkNPTkZJR19EQU1PTj15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6NDpDT05GSUdfREFNT05fS1VOSVRfVEVTVD15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWctNS1cbi0tXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc9OD1DT05GSUdfUEFHRV9JRExFX0ZMQUc9eVxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnOjk6Q09ORklHX0RBTU9OX1ZBRERSPXlcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxMDpDT05GSUdfREFNT05fVkFERFJfS1VOSVRfVEVTVD15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWctMTEtXG4tLVxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnPTEzPUNPTkZJR19TWVNGUz15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6MTQ6Q09ORklHX0RBTU9OX1NZU0ZTPXlcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxNTpDT05GSUdfREFNT05fU1lTRlNfS1VOSVRfVEVTVD15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWctMTYtXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWctMTctIyBlbmFibGUgREFNT05fREVCVUdfU0FOSVRZIHRvIGNhdGNoIGFueSBidWdcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxODpDT05GSUdfREFNT05fREVCVUdfU0FOSVRZPXlcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2OiNpZmRlZiBDT05GSUdfREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTctXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTQxOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MjYtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NDI3Olx0LyogREFNT05fT1BTX1ZBRERSIGlzIHJlZ2lzdGVyZWQgb25seSBpZiBDT05GSUdfREFNT05fVkFERFIgaXMgc2V0ICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDI4LVx0aWYgKCFkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhEQU1PTl9PUFNfVkFERFIpKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE5ODM9a3VuaXRfdGVzdF9zdWl0ZShkYW1vbl90ZXN0X3N1aXRlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTk4Ni1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxOTg3OiNlbmRpZlx0LyogQ09ORklHX0RBTU9OX0tVTklUX1RFU1QgKi9cbi0tXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTUtXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oOjY6I2lmZGVmIENPTkZJR19EQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTctXG4tLVxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaD0xMDY9a3VuaXRfdGVzdF9zdWl0ZShkYW1vbl9zeXNmc190ZXN0X3N1aXRlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTEwOS1cbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg6MTEwOiNlbmRpZiAvKiBDT05GSUdfREFNT05fU1lTRlNfS1VOSVRfVEVTVCAqL1xuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtNS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NjojaWZkZWYgQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtNy1cbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTI4Mj1rdW5pdF90ZXN0X3N1aXRlKGRhbW9uX3Rlc3Rfc3VpdGUpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMjg1LVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoyODY6I2VuZGlmXHQvKiBDT05GSUdfREFNT05fVkFERFJfS1VOSVRfVEVTVCAqL1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMTktXG5tbS9kYW1vbi92YWRkci5jOjIwOiNpZmRlZiBDT05GSUdfREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vdmFkZHIuYy0yMS0jdW5kZWYgREFNT05fTUlOX1JFR0lPTl9TWlxuLS1cbnRvb2xzL3Rlc3Rpbmcva3VuaXQvY29uZmlncy9hbGxfdGVzdHMuY29uZmlnPTM5PUNPTkZJR19JV0xXSUZJPXlcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvY29uZmlncy9hbGxfdGVzdHMuY29uZmlnLTQwLVxudG9vbHMvdGVzdGluZy9rdW5pdC9jb25maWdzL2FsbF90ZXN0cy5jb25maWc6NDE6Q09ORklHX0RBTU9OPXlcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvY29uZmlncy9hbGxfdGVzdHMuY29uZmlnOjQyOkNPTkZJR19EQU1PTl9WQUREUj15XG50b29scy90ZXN0aW5nL2t1bml0L2NvbmZpZ3MvYWxsX3Rlc3RzLmNvbmZpZzo0MzpDT05GSUdfREFNT05fUEFERFI9eVxudG9vbHMvdGVzdGluZy9rdW5pdC9jb25maWdzL2FsbF90ZXN0cy5jb25maWctNDQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vY29uZmlnOjE6Q09ORklHX0RBTU9OPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzoyOkNPTkZJR19EQU1PTl9TWVNGUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9jb25maWc6MzpDT05GSUdfREFNT05fUEFERFI9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vY29uZmlnOjQ6Q09ORklHX0RBTU9OX1ZBRERSPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzo1OkNPTkZJR19EQU1PTl9SRUNMQUlNPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzo2OkNPTkZJR19EQU1PTl9MUlVfU09SVD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9jb25maWc6NzpDT05GSUdfREFNT05fREVCVUdfU0FOSVRZPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1MjYKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogNDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVmVyZGljdDogREFNT04gUXVvdGEgR29hbCBFdmFsdWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIHdlIG5lZWQgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBQU0lgIGNvbmZpZ3VyZWQuIFRob3NlIGFyZSBzdHJhaWdodGZvcndhcmQuCgpOZXh0LCB0aGUgZm9jdXMgc3ltYm9scy4gV2UgaGF2ZSBhIGxpc3Q6IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCwgYGRhbW9zX3F1b3RhX3Njb3JlYCwgYGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWxgLCBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAsIGFuZCBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gVGhlc2UgbG9vayBjb3JyZWN0IGdpdmVuIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UuCgpSaWdodCwgdGhlIGRpZmYgY29uZmlybXMgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBtb2RpZmllZC4gTG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIHdlIHNlZSB0aG9zZSBmdW5jdGlvbnMgYXJlIHRvdWNoZWQuIE5vdGhpbmcgZWxzZSBqdW1wcyBvdXQgdGhhdCYjMzk7cyBkaXJlY3RseSByZWxldmFudCB0byBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgZW5zdXJlIHdlJiMzOTtyZSBjbGVhciBvbiB0aGUgaW5zdHJ1Y3Rpb25zLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYHRydWVgIGJlY2F1c2UgdGhlIGNoYW5nZSBtb2RpZmllcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCB0aGUgZWRpdCB0byBgbW0vZGFtb24vY29yZS5jYCBtYWtlcyB0aGlzIGEgZGVmaW5pdGUgeWVzLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgYXMgZXhwZWN0ZWQ6IHRob3NlIHNhbWUgZnVuY3Rpb25zIHdlIGlkZW50aWZpZWQgYmVmb3JlLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbHJlYWR5IGNvbmZpcm1lZC4KCkZpbmFsbHksIHRoZSByZWFzb25pbmcuIFdlIG5lZWQgYSBjb25jaXNlIGV4cGxhbmF0aW9uLiBCYXNlZCBvbiB0aGUgY29kZSBpbnNwZWN0aW9uLCB0aGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgcXVvdGEgZ29hbCBldmFsdWF0aW9uIGxvZ2ljLiBUaGlzIGlzIGZvciBEQU1PUyBQU0kgZ29hbHMgKnNwZWNpZmljYWxseSogYW5kIGludm9sdmVzIHRoZSB0ZW1wb3JhbCB0dW5lci4gQW5kLCBjcnVjaWFsbHksIGl0JiMzOTtzIGFsbCBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgZGFlbW9uIHNjaGVtZXMuCgpZZXAsIGl0JiMzOTtzIGFsbCBjb25zaXN0ZW50OiB0aGUgY29kZSBjaGFuZ2VzLCB0aGUgY29uZmlndXJhdGlvbnMsIHRoZSBmb2N1cyBzeW1ib2xzLCBhbmQgdGhlIHJlYXNvbmluZy4gV2UmIzM5O3JlIHJlYWR5IHRvIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUmIzM0OywKICAgICYjMzQ7ZGFtb3NfcXVvdGFfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbCYjMzQ7LAogICAgJiMzNDtkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTi9EQU1PUyBxdW90YSBnb2FsIGV2YWx1YXRpb24gaW4gbW0vZGFtb24vY29yZS5jLCBlbnN1cmluZyB0aGF0IHVubWVhc3VyZWQgUFNJIGdvYWxzIHVuZGVyIGEgdGVtcG9yYWwgZ29hbCB0dW5lciBkbyBub3QgcHJlbWF0dXJlbHkgemVybyB0aGUgZWZmZWN0aXZlIHF1b3RhIGR1cmluZyBpbml0aWFsIHR1bmluZyByb3VuZHMuIFRoaXMgYWx0ZXJzIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBleGVjdXRpb24gYW5kIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUmIzM0OywKICAgICYjMzQ7ZGFtb3NfcXVvdGFfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbCYjMzQ7LAogICAgJiMzNDtkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTi9EQU1PUyBxdW90YSBnb2FsIGV2YWx1YXRpb24gaW4gbW0vZGFtb24vY29yZS5jLCBlbnN1cmluZyB0aGF0IHVubWVhc3VyZWQgUFNJIGdvYWxzIHVuZGVyIGEgdGVtcG9yYWwgZ29hbCB0dW5lciBkbyBub3QgcHJlbWF0dXJlbHkgemVybyB0aGUgZWZmZWN0aXZlIHF1b3RhIGR1cmluZyBpbml0aWFsIHR1bmluZyByb3VuZHMuIFRoaXMgYWx0ZXJzIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBleGVjdXRpb24gYW5kIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiYjMzk7cyBxdW90YSBnb2FsIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBtZXRyaWNzIGFuZCBhZGRzIGEgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0LiBTcGVjaWZpY2FsbHksIHdoZW4gYGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWGAgKGEgZG9tYWluLWxldmVsIHNlbnRpbmVsIHZhbHVlIGluZGljYXRpbmcgdGhhdCBubyBQU0kgc2FtcGxlIGhhcyB5ZXQgYmVlbiByZWNvcmRlZCksIGl0IHNldHMgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IDBgIGluc3RlYWQgb2YgYGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlYCBpZiB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLlxuXG5EZXNwaXRlIHRoZSBjb2RlIGNvbW1lbnQgcmVmZXJyaW5nIHRvIFwmIzM0O3VuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWxcJiMzNDssIHRoaXMgaXMgcHVyZWx5IGEgc2VtYW50aWMgc2VudGluZWwgdmFsdWU6IGBsYXN0X3BzaV90b3RhbGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVTY0X01BWGAgdXBvbiBhbGxvY2F0aW9uIG9yIGNvbW1pdCAoYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGFjY2Vzc2VkIG9yIGV4cG9zZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1NDI1NTQ1YmRiOGMzYmM0NGViY2ViNmNhMDU0MjYzOTA2NjRlMzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwNzowMToyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAwNmNmMmFiN2U5N2Q3Li5lNmQ4N2ZkMzk5MmVlIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMTYxLDEyICYjNDM7MzE2MSwxOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsCiAJCWJyZWFrOwogCWNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOgogCQlub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpOwotCQkvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovCi0JCWlmIChnb2FsLSZndDtsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKQotCQkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IGdvYWwtJmd0O3RhcmdldF92YWx1ZTsKLQkJZWxzZQomIzQzOwkJaWYgKGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpIHsKJiM0MzsJCQkvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovCiYjNDM7CQkJaWYgKHMtJmd0O3F1b3RhLmdvYWxfdHVuZXIgPT0KJiM0MzsJCQkJCURBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpCiYjNDM7CQkJCS8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovCiYjNDM7CQkJCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSAwOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IGdvYWwtJmd0O3RhcmdldF92YWx1ZTsKJiM0MzsJCX0gZWxzZSB7CiAJCQlnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtCiAJCQkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWw7CiYjNDM7CQl9CiAJCWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDsKIAkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCmluZGV4IGMwMWU2YTc1Y2FkYzEuLjJiOWIyNGNlN2RhZDMgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKQEAgLTg4OSw2ICYjNDM7ODg5LDc0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJfSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVubWVhc3VyZWQgUFNJIGdvYWxzIG11c3Qgbm90IGRpc2FibGUgdGhlIHRlbXBvcmFsIHF1b3RhLgomIzQzOyAqIEtlZXAgc3ogKiAxMDAwMCB3aXRoaW4gYSAzMi1iaXQgdW5zaWduZWQgbG9uZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CXN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge307CiYjNDM7CXN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHsKJiM0MzsJCS5zeiA9IFNaXzY0SywKJiM0MzsJCS5nb2FsX3R1bmVyID0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzID0ge307CiYjNDM7CXN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHNyYyA9IHsKJiM0MzsJCS5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsCiYjNDM7CQkudGFyZ2V0X3ZhbHVlID0gVUxPTkdfTUFYLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDsKJiM0MzsJc3RydWN0IGRhbW9zICpzOwomIzQzOwomIzQzOwlpZiAoIWMpCiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7Y3R4IGFsbG9jIGZhaWwmIzM0Oyk7CiYjNDM7CXMgPSBkYW1vbl9uZXdfc2NoZW1lKCZhbXA7cGF0dGVybiwgREFNT1NfU1RBVCwgMCwgJmFtcDtxdW90YSwgJmFtcDt3bWFya3MsCiYjNDM7CQkJTlVNQV9OT19OT0RFKTsKJiM0MzsJaWYgKCFzKSB7CiYjNDM7CQlkYW1vbl9kZXN0cm95X2N0eChjKTsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtzY2hlbWUgYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJfQomIzQzOwlkYW1vbl9hZGRfc2NoZW1lKGMsIHMpOwomIzQzOwlnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLCBVTE9OR19NQVgpOwomIzQzOwlpZiAoIWdvYWwpIHsKJiM0MzsJCWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwomIzQzOwkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O2dvYWwgYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJfQomIzQzOwlkYW1vc19hZGRfcXVvdGFfZ29hbCgmYW1wO3MtJmd0O3F1b3RhLCBnb2FsKTsKJiM0MzsKJiM0MzsJLyogZnJlc2ggZ29hbCwgZmlyc3QgdHVuaW5nIHJvdW5kICovCiYjNDM7CWRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLSZndDtxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7CiYjNDM7CiYjNDM7CS8qIHNlY29uZCByb3VuZDogbGFzdF9wc2lfdG90YWwgaXMgaW5pdGlhbGlzZWQgbm93ICovCiYjNDM7CWRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLSZndDtxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7CiYjNDM7CiYjNDM7CS8qIGNvbW1pdCBhIFBTSSBnb2FsIG9udG8gdGhlIGluaXRpYWxpc2VkIFBTSSBnb2FsICovCiYjNDM7CWRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGdvYWwsICZhbXA7c3JjKTsKJiM0MzsJZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtJmd0O3F1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTsKJiM0MzsKJiM0MzsJLyogYSBtZWFzdXJlZCByb3VuZCB0aGF0IHJlYWNoZXMgdGhlIHRhcmdldCBkaXNhYmxlcyB0aGUgcXVvdGEgKi8KJiM0MzsJZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlID0gMTA7CiYjNDM7CWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpIC0gMTA7CiYjNDM7CS8qIFU2NF9NQVggbWFya3MgYW4gdW5tZWFzdXJlZCBnb2FsLCBrZWVwIHRoZSBzYW1wbGUgYXdheSBmcm9tIGl0ICovCiYjNDM7CWlmIChnb2FsLSZndDtsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKQomIzQzOwkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwtLTsKJiM0MzsJZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtJmd0O3F1b3RhLmVzeiwgMHVsKTsKJiM0MzsKJiM0MzsJLyogdGhlIGNvbnNpc3QgdHVuZXIga2VlcHMgaXRzIHF1b3RhIG92ZXIgYW4gdW5tZWFzdXJlZCByb3VuZCAqLwomIzQzOwlzLSZndDtxdW90YS5nb2FsX3R1bmVyID0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOwomIzQzOwlzLSZndDtxdW90YS5lc3pfYnAgPSBTWl8zMksgKiAxMDAwMDsKJiM0MzsJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgJmFtcDtzcmMpOwomIzQzOwlkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy0mZ3Q7cXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl8zMkspOwomIzQzOwomIzQzOwlkYW1vbl9kZXN0cm95X2N0eChjKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWxzLCBpbnQgbnJfZHN0X2dvYWxzLAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjX2dvYWxzLCBpbnQgbnJfc3JjX2dvYWxzKQpAQCAtMTg4Nyw2ICYjNDM7MTk1NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7CiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLAogCUtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbCksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyksCiYjNDM7CUtVTklUX0NBU0UoZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaSksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YSksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9kZXN0cyksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXIpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gUXVvdGEgR29hbCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGEgcmVsYXRlZCBLVW5pdCBoZWFkZXIsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgZGlmZiBpcyBmb2N1c2VkIG9uIGhvdyB3ZSBjYWxjdWxhdGUgdGhlIGBjdXJyZW50X3ZhbHVlYCBmb3IgYSBxdW90YSBnb2FsLCBzcGVjaWZpY2FsbHkgd2hlbiB1c2luZyBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYC4KClRoZSBrZXkgc2VjdGlvbiBpcyB0aGUgYGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOmAgYmxvY2suIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHN1YnRyYWN0aW5nIHRoZSBwcmV2aW91cyBQU0kgdG90YWwgZnJvbSB0aGUgY3VycmVudCBQU0kgdG90YWwgdG8gZGVyaXZlIHRoZSAmIzM0O3VzYWdlJiMzNDsgb3ZlciB0aGUgbGFzdCBpdGVyYXRpb24uIFRoZXJlJiMzOTtzIGEgY2hlY2s6IGBpZiAoZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClgLiBUaGUgY29tbWVudCBzYXlzICYjMzQ7dW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCYjMzQ7LiBUaGlzIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0LiBJcyBgVTY0X01BWGAgKmFjdHVhbGx5KiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgaXMgaXQgYmVpbmcgdXNlZCBhcyBhIHNlbnRpbmVsIHZhbHVlIGhlcmU/IEEgZmxhZyB0byBkZW5vdGUgJiMzNDtubyBwcmV2aW91cyBtZWFzdXJlbWVudCBhdmFpbGFibGUmIzM0Oz8gVGhlIGNvZGUmIzM5O3MgY29tbWVudCBtZW50aW9ucyBpdCYjMzk7cyAmIzM0O3VuaW5pdGlhbGl6ZWQsJiMzNDsgaW1wbHlpbmcgdGhlIGZvcm1lciwgaG93ZXZlciwgdGhlIGltcGxlbWVudGF0aW9uIGlzIGludGVyZXN0aW5nLiBUaGUgYWRkaXRpb24gb2YgdGVtcG9yYWwgcXVvdGEgbWF5IGhhdmUgZGlmZmVyZW50IHJhbWlmaWNhdGlvbnMuCgpUaGUgYGlmYCBjb25kaXRpb24gdGhlbiBicmFuY2hlcy4gSWYgYGxhc3RfcHNpX3RvdGFsYCBpcyBgVTY0X01BWGAsIGl0IHNldHMgYGN1cnJlbnRfdmFsdWVgIHRvIGBnb2FsLSZndDt0YXJnZXRfdmFsdWVgIG9yIDAgZm9yIHRoZSB0ZW1wb3JhbCBxdW90YS4gT3RoZXJ3aXNlLCBpdCBjYWxjdWxhdGVzIGBjdXJyZW50X3ZhbHVlYCBhcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGN1cnJlbnQgYW5kIGxhc3QgUFNJIHRvdGFsLCBhbmQgdXBkYXRlcyBgbGFzdF9wc2lfdG90YWxgLgoKVG8gYmUgc3VyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBnb2FsLSZndDtsYXN0X3BzaV90b3RhbGAgaXMgKmluaXRpYWxpemVkKi4gSSBuZWVkIHRvIGxvb2sgYXQgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBgbGFzdF9wc2lfdG90YWxgIGlzIHNldCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IGBVNjRfTUFYYCBpcyBiZWluZyB1c2VkIGFzIGEgc2VudGluZWwgZm9yIGluaXRpYWxpemF0aW9uLCB0byBpbmRpY2F0ZSB0aGF0IG5vIHByZXZpb3VzIFBTSSBtZWFzdXJlbWVudCBpcyBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xhc3RfcHNpX3RvdGFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz02ODg9c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy02OTktXHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbm1tL2RhbW9uL2NvcmUuYzo3MDA6XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xubW0vZGFtb24vY29yZS5jLTcwMS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmdvYWwtXHUwMDNlbGlzdCk7XG4tLVxubW0vZGFtb24vY29yZS5jPTExOTE9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXG4tLVxubW0vZGFtb24vY29yZS5jLTExOTUtXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbm1tL2RhbW9uL2NvcmUuYzoxMTk2Olx0XHRkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xubW0vZGFtb24vY29yZS5jLTExOTctXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTUzPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE2My1cdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbm1tL2RhbW9uL2NvcmUuYzozMTY0Olx0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzE2NTpcdFx0XHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXG5tbS9kYW1vbi9jb3JlLmMtMzE2Ni1cdFx0XHRpZiAocy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyID09XG4tLVxubW0vZGFtb24vY29yZS5jLTMxNzMtXHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtXG5tbS9kYW1vbi9jb3JlLmM6MzE3NDpcdFx0XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG5tbS9kYW1vbi9jb3JlLmMtMzE3NS1cdFx0fVxubW0vZGFtb24vY29yZS5jOjMxNzY6XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsO1xubW0vZGFtb24vY29yZS5jLTMxNzctXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTUtXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MTY6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIFU2NF9NQVgpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxNy1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzMj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM3LVx0XHQuY3VycmVudF92YWx1ZSA9IDEyMyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Mzg6XHRcdC5sYXN0X3BzaV90b3RhbCA9IDQ1Nixcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzktXHR9O1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDUtXHRcdFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODQ2Olx0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDU2Nyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDctXHRcdFx0fSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4Ny1cdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4ODg6XHRcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4OS1cdFx0XHR9KTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODk2PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MzEtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTMyOlx0Lyogc2Vjb25kIHJvdW5kOiBsYXN0X3BzaV90b3RhbCBpcyBpbml0aWFsaXNlZCBub3cgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MzMtXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDItXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IDEwO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk0MzpcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCkgLSAxMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDQtXHQvKiBVNjRfTUFYIG1hcmtzIGFuIHVubWVhc3VyZWQgZ29hbCwga2VlcCB0aGUgc2FtcGxlIGF3YXkgZnJvbSBpdCAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk0NTpcdGlmIChnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTQ2Olx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsLS07XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQ3LVx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGNvcmUuY2AgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiwgc28gbGV0JiMzOTtzIGp1bXAgcmlnaHQgaW50byB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzE2MC4gSSBmaWd1cmUgdGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIHdoZXJlIHRoZSBpc3N1ZSBpcyBvY2N1cnJpbmcsIG9yIGF0IGxlYXN0LCB0aGUgY3JpdGljYWwgbG9naWMgSSBuZWVkIHRvIHJldmlldyB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuIEkgbmVlZCB0byBkaXNzZWN0IHRoaXMgc2VjdGlvbiBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcsIGhvdyBpdCYjMzk7cyBiZWhhdmluZywgYW5kIGhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTQ1Olx0XHRcdHJldHVybiAxMDAwMDtcbjMxNDY6XHRcbjMxNDc6XHRcdHRocCA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfQU5PTl9USFBTKSAmIzQzO1xuMzE0ODpcdFx0XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9TSE1FTV9USFBTKSAmIzQzO1xuMzE0OTpcdFx0XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9GSUxFX1RIUFMpO1xuMzE1MDpcdFx0cmV0dXJuIG11bHRfZnJhYyh0aHAsIDEwMDAwLCB0b3RhbF9wYWdlcyAtIGZyZWVfcGFnZXMpO1xuMzE1MTpcdH1cbjMxNTI6XHRcbjMxNTM6XHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4zMTU0Olx0XHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4zMTU1Olx0e1xuMzE1NjpcdFx0dTY0IG5vd19wc2lfdG90YWw7XG4zMTU3Olx0XG4zMTU4Olx0XHRzd2l0Y2ggKGdvYWwtXHUwMDNlbWV0cmljKSB7XG4zMTU5Olx0XHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XG4zMTYwOlx0XHRcdC8qIFVzZXIgc2hvdWxkIGFscmVhZHkgc2V0IGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSAqL1xuMzE2MTpcdFx0XHRicmVhaztcbjMxNjI6XHRcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxuMzE2MzpcdFx0XHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuMzE2NDpcdFx0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XG4zMTY1Olx0XHRcdFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xuMzE2NjpcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPT1cbjMxNjc6XHRcdFx0XHRcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbjMxNjg6XHRcdFx0XHRcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXG4zMTY5Olx0XHRcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xuMzE3MDpcdFx0XHRcdGVsc2VcbjMxNzE6XHRcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuMzE3MjpcdFx0XHR9IGVsc2Uge1xuMzE3MzpcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxuMzE3NDpcdFx0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbjMxNzU6XHRcdFx0fVxuMzE3NjpcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcbjMxNzc6XHRcdFx0YnJlYWs7XG4zMTc4Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4zMTc5Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4zMTgwOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbV9icChnb2FsKTtcbjMxODE6XHRcdFx0YnJlYWs7XG4zMTgyOlx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbjMxODM6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxuMzE4NDpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xuMzE4NTpcdFx0XHRicmVhaztcbjMxODY6XHRcdGNhc2UgREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUDpcbjMxODc6XHRcdGNhc2UgREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxuMzE4ODpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcbjMxODk6XHRcdFx0XHRcdGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xuMzE5MDpcdFx0XHRicmVhaztcbjMxOTE6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XG4zMTkyOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLFxuMzE5MzpcdFx0XHRcdFx0Z29hbC1cdTAwM2VuaWQpO1xuMzE5NDpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAwOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFF1b3RhIEdvYWwgQWRqdXN0bWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCwgSSBzZWUgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgIGlzIGBVNjRfTUFYYC4gRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgd2UgaGF2ZW4mIzM5O3QgcmVjb3JkZWQgYSBwcmV2aW91cyBQU0kgbWVhc3VyZW1lbnQgZm9yIHRoaXMgZ29hbCwgYSBzZW50aW5lbCB2YWx1ZSBkZW5vdGluZyB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byByZW1lbWJlciB0aGF0IHRoaXMgKmlzbiYjMzk7dCogdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZGVmaW5lZCBzdGF0ZS4KClByZXZpb3VzbHksIHdoZW4gZW5jb3VudGVyaW5nIHRoaXMgJiMzNDt1bmluaXRpYWxpemVkJiMzNDsgc3RhdGUsIHdlIHNpbXBseSBzZXQgYGdvYWwtJmd0O2N1cnJlbnRfdmFsdWVgIHRvIGBnb2FsLSZndDt0YXJnZXRfdmFsdWVgLiBOb3csIHdlIGhhdmUgYSBjb25kaXRpb25hbDoKCmBgYGMKaWYgKHMtJmd0O3F1b3RhLmdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCkKICAgIGdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSAwOwplbHNlCiAgICBnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlOwpgYGAKClNvLCB0aGUga2V5IGRpZmZlcmVuY2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIHRlbXBvcmFsIHR1bmVyLiBJZiBgcy0mZ3Q7cXVvdGEuZ29hbF90dW5lcmAgaXMgc2V0IHRvIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYCwgd2UgaW5pdGlhbGl6ZSBgZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgdG8gMC4gT3RoZXJ3aXNlLCB3ZSBrZWVwIHRoZSBwcmV2aW91cyBiZWhhdmlvciBvZiBzZXR0aW5nIGl0IHRvIHRoZSB0YXJnZXQuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvciBhZGp1c3RtZW50IHN0cmF0ZWd5IGJhc2VkIG9uIHRoZSB0eXBlIG9mIHR1bmVyIGluIHVzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0ZW1wb3JhbCB0dW5pbmcgZW50YWlscy4gSXMgaXQgc3RhcnRpbmcgZnJlc2gsIG9yIGludHJvZHVjaW5nIGEgYmlhcz8KClNpbmNlIGBnb2FsYCBpcyBhbGxvY2F0ZWQgdmlhIGBkYW1vc19uZXdfcXVvdGFfZ29hbCgpYCwgcHJvYmFibHkgdXNpbmcgYGttYWxsb2MoKWAsIEkgd2FudCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBkYW1vc19uZXdfcXVvdGFfZ29hbCgpYCB0byBzZWUgaG93IGl0JiMzOTtzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoaXMgY29udGV4dCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYGdvYWxgIGlzIGJlaW5nIG1hbmFnZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgbHVya2luZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjg1Olx0XHRkYW1vc19mcmVlX2ZpbHRlcihmKTtcbiA2ODY6XHR9XG4gNjg3Olx0XG4gNjg4Olx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuIDY4OTpcdFx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbiA2OTA6XHRcdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXG4gNjkxOlx0e1xuIDY5MjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4gNjkzOlx0XG4gNjk0Olx0XHRnb2FsID0ga21hbGxvY19vYmooKmdvYWwpO1xuIDY5NTpcdFx0aWYgKCFnb2FsKVxuIDY5NjpcdFx0XHRyZXR1cm4gTlVMTDtcbiA2OTc6XHRcdGdvYWwtXHUwMDNlbWV0cmljID0gbWV0cmljO1xuIDY5ODpcdFx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7XG4gNjk5Olx0XHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbiA3MDA6XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XG4gNzAxOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZnb2FsLVx1MDAzZWxpc3QpO1xuIDcwMjpcdFx0cmV0dXJuIGdvYWw7XG4gNzAzOlx0fVxuIDcwNDpcdFxuIDcwNTpcdHZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbiA3MDY6XHR7XG4gNzA3Olx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmctXHUwMDNlbGlzdCwgXHUwMDI2cS1cdTAwM2Vnb2Fscyk7XG4gNzA4Olx0fVxuIDcwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZGFtb3NfcXVvdGFfZ29hbGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0IGZpZWxkcyBpdCYjMzk7cyBwYWNraW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUuIFdoYXQgZG9lcyBpdCBjb250YWluLCBhbmQgaG93IGlzIGl0IG9yZ2FuaXplZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIHNpemUsIHRpbWVzdGFtcHMsIHVzYWdlIGluZGljYXRvcnMsIG9yIG1heWJlIHNvbWUgZmxhZ3M/IEJhc2VkIG9uIGl0cyBuYW1lIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiB0YXJnZXQgcXVvdGEsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBEQU1PUyBjb250ZXh0OyBzbyBJIGltYWdpbmUgSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGF0IHJlc291cmNlIHVzYWdlIHRhcmdldHMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgZGF0YSB0eXBlcywgdGhlaXIgbGF5b3V0LCBhbmQgYW55IHBvdGVudGlhbCBhbGlnbm1lbnQgY29uY2VybnMuIEtub3dpbmcgdGhlIGZpZWxkcyYjMzk7IHNlbWFudGljcyB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVuZGVkIHVzZSBhbmQgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBEQU1PUyBzdWJzeXN0ZW1zLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTE2MT1lbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk3LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE5ODpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk5LVx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBIZWFkZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIERhdGEgQWNjZXNzIE1PTml0b3IgKERBTU9OKSBmcmFtZXdvcmsgd29ya3MsIGFuZCBJIHRoaW5rIHN0YXJ0aW5nIHdpdGggdGhlIGNvcmUgaGVhZGVyIGZpbGUgaXMgdGhlIHJpZ2h0IG1vdmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIG92ZXIgdG8gYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGFuZCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIG5laWdoYm9yaG9vZCBhcm91bmQgbGluZSAxOTguIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbW9zdCBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhIG1vZHVsZSBiZWdpbiB0byBzdXJmYWNlLiBJJiMzOTttIGhvcGluZyB0byBmaW5kIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgb2YgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgYW5kIGhvdyBpdCB0cmFja3MgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucy4gVGhpcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBwb2ludHMgb2YgaXRzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk1Olx0ICogSWYgQG1ldHJpYyBpcyBEQU1PU19RVU9UQV9OT0RFX01FTUNHX3tVU0VELEZSRUV9X0JQLCBAbmlkIGFuZCBAbWVtY2dfaWRcbiAxOTY6XHQgKiByZXByZXNlbnRzIHRoZSBub2RlIGlkIGFuZCB0aGUgY2dyb3VwIHRvIGFjY291bnQgdGhlIHVzZWQgbWVtb3J5IGZvci5cbiAxOTc6XHQgKi9cbiAxOTg6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XG4gMTk5Olx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbiAyMDA6XHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlO1xuIDIwMTpcdFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xuIDIwMjpcdFx0LyogbWV0cmljLWRlcGVuZGVudCBmaWVsZHMgKi9cbiAyMDM6XHRcdHVuaW9uIHtcbiAyMDQ6XHRcdFx0c3RydWN0IHtcbiAyMDU6XHRcdFx0XHRpbnQgbmlkO1xuIDIwNjpcdFx0XHRcdHU2NCBtZW1jZ19pZDtcbiAyMDc6XHRcdFx0fTtcbiAyMDg6XHQvKiBwcml2YXRlOiAqL1xuIDIwOTpcdFx0XHQvKiBMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSSAqL1xuIDIxMDpcdFx0XHR1NjQgbGFzdF9wc2lfdG90YWw7XG4gMjExOlx0XG4gMjEyOlx0XHR9O1xuIDIxMzpcdC8qIHByaXZhdGU6ICovXG4gMjE0Olx0XHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIDIxNTpcdFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIDIxNjpcdH07XG4gMjE3Olx0XG4gMjE4Olx0LyoqXG4gMjE5Olx0ICogZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIC0gR29hbC1iYXNlZCBxdW90YSB0dW5pbmcgbG9naWMuXG4gMjIwOlx0ICogQERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVDpcdEFpbSBsb25nIHRlcm0gY29uc2lzdGVudCBxdW90YS5cbiAyMjE6XHQgKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTDpcdEFpbSB6ZXJvIHF1b3RhIGFzYXAuXG4gMjIyOlx0ICovXG4gMjIzOlx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbiAyMjQ6XHRcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVCxcbiAyMjU6XHRcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXG4gMjI2Olx0fTtcbiAyMjc6XHRcbiAyMjg6XHQvKipcbiAyMjk6XHQgKiBzdHJ1Y3QgZGFtb3NfcXVvdGEgLSBDb250cm9scyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgREFNT04gUXVvdGEgR29hbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHN1YnRseSB0d2Vha3MgaG93IHRoZSBgY3VycmVudF92YWx1ZWAgaXMgY29tcHV0ZWQgd2l0aGluIHRoZSBEQU1PTiBxdW90YSBzeXN0ZW0uIEl0JiMzOTtzIGZvY3VzZWQgb24gdGhlIGBnb2FsLSZndDtsYXN0X3BzaV90b3RhbGAgZmllbGQsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgcGFydCBvZiBhIHVuaW9uIHdpdGggYG5pZGAgYW5kIGBtZW1jZ19pZGAuIEl0JiMzOTtzIGEga2V5IHZhbHVlIGZvciB0cmFja2luZyBtZW1vcnkgUFNJLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IHRoZSBjYXNlIHdoZXJlIGBtZXRyaWNgIGlzIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCB0aGUgYGxhc3RfcHNpX3RvdGFsYCBoYXMgdGhlIHNlbnRpbmVsIHZhbHVlIGBVNjRfTUFYYCwgbWVhbmluZyBpdCBoYXNuJiMzOTt0IGJlZW4gbWVhc3VyZWQgeWV0LiBUaGF0IGlzIGluaXRpYWxpemVkIGluIGBkYW1vc19uZXdfcXVvdGFfZ29hbCgpYC4KCkluIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgLCB0aGUgZXhpc3RpbmcgY29kZSBjaGVja3MgaWYgYGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsYCAqaXMqIHRoaXMgc2VudGluZWwgdmFsdWUuIElmIGl0ICppcyosIHRoZW4gYGN1cnJlbnRfdmFsdWVgIGlzIHNldCB0byBlaXRoZXIgMCAoaWYgdXNpbmcgdGhlIHRlbXBvcmFsIHR1bmVyKSBvciBgdGFyZ2V0X3ZhbHVlYCAob3RoZXJ3aXNlKS4gVGhlIHVwZGF0ZWQgcGF0Y2ggc2VlbXMgdG8gYmUgYWx0ZXJpbmcgdGhlIGxvZ2ljIGZvciBjYWxjdWxhdGluZyBjdXJyZW50X3ZhbHVlIG9ubHkgd2hlbiB0aGUgc2VudGluZWwgaXMgcHJlc2VudC4gQWZ0ZXIgdGhhdCwgaXQgdXBkYXRlcyBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgIHRvIHRoZSBgbm93X3BzaV90b3RhbGAuCgpNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IGlzc3VlcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSBvciBleHBvc2VzIGludGVybmFsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSBpbiBhIHdheSB0aGF0IGNyZWF0ZXMgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY29kZSBJ4oCZbSBmYW1pbGlhciB3aXRoIHN1Z2dlc3RzIHRoYXQgdGhlIHBhdGNoICpzaG91bGRuJiMzOTt0KiBkbyB0aGF0LiBUaGUgYWZmZWN0ZWQgdmFsdWVzIOKAkyBgcy0mZ3Q7cXVvdGEuZ29hbF90dW5lcmAgYW5kIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCDigJMgYXJlIGludGVybmFsIHRvIERBTU9OJiMzOTtzIGFjY291bnRpbmcgYW5kIHRoZSBxdW90YSBzeXN0ZW0uIEV2ZW4gaWYgdGhlc2UgYXJlIHJlYWQgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGhvdyBgY3VycmVudF92YWx1ZWAgaXMgZXhwb3NlZC4gVGhpcyB3aWxsIG5lZWQgZnVydGhlciByZXZpZXcgb2YgaG93IHN5c2ZzIGhhbmRsZXMgdGhlc2UgdmFsdWVzLiBUaGUgZ29vZCBuZXdzIGlzLCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBwYXNzZWQgdG8gdXNlciBzcGFjZS4KClRoZSBpbmNsdXNpb24gb2YgdGhlIEtVbml0IHRlc3QgYGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2lgIGlzIGV4Y2VsbGVudDsgaXQmIzM5O3MgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0byBjb3ZlciB0aGUgY2hhbmdlZCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3VycmVudF92YWx1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTIxNT1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjIyLVx0aWYgKGRzdC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcbm1tL2RhbW9uL2NvcmUuYzoxMjIzOlx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vY29yZS5jLTEyMjQtXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTMxMzc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19odWdlcGFnZV9tZW1fYnAodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE1Mi1cbm1tL2RhbW9uL2NvcmUuYzozMTUzOnN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0zMTU0LVx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTU5LVx0Y2FzZSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUOlxubW0vZGFtb24vY29yZS5jOjMxNjA6XHRcdC8qIFVzZXIgc2hvdWxkIGFscmVhZHkgc2V0IGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSAqL1xubW0vZGFtb24vY29yZS5jLTMxNjEtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTY4LVx0XHRcdFx0LyogYW4gYWNoaWV2ZWQgc2NvcmUgd291bGQgemVybyB0aGUgdGVtcG9yYWwgcXVvdGEgKi9cbm1tL2RhbW9uL2NvcmUuYzozMTY5Olx0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0zMTcwLVx0XHRcdGVsc2Vcbm1tL2RhbW9uL2NvcmUuYzozMTcxOlx0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWU7XG5tbS9kYW1vbi9jb3JlLmMtMzE3Mi1cdFx0fSBlbHNlIHtcbm1tL2RhbW9uL2NvcmUuYzozMTczOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxubW0vZGFtb24vY29yZS5jLTMxNzQtXHRcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTc5LVx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxubW0vZGFtb24vY29yZS5jOjMxODA6XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbV9icChnb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0zMTgxLVx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE4My1cdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxubW0vZGFtb24vY29yZS5jOjMxODQ6XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzE4NS1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vY29yZS5jLTMxODctXHRjYXNlIERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMTg4Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcbm1tL2RhbW9uL2NvcmUuYy0zMTg5LVx0XHRcdFx0Z29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XG4tLVxubW0vZGFtb24vY29yZS5jLTMxOTEtXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxubW0vZGFtb24vY29yZS5jOjMxOTI6XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLFxubW0vZGFtb24vY29yZS5jLTMxOTMtXHRcdFx0XHRnb2FsLVx1MDAzZW5pZCk7XG4tLVxubW0vZGFtb24vY29yZS5jLTMxOTUtXHRjYXNlIERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMTk2Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcbm1tL2RhbW9uL2NvcmUuYy0zMTk3LVx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzIwND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyMTAtXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzIxMTpcdFx0ZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShjLCBzLCBnb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0zMjEyLVx0XHRoaWdoZXN0X3Njb3JlID0gbWF4KGhpZ2hlc3Rfc2NvcmUsXG5tbS9kYW1vbi9jb3JlLmM6MzIxMzpcdFx0XHRcdG11bHRfZnJhYyhnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUsIDEwMDAwLFxubW0vZGFtb24vY29yZS5jLTMyMTQtXHRcdFx0XHRcdGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKSk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDYtXHRcdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjQ3Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBxdW90YV9hdXRvdHVuZV9mZWVkYmFjaztcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDgtXHRcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgZ29hbCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE4LVx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxOTpcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVx0aW50IG5pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMyMz1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzMzpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzOTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDAtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MjpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDMtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDYtXHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0NzpcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0OC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQyMj1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDI0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyNjpcdFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyNy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzND1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDM2LVx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0Mzc6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzgtXHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX25pZF9hdHRyLmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NzAtXHRcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODcxOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXHUwMDNlY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODcyLVx0XHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTItXHRpZiAoc3JjLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxMzpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlLCBzcmMtXHUwMDNlY3VycmVudF92YWx1ZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE0LVx0c3dpdGNoIChkc3QtXHUwMDNlbWV0cmljKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzMj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM2LVx0XHQudGFyZ2V0X3ZhbHVlID0gMTAwMCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Mzc6XHRcdC5jdXJyZW50X3ZhbHVlID0gMTIzLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgzOC1cdFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDQtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NDU6XHRcdFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODQ2LVx0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDU2Nyxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODUxLVx0XHRcdC50YXJnZXRfdmFsdWUgPSA3ODksXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUyOlx0XHRcdC5jdXJyZW50X3ZhbHVlID0gMTJ9KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTMtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1Ni1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gMzQ1LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg1NzpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDY3OCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTgtXHRcdFx0Lm5pZCA9IDksXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2My1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gMTIsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODY0Olx0XHRcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2NS1cdFx0XHQubmlkID0gNixcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODcwLVx0XHRcdC50YXJnZXRfdmFsdWUgPSA0NTYsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODcxOlx0XHRcdC5jdXJyZW50X3ZhbHVlID0gNTY3LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3Mi1cdFx0XHQubmlkID0gNixcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODc4LVx0XHRcdC50YXJnZXRfdmFsdWUgPSA4OTAsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODc5Olx0XHRcdC5jdXJyZW50X3ZhbHVlID0gOTAxLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4MC1cdFx0XHQubmlkID0gMTAsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4Ni1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4NzpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04ODgtXHRcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA3MQoJCQkJCQkJb3V0cHV0OiAyNjAKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IEZpeCBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIGNoYW5nZSBpcyBhbGwgYWJvdXQga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBhbmQgdGhhdCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgZnVuY3Rpb24uIFdoYXQmIzM5O3MgaGFwcGVuaW5nIGlzIHRoYXQgd2hlbiBjYWxjdWxhdGluZyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AsIGFuZCBjcnVjaWFsbHksIGJlZm9yZSB0aGUgZmlyc3QgUFNJIHNhbXBsZSBpcyBldmVuIHJlY29yZGVkIChtZWFuaW5nIGBnb2FsLSZndDtsYXN0X3BzaV90b3RhbGAgaXMgc3RpbGwgYXQgaXRzIGluaXRpYWwgYFU2NF9NQVhgIHZhbHVlKSwgdGhlIGNvZGUgY2hlY2tzIGlmIHRoZSBnb2FsIHR1bmVyIGlzIHNldCB0byBgREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTGAuIElmIGl0IGlzLCB0aGVuIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCBnZXRzIHNldCB0byBgMGAgaW5zdGVhZCBvZiBgZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlYC4gQSBLVW5pdCB0ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIHZlcmlmeSB0aGlzIHNwZWNpZmljIGJlaGF2aW9yLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uLCBhcyBhbHdheXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzPyBVbmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd3JpdGVzLCBpbmZvcm1hdGlvbiBsZWFrcz8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgRmlyc3QsIGBsYXN0X3BzaV90b3RhbGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVTY0X01BWGAgd2hlbiBhIGdvYWwgaXMgY3JlYXRlZCBvciBjb21taXR0ZWQsIHdoaWNoIGlzIHRoZSBzZW50aW5lbCB2YWx1ZSB3ZSBhcmUgdGFsa2luZyBhYm91dC4KKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgaW50cm9kdWNlZCwgc28gdGhhdCYjMzk7cyBhIGNoZWNrLgoqICAgVGhlcmUmIzM5O3Mgbm8gY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UgaGFwcGVuaW5nIGhlcmUuCiogICBObyBwb2ludGVycyBvciBidWZmZXIgYWNjZXNzZXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBieXRlcyBlaXRoZXIuCiogICBLTVNBTiBzaG91bGRuJiMzOTt0IGJlIGNvbmNlcm5lZCwgYmVjYXVzZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgYWZmZWN0IGFueSBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHN0YW5kYXJkIHNhbml0aXplcnMgKGxpa2UgS0FTQU4pIGFuZCB0aGUgS1VuaXQgdGVzdHMgYXJlIHN1ZmZpY2llbnQgaGVyZS4KClRvIHJlY2FwIGFuZCBtYWtlIHN1cmUgSSYjMzk7dmUgY292ZXJlZCBldmVyeXRoaW5nLCB0aGlzIHBhdGNoIGZpeGVzIHRoZSBpbml0aWFsIGNhbGN1bGF0aW9uIG9mIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCB3aGVuIHVzaW5nIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYCAqYmVmb3JlKiB0aGUgZmlyc3QgUFNJIG1lYXN1cmVtZW50IGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBpcyB0YWtlbi4gVGhhdCBgVTY0X01BWGAgdmFsdWUgaXMgYSBkZWxpYmVyYXRlIHNlbnRpbmVsLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkLiBObyB1c2VyIHNwYWNlIGludGVyYWN0aW9uIGlzIGFmZmVjdGVkLCBhbmQgbm90aGluZyByZWxhdGVkIHRvIGJ1ZmZlciBib3VuZHMgb3IgYWxsb2NhdGlvbiBsb2dpYyBjaGFuZ2VzLiBPa2F5LCB0aW1lIHRvIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nIG9uZSBsYXN0IHRpbWUuIE5vdyBJIGNhbiBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04mIzM5O3MgcXVvdGEgZ29hbCBsb2dpYyBpbiBgbW0vZGFtb24vY29yZS5jYCBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgbWV0cmljcyBhbmQgYWRkcyBhIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVhgIChhIGRvbWFpbi1sZXZlbCBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gUFNJIHNhbXBsZSBoYXMgeWV0IGJlZW4gcmVjb3JkZWQpLCBpdCBzZXRzIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwYCBpbnN0ZWFkIG9mIGBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZWAgaWYgdGhlIHR1bmVyIGlzIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYC5cblxuRGVzcGl0ZSB0aGUgY29kZSBjb21tZW50IHJlZmVycmluZyB0byBcJiMzNDt1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsXCYjMzQ7LCB0aGlzIGlzIHB1cmVseSBhIHNlbWFudGljIHNlbnRpbmVsIHZhbHVlOiBgbGFzdF9wc2lfdG90YWxgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFU2NF9NQVhgIHVwb24gYWxsb2NhdGlvbiBvciBjb21taXQgKGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmApLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBhY2Nlc3NlZCBvciBleHBvc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiYjMzk7cyBxdW90YSBnb2FsIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBtZXRyaWNzIGFuZCBhZGRzIGEgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0LiBTcGVjaWZpY2FsbHksIHdoZW4gYGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWGAgKGEgZG9tYWluLWxldmVsIHNlbnRpbmVsIHZhbHVlIGluZGljYXRpbmcgdGhhdCBubyBQU0kgc2FtcGxlIGhhcyB5ZXQgYmVlbiByZWNvcmRlZCksIGl0IHNldHMgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IDBgIGluc3RlYWQgb2YgYGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlYCBpZiB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLlxuXG5EZXNwaXRlIHRoZSBjb2RlIGNvbW1lbnQgcmVmZXJyaW5nIHRvIFwmIzM0O3VuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWxcJiMzNDssIHRoaXMgaXMgcHVyZWx5IGEgc2VtYW50aWMgc2VudGluZWwgdmFsdWU6IGBsYXN0X3BzaV90b3RhbGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVTY0X01BWGAgdXBvbiBhbGxvY2F0aW9uIG9yIGNvbW1pdCAoYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGFjY2Vzc2VkIG9yIGV4cG9zZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDE6MzEuNTIzMTc5MTg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwMTUzODMxNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiUFNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZVwiLFxuICAgIFwiZGFtb3NfcXVvdGFfc2NvcmVcIixcbiAgICBcImRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWxcIixcbiAgICBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04ncyBxdW90YSBnb2FsIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBtZXRyaWNzIGFuZCBhZGRzIGEgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0LiBTcGVjaWZpY2FsbHksIHdoZW4gYGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVhgIChhIGRvbWFpbi1sZXZlbCBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gUFNJIHNhbXBsZSBoYXMgeWV0IGJlZW4gcmVjb3JkZWQpLCBpdCBzZXRzIGBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMGAgaW5zdGVhZCBvZiBgZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlYCBpZiB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLlxcblxcbkRlc3BpdGUgdGhlIGNvZGUgY29tbWVudCByZWZlcnJpbmcgdG8gXFxcInVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWxcXFwiLCB0aGlzIGlzIHB1cmVseSBhIHNlbWFudGljIHNlbnRpbmVsIHZhbHVlOiBgbGFzdF9wc2lfdG90YWxgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFU2NF9NQVhgIHVwb24gYWxsb2NhdGlvbiBvciBjb21taXQgKGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmApLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBhY2Nlc3NlZCBvciBleHBvc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04vREFNT1MgcXVvdGEgZ29hbCBldmFsdWF0aW9uIGluIG1tL2RhbW9uL2NvcmUuYywgZW5zdXJpbmcgdGhhdCB1bm1lYXN1cmVkIFBTSSBnb2FscyB1bmRlciBhIHRlbXBvcmFsIGdvYWwgdHVuZXIgZG8gbm90IHByZW1hdHVyZWx5IHplcm8gdGhlIGVmZmVjdGl2ZSBxdW90YSBkdXJpbmcgaW5pdGlhbCB0dW5pbmcgcm91bmRzLiBUaGlzIGFsdGVycyBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgZXhlY3V0aW9uIGFuZCBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04ncyBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAxOjMxLjUyMzE4MzU2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NzYwNTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg1NDI1NTQ1YmRiOGMzYmM0NGViY2ViNmNhMDU0MjYzOTA2NjRlMzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDE6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggMDZjZjJhYjdlOTdkNy4uZTZkODdmZDM5OTJlZSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMzE2MSwxMiArMzE2MSwxOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcXG4gXFx0XFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG4tXFx0XFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xcbi1cXHRcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcXG4tXFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZTtcXG4tXFx0XFx0ZWxzZVxcbitcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkge1xcbitcXHRcXHRcXHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXFxuK1xcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5nb2FsX3R1bmVyID09XFxuK1xcdFxcdFxcdFxcdFxcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXFxuK1xcdFxcdFxcdFxcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXFxuK1xcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuK1xcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC1cXG4gXFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxuK1xcdFxcdH1cXG4gXFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5pbmRleCBjMDFlNmE3NWNhZGMxLi4yYjliMjRjZTdkYWQzIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbkBAIC04ODksNiArODg5LDc0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRcXHR9KTtcXG4gfVxcbiBcXG4rLypcXG4rICogVW5tZWFzdXJlZCBQU0kgZ29hbHMgbXVzdCBub3QgZGlzYWJsZSB0aGUgdGVtcG9yYWwgcXVvdGEuXFxuKyAqIEtlZXAgc3ogKiAxMDAwMCB3aXRoaW4gYSAzMi1iaXQgdW5zaWduZWQgbG9uZy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XFxuK1xcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge307XFxuK1xcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHtcXG4rXFx0XFx0LnN6ID0gU1pfNjRLLFxcbitcXHRcXHQuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcyA9IHt9O1xcbitcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBzcmMgPSB7XFxuK1xcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxuK1xcdFxcdC50YXJnZXRfdmFsdWUgPSBVTE9OR19NQVgsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbitcXHRzdHJ1Y3QgZGFtb3MgKnM7XFxuK1xcbitcXHRpZiAoIWMpXFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcIik7XFxuK1xcdHMgPSBkYW1vbl9uZXdfc2NoZW1lKFxcdTAwMjZwYXR0ZXJuLCBEQU1PU19TVEFULCAwLCBcXHUwMDI2cXVvdGEsIFxcdTAwMjZ3bWFya3MsXFxuK1xcdFxcdFxcdE5VTUFfTk9fTk9ERSk7XFxuK1xcdGlmICghcykge1xcbitcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic2NoZW1lIGFsbG9jIGZhaWxcXFwiKTtcXG4rXFx0fVxcbitcXHRkYW1vbl9hZGRfc2NoZW1lKGMsIHMpO1xcbitcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLCBVTE9OR19NQVgpO1xcbitcXHRpZiAoIWdvYWwpIHtcXG4rXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImdvYWwgYWxsb2MgZmFpbFxcXCIpO1xcbitcXHR9XFxuK1xcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFxcdTAwMjZzLVxcdTAwM2VxdW90YSwgZ29hbCk7XFxuK1xcbitcXHQvKiBmcmVzaCBnb2FsLCBmaXJzdCB0dW5pbmcgcm91bmQgKi9cXG4rXFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXFx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTtcXG4rXFxuK1xcdC8qIHNlY29uZCByb3VuZDogbGFzdF9wc2lfdG90YWwgaXMgaW5pdGlhbGlzZWQgbm93ICovXFxuK1xcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVxcdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7XFxuK1xcbitcXHQvKiBjb21taXQgYSBQU0kgZ29hbCBvbnRvIHRoZSBpbml0aWFsaXNlZCBQU0kgZ29hbCAqL1xcbitcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChnb2FsLCBcXHUwMDI2c3JjKTtcXG4rXFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXFx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTtcXG4rXFxuK1xcdC8qIGEgbWVhc3VyZWQgcm91bmQgdGhhdCByZWFjaGVzIHRoZSB0YXJnZXQgZGlzYWJsZXMgdGhlIHF1b3RhICovXFxuK1xcdGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSA9IDEwO1xcbitcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKSAtIDEwO1xcbitcXHQvKiBVNjRfTUFYIG1hcmtzIGFuIHVubWVhc3VyZWQgZ29hbCwga2VlcCB0aGUgc2FtcGxlIGF3YXkgZnJvbSBpdCAqL1xcbitcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcXG4rXFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwtLTtcXG4rXFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXFx1MDAzZXF1b3RhLmVzeiwgMHVsKTtcXG4rXFxuK1xcdC8qIHRoZSBjb25zaXN0IHR1bmVyIGtlZXBzIGl0cyBxdW90YSBvdmVyIGFuIHVubWVhc3VyZWQgcm91bmQgKi9cXG4rXFx0cy1cXHUwMDNlcXVvdGEuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVDtcXG4rXFx0cy1cXHUwMDNlcXVvdGEuZXN6X2JwID0gU1pfMzJLICogMTAwMDA7XFxuK1xcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGdvYWwsIFxcdTAwMjZzcmMpO1xcbitcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl8zMkspO1xcbitcXG4rXFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuIFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbHMsIGludCBucl9kc3RfZ29hbHMsXFxuIFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmNfZ29hbHMsIGludCBucl9zcmNfZ29hbHMpXFxuQEAgLTE4ODcsNiArMTk1NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XFxuIFxcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9uZXdfZmlsdGVyKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyksXFxuK1xcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaSksXFxuIFxcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGEpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXIpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMTozMy4yMTEzOTUyMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MTQ5ODE1NzIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIlBTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVcIixcbiAgICBcImRhbW9zX3F1b3RhX3Njb3JlXCIsXG4gICAgXCJkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsXCIsXG4gICAgXCJkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhXCIsXG4gICAgXCJkYW1vc19hZGp1c3RfcXVvdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTi9EQU1PUyBxdW90YSBnb2FsIGV2YWx1YXRpb24gaW4gbW0vZGFtb24vY29yZS5jLCBlbnN1cmluZyB0aGF0IHVubWVhc3VyZWQgUFNJIGdvYWxzIHVuZGVyIGEgdGVtcG9yYWwgZ29hbCB0dW5lciBkbyBub3QgcHJlbWF0dXJlbHkgemVybyB0aGUgZWZmZWN0aXZlIHF1b3RhIGR1cmluZyBpbml0aWFsIHR1bmluZyByb3VuZHMuIFRoaXMgYWx0ZXJzIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBleGVjdXRpb24gYW5kIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTidzIHN5c2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTQyNTU0NWJkYjhjM2JjNDRlYmNlYjZjYTA1NDI2MzkwNjY0ZTMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDE6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDA2Y2YyYWI3ZTk3ZDcuLmU2ZDg3ZmQzOTkyZWUgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMxNjEsMTIgKzMxNjEsMTggQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRicmVhaztcbiBcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxuIFx0XHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuLVx0XHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXG4tXHRcdGlmIChnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpXG4tXHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWU7XG4tXHRcdGVsc2VcbitcdFx0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkge1xuK1x0XHRcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cbitcdFx0XHRpZiAocy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyID09XG4rXHRcdFx0XHRcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXG4rXHRcdFx0XHQvKiBhbiBhY2hpZXZlZCBzY29yZSB3b3VsZCB6ZXJvIHRoZSB0ZW1wb3JhbCBxdW90YSAqL1xuK1x0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gMDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZTtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC1cbiBcdFx0XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG4rXHRcdH1cbiBcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggYzAxZTZhNzVjYWRjMS4uMmI5YjI0Y2U3ZGFkMyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtODg5LDYgKzg4OSw3NCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0XHR9KTtcbiB9XG4gXG4rLypcbisgKiBVbm1lYXN1cmVkIFBTSSBnb2FscyBtdXN0IG5vdCBkaXNhYmxlIHRoZSB0ZW1wb3JhbCBxdW90YS5cbisgKiBLZWVwIHN6ICogMTAwMDAgd2l0aGluIGEgMzItYml0IHVuc2lnbmVkIGxvbmcuXG4rICovXG4rc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcbitcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge307XG4rXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGEgPSB7XG4rXHRcdC5zeiA9IFNaXzY0SyxcbitcdFx0LmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxuK1x0fTtcbitcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcyA9IHt9O1xuK1x0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgc3JjID0ge1xuK1x0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuK1x0XHQudGFyZ2V0X3ZhbHVlID0gVUxPTkdfTUFYLFxuK1x0fTtcbitcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xuK1x0c3RydWN0IGRhbW9zICpzO1xuK1xuK1x0aWYgKCFjKVxuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiY3R4IGFsbG9jIGZhaWxcIik7XG4rXHRzID0gZGFtb25fbmV3X3NjaGVtZShcdTAwMjZwYXR0ZXJuLCBEQU1PU19TVEFULCAwLCBcdTAwMjZxdW90YSwgXHUwMDI2d21hcmtzLFxuK1x0XHRcdE5VTUFfTk9fTk9ERSk7XG4rXHRpZiAoIXMpIHtcbitcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJzY2hlbWUgYWxsb2MgZmFpbFwiKTtcbitcdH1cbitcdGRhbW9uX2FkZF9zY2hlbWUoYywgcyk7XG4rXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLCBVTE9OR19NQVgpO1xuK1x0aWYgKCFnb2FsKSB7XG4rXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGMpO1xuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiZ29hbCBhbGxvYyBmYWlsXCIpO1xuK1x0fVxuK1x0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2cy1cdTAwM2VxdW90YSwgZ29hbCk7XG4rXG4rXHQvKiBmcmVzaCBnb2FsLCBmaXJzdCB0dW5pbmcgcm91bmQgKi9cbitcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7XG4rXG4rXHQvKiBzZWNvbmQgcm91bmQ6IGxhc3RfcHNpX3RvdGFsIGlzIGluaXRpYWxpc2VkIG5vdyAqL1xuK1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTtcbitcbitcdC8qIGNvbW1pdCBhIFBTSSBnb2FsIG9udG8gdGhlIGluaXRpYWxpc2VkIFBTSSBnb2FsICovXG4rXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChnb2FsLCBcdTAwMjZzcmMpO1xuK1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTtcbitcbitcdC8qIGEgbWVhc3VyZWQgcm91bmQgdGhhdCByZWFjaGVzIHRoZSB0YXJnZXQgZGlzYWJsZXMgdGhlIHF1b3RhICovXG4rXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IDEwO1xuK1x0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKSAtIDEwO1xuK1x0LyogVTY0X01BWCBtYXJrcyBhbiB1bm1lYXN1cmVkIGdvYWwsIGtlZXAgdGhlIHNhbXBsZSBhd2F5IGZyb20gaXQgKi9cbitcdGlmIChnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpXG4rXHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwtLTtcbitcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cdTAwM2VxdW90YS5lc3osIDB1bCk7XG4rXG4rXHQvKiB0aGUgY29uc2lzdCB0dW5lciBrZWVwcyBpdHMgcXVvdGEgb3ZlciBhbiB1bm1lYXN1cmVkIHJvdW5kICovXG4rXHRzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1Q7XG4rXHRzLVx1MDAzZXF1b3RhLmVzel9icCA9IFNaXzMySyAqIDEwMDAwO1xuK1x0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2c3JjKTtcbitcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzMySyk7XG4rXG4rXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FscywgaW50IG5yX2RzdF9nb2FscyxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyY19nb2FscywgaW50IG5yX3NyY19nb2FscylcbkBAIC0xODg3LDYgKzE5NTUsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMpLFxuK1x0S1VOSVRfQ0FTRShkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGEpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9kZXN0cyksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlciksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMTozMy4yMTEzOTY2ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDk2Njk1Mzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoOiBRdW90YSBHb2FsIEFkanVzdG1lbnQgYW5kIEtVbml0IFRlc3QqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIHBhdGNoIHN1Ym1pdHRlZCBmb3IgREFNT04sIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGEgbmV3IEtVbml0IHRlc3QgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIExldCdzIGRpdmUgaW4uIFRoZSBnb2FsIGlzIHRvIGV2YWx1YXRlIHRoaXMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuXG5cbkZpcnN0LCBJJ2xsIGZvY3VzIG9uIHRoZSBjb2RlIGRpZmYgaW4gYGNvcmUuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgbGluZSAzMTYxLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBob3cgREFNT04gc2V0cyB0aGUgYGN1cnJlbnRfdmFsdWVgIGZvciBxdW90YSBnb2Fscywgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIHF1b3RhIHRhcmdldCBpcyBiYXNlZCBvbiBzb21lIGtpbmQgb2YgUFNJIChQcmVzc3VyZSBTdGFsbCBJbmZvcm1hdGlvbikuIFRoZSBjb2RlIGFkZHJlc3NlcyB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgY2FzZS5cblxuQmVmb3JlIHRoaXMgY2hhbmdlLCBpZiBgbGFzdF9wc2lfdG90YWxgIHdhcyB1bmluaXRpYWxpemVkIChgVTY0X01BWGApLCB0aGUgYGN1cnJlbnRfdmFsdWVgIHdvdWxkIGp1c3QgYmUgc2V0IHRvIHRoZSBgdGFyZ2V0X3ZhbHVlYC4gTm93LCB0aGVyZSdzIGEgY29uZGl0aW9uYWwgY2hlY2suICBJZiB0aGUgcXVvdGEgdHVuZXIgaXMgdGVtcG9yYWwgKGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYCkgYW5kIGBsYXN0X3BzaV90b3RhbGAgaXMgdW5pbml0aWFsaXplZCwgdGhlIGBjdXJyZW50X3ZhbHVlYCBiZWNvbWVzIHplcm8uIE90aGVyd2lzZSwgaXQgYmVoYXZlcyBhcyBiZWZvcmUgKHdpdGggYW4gdW5pbml0aWFsaXplZCBgbGFzdF9wc2lfdG90YWxgKS4gSWYgYGxhc3RfcHNpX3RvdGFsYCBoYXMgYmVlbiBpbml0aWFsaXplZCwgdGhlIGBjdXJyZW50X3ZhbHVlYCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IFBTSSB0b3RhbCBhbmQgdGhlIGxhc3Qgb25lLiBUaGUgYGxhc3RfcHNpX3RvdGFsYCBpcyB1cGRhdGVkIGluIGVpdGhlciB0aGUgaW5pdGlhbGl6ZWQgb3IgdW5pbml0aWFsaXplZCBjYXNlLlxuXG5Gcm9tIG15IHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIGxpa2UgYSByZWZpbmVtZW50IGluIHRoZSB0ZW1wb3JhbCBxdW90YSBhZGp1c3RtZW50IGxvZ2ljLiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGlzIHRvIG1ha2UgdGhlIHRlbXBvcmFsIHF1b3RhIHplcm8gaWYgdW5pbml0aWFsaXplZCwgcmF0aGVyIHRoYW4gYmVpbmcgc2V0IHRvIHRoZSB0YXJnZXQgdmFsdWUuXG5cbkkgYWxzbyBzZWUgYSBuZXcgS1VuaXQgdGVzdCwgYGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2lgLiBUaGlzIGlzIGdyZWF0LiBJdCdsbCBiZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSB0ZXN0IGlzIHZlcmlmeWluZywgd2hpY2ggd2lsbCBzaGVkIG1vcmUgbGlnaHQgb24gdGhlIGludGVuZGVkIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgdGVzdCBjb2RlIGluIGBjb3JlLWt1bml0LmhgIHRvIHNlZSB0aGUgc3BlY2lmaWNzLiBNeSBndWVzcyBpcyBpdCB2ZXJpZmllcyB0aGUgbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIEkganVzdCBkZXNjcmliZWQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBQU0kgdmFsdWVzIGFyZSBzZXQgdXAgYW5kIGhvdyB0aGUgYGN1cnJlbnRfdmFsdWVgIGlzIGFzc2VydGVkIGluIHRoZSB0ZXN0LiBUaGUgdGVzdCB3aWxsIGhvcGVmdWxseSBzaG93IG1lIHRoZSBzY2VuYXJpb3MgdGhpcyBsb2dpYyBoYW5kbGVzLCB3aGljaCBpcyBrZXkuIE15IGV4cGVyaWVuY2Ugd2l0aCBEQU1PTiB0ZWxscyBtZSB0aGlzIGxpa2VseSBhaW1zIHRvIGZpbmUtdHVuZSB0aGUgcXVvdGEgYmVoYXZpb3IgaW4gZWRnZSBjYXNlcyBvciBhdCB0aGUgc3RhcnQgb2YgREFNT04ncyBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMjoyNC4xNzgzNTUzMzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNTA6XFx0XFx0cmV0dXJuIG11bHRfZnJhYyh0aHAsIDEwMDAwLCB0b3RhbF9wYWdlcyAtIGZyZWVfcGFnZXMpO1xcbjMxNTE6XFx0fVxcbjMxNTI6XFx0XFxuMzE1MzpcXHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMzE1NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjMxNTU6XFx0e1xcbjMxNTY6XFx0XFx0dTY0IG5vd19wc2lfdG90YWw7XFxuMzE1NzpcXHRcXG4zMTU4OlxcdFxcdHN3aXRjaCAoZ29hbC1cXHUwMDNlbWV0cmljKSB7XFxuMzE1OTpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxuMzE2MDpcXHRcXHRcXHQvKiBVc2VyIHNob3VsZCBhbHJlYWR5IHNldCBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlICovXFxuMzE2MTpcXHRcXHRcXHRicmVhaztcXG4zMTYyOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbjMxNjM6XFx0XFx0XFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG4zMTY0OlxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XFxuMzE2NTpcXHRcXHRcXHRcXHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXFxuMzE2NjpcXHRcXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuZ29hbF90dW5lciA9PVxcbjMxNjc6XFx0XFx0XFx0XFx0XFx0XFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcXG4zMTY4OlxcdFxcdFxcdFxcdFxcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXFxuMzE2OTpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMDtcXG4zMTcwOlxcdFxcdFxcdFxcdGVsc2VcXG4zMTcxOlxcdFxcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuMzE3MjpcXHRcXHRcXHR9IGVsc2Uge1xcbjMxNzM6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxcbjMxNzQ6XFx0XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxuMzE3NTpcXHRcXHRcXHR9XFxuMzE3NjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XFxuMzE3NzpcXHRcXHRcXHRicmVhaztcXG4zMTc4OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG4zMTc5OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcXG4zMTgwOlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XFxuMzE4MTpcXHRcXHRcXHRicmVhaztcXG4zMTgyOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbjMxODM6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxuMzE4NDpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcXG4zMTg1OlxcdFxcdFxcdGJyZWFrO1xcbjMxODY6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQOlxcbjMxODc6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlA6XFxuMzE4ODpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXFxuMzE4OTpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XFxuMzE5MDpcXHRcXHRcXHRicmVhaztcXG4zMTkxOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XFxuMzE5MjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsXFxuMzE5MzpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VuaWQpO1xcbjMxOTQ6XFx0XFx0XFx0YnJlYWs7XFxuMzE5NTpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDpcXG4zMTk2OlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcXG4zMTk3OlxcdFxcdFxcdGJyZWFrO1xcbjMxOTg6XFx0XFx0ZGVmYXVsdDpcXG4zMTk5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMjoyNC4xNzg1ODkyODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDcwNDA1OTM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIENhbGxzIHRvIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjYWxsZXJzIG9mIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGVidWdnaW5nIHRhc2ssIGJ1dCB0aGUgYXBwcm9hY2ggSSB0YWtlIHdpbGwgZGVwZW5kIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5NeSBpbml0aWFsIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHVzZSBhIHN0YXRpYyBhbmFseXNpcyB0b29sLCBsaWtlIGdyZXAgd2l0aCBzb21lIGp1ZGljaW91cyB1c2Ugb2YgcmVnZXgsIHRvIHNlYXJjaCB0aGUgZW50aXJlIHByb2plY3QgZm9yIGFsbCBpbnN0YW5jZXMgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhpcyBnaXZlcyBtZSBhIHF1aWNrIG92ZXJ2aWV3IG9mIGFsbCBwb3RlbnRpYWwgY2FsbCBzaXRlcy4gSG93ZXZlciwgc3RhdGljIGFuYWx5c2lzIGNhbiBiZSBhIGJpdCBibHVudDsgaXQgbWlnaHQgbWlzcyBjYWxscyBpZiB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluZGlyZWN0bHkgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBvciBtYWNybyBleHBhbnNpb25zLiBJJ2QgdGhlbiBoYXZlIHRvIHJlZmluZSB0aGUgc2VhcmNoLlxuXG5JZiB0aGF0IHByb3ZlcyBpbnN1ZmZpY2llbnQsIG9yIGlmIHRoZSBjb2RlIGlzIHBhcnRpY3VsYXJseSBjb21wbGV4LCBJJ2xsIG5lZWQgdG8gZW1wbG95IGEgZGVidWdnZXIuIEkgY2FuIHNldCBhIGJyZWFrcG9pbnQgb24gYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGFuZCB0aGVuIHJ1biB0aGUgYXBwbGljYXRpb24gd2l0aCBhIHRlc3QgY2FzZSB0aGF0IEkga25vdyBzaG91bGQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLiBUaGlzIGlzIHdoZXJlIGEgZ29vZCB0ZXN0IGVudmlyb25tZW50IGNvbWVzIGluIGhhbmR5LiBTdGVwcGluZyB0aHJvdWdoIHRoZSBjb2RlIHdpbGwgc2hvdyBtZSB0aGUgYWN0dWFsIGNhbGwgc3RhY2sgYW5kIGFsbG93IG1lIHRvIG9ic2VydmUgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGxlYWRpbmcgdXAgdG8gdGhlIGZ1bmN0aW9uIGNhbGwuIEkgY2FuIGFsc28gbG9vayBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY29udHJvbHMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGV2ZXIgY2FsbGVkLCBvciBpcyBjYWxsZWQgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcy5cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBpcyBhIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIFRoaXMgbWlnaHQgaW52b2x2ZSBhIGNvbWJpbmF0aW9uIG9mIHN0YXRpYyBhbmFseXNpcywgZHluYW1pYyBkZWJ1Z2dpbmcsIGFuZCBldmVuIHNvbWUgY29kZSByZXZpZXcgaWYgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzY2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMjozNC44ODI2NTEwMThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyODMxNTY3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMTM3PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzE1Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzE1MzpzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jLTMxNTQtXFx0XFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjA0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjEwLVxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzIxMTpcXHRcXHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjEyLVxcdFxcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6MzcuNTEwOTcyODYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzY4MDQyOTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIExpbmVhZ2Ugb2YgYGRhbW9zX3F1b3RhX3Njb3JlYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBcIk9rYXksIGxldCdzIGh1bnQgZG93biB3aGVyZSBgZGFtb3NfcXVvdGFfc2NvcmVgIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IHNpZ25pZmljYW50IGludmVzdGlnYXRpb24sIHJpZ2h0PyBJIHdhbnQgdG8gc2VlIGFsbCB0aGUgY2FsbGVycywgYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIGlzIGFic29sdXRlbHkgY3J1Y2lhbDsgaXQgdGVsbHMgbWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGRhbW9zX3F1b3RhX3Njb3JlYCBvcGVyYXRlcyBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0cyBvdXRwdXQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyBpdHMgcm9sZSB3aXRoaW4gdGhlIHdpZGVyIGZyYW1ld29yaywgaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvciBldmVuIGFudGljaXBhdGUgdGhlIHJpcHBsZSBlZmZlY3RzIG9mIGFueSBjaGFuZ2VzIEkgbWlnaHQgbWFrZSB0byB0aGF0IGZ1bmN0aW9uLiBTbywgc2hvdyBtZSB0aGUgY2FsbGVycyEgTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDE1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NDEuMTkxNDA2MTk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjczNjI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfc2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMDMtLyogUmV0dXJuIHRoZSBoaWdoZXN0IHNjb3JlIHNpbmNlIGl0IG1ha2VzIHNjaGVtZXMgbGVhc3QgYWdncmVzc2l2ZSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjA0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMzIwNS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIyMD1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMjItXFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG5tbS9kYW1vbi9jb3JlLmM6MzIyMzpcXHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTMyMjQtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIyOT1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzIzMi1cXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbm1tL2RhbW9uL2NvcmUuYzozMjMzOlxcdHVuc2lnbmVkIGxvbmcgc2NvcmUgPSBkYW1vc19xdW90YV9zY29yZShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzIzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NDMuNzE4Nzc0NDA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Njk3NjYyMTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBDYWxsZXJzIHRvIERBTU9TIFR1bmluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZXNlIGBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsYCBhbmQgYGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdGAgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQga25vd2luZyB0aGVpciBiYXNpYyBkZWZpbml0aW9uIOKAkyBJJ20gbG9va2luZyBmb3IgdGhlICpjb250ZXh0KiBvZiB0aGVpciBjYWxscy4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBtb2R1bGVzLCBjbGFzc2VzLCBvciBmdW5jdGlvbnMgYXJlIHJlbHlpbmcgb24gdGhlbS4gQXJlIHRoZXkgYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gdG9wLWxldmVsIHNjcmlwdHMsIG9yIGFyZSB0aGV5IGJ1cmllZCBkZWVwIHdpdGhpbiBhIGNvbXBsZXggYXJjaGl0ZWN0dXJlPyBXaGF0IGRhdGEgYXJlIHRoZXkgcmVjZWl2aW5nIGFzIGlucHV0PyBXaGF0IGlzIHRoZWlyIGV4cGVjdGVkIG91dHB1dCwgYW5kIHdoZXJlIGRvZXMgdGhhdCBvdXRwdXQgZ28/IFRoaXMgaGVscHMgcGFpbnQgYSBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSB3aG9sZSBzeXN0ZW0uIFRoaXMgYW5hbHlzaXMgc2hvdWxkIGhlbHAgbWUsIGJhc2VkIG9uIHRoZSByZXN1bHRzLCB0byBmb3JtIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHR1bmluZyBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgdG8gc3VwcG9ydCB0aGUgb3ZlcmFsbCBnb2FsIG9mIHRoZSBzeXN0ZW0uIEkgd2lsbCBuZWVkIHRvIHVzZSBjYWxsIGdyYXBoIGFuYWx5c2lzLCBjcm9zcy1yZWZlcmVuY2luZywgb3IgcGVyaGFwcyBldmVuIGR5bmFtaWMgYW5hbHlzaXMgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjIzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NTAuNjk1NDAwMTg3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ5NjEyNjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjA0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjE5LVxcbm1tL2RhbW9uL2NvcmUuYzozMjIwOnN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMyMjEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMjgtXFxubW0vZGFtb24vY29yZS5jOjMyMjk6c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0zMjMwLVxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjQ2PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI1OS1cXHRcXHRpZiAocXVvdGEtXFx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUKVxcbm1tL2RhbW9uL2NvcmUuYzozMjYwOlxcdFxcdFxcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChjdHgsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjYxLVxcdFxcdGVsc2UgaWYgKHF1b3RhLVxcdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXFxubW0vZGFtb24vY29yZS5jOjMyNjI6XFx0XFx0XFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChjdHgsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjYzLVxcdFxcdGVzeiA9IHF1b3RhLVxcdTAwM2Vlc3pfYnAgLyAxMDAwMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NTIuOTQ1MDIxMjkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0MDA1NjYyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIHBhdHRlcm5zIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGNhbGxzIHRvIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUncyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/XCIgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJJ20gZ29pbmcgdG8gd2FudCB0byBrbm93IHRoZSBjb2RlYmFzZSBsb2NhdGlvbnMgYW5kIGNvbnRleHRzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgZWFjaCBjYWxsLiBBcmUgd2UgdGFsa2luZyBjb3JlIHF1b3RhIG1hbmFnZW1lbnQgbG9naWMsIGEgc3BlY2lmaWMgZmVhdHVyZSwgb3IgcG90ZW50aWFsbHksIGEgdGVzdCBoYXJuZXNzP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGFyZ3VtZW50cyBwYXNzZWQuICpXaGF0KiBpcyBiZWluZyBzZXQ/IFF1b3RhIHR5cGUsIHZhbHVlcywgb3RoZXIgcGFyYW1ldGVycz8gS25vd2luZyB0aGUgYXJndW1lbnRzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHkgYW5kIHRoZSBkYXRhIGl0IG9wZXJhdGVzIG9uLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBhcmd1bWVudHMgYXJlIGRlcml2ZWQuIEFyZSB0aGV5IGNvbWluZyBmcm9tIHVzZXIgaW5wdXQsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGNhbGN1bGF0ZWQgdmFsdWVzLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzb3VyY2UgaGVscHMgaWRlbnRpZnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBsb2dpY2FsIGZsYXdzLlxuXG5OZXh0LCBJIG5lZWQgdG8ga25vdyAqd2hlbiogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEFyZSB0aGVzZSBxdW90YSBhZGp1c3RtZW50cyB0cmlnZ2VyZWQgYnkgdXNlciBhY3Rpb25zLCBiYWNrZ3JvdW5kIHByb2Nlc3Nlcywgc3lzdGVtIGV2ZW50cywgb3Igc29tZXRoaW5nIGVsc2U/IFRoZSB0aW1pbmcgaGFzIGEgYmlnIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBxdW90YSBtYW5hZ2VtZW50IHN5c3RlbSdzIGJlaGF2aW9yLCBhbmQgaG93IHdlIGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXMgdGhlcmUgYW55IGxvY2tpbmcgaW52b2x2ZWQ/IEFueSBwb3RlbnRpYWwgZm9yIGNvbnRlbnRpb24/XG5cbkZpbmFsbHksIHdoYXQgYXJlIHRoZSAqY29uc2VxdWVuY2VzKiBvZiB0aGlzIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uPyBEb2VzIGl0IGRpcmVjdGx5IG1vZGlmeSBhIGRhdGFiYXNlLCB1cGRhdGUgY2FjaGVzLCB0cmlnZ2VyIG5vdGlmaWNhdGlvbnMsIG9yIHNvbWUgY29tYmluYXRpb24gb2YgdGhlc2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlIGVmZmVjdHMuIEFuZCBtb3N0IGltcG9ydGFudGx5LCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaGVyZT8gQ2FuIG1hbGljaW91cyBhY3RvcnMgZXhwbG9pdCB0aGVzZSBjYWxscyB0byBieXBhc3MgcXVvdGEgbGltaXRzLCBjYXVzZSBkZW5pYWwgb2Ygc2VydmljZSwgb3IgbWFuaXB1bGF0ZSBkYXRhPyBLbm93aW5nIHdoZXJlIHRoaXMgY2FsbCBsaXZlcyBpcyBrZXkuIElzIGl0IGluIGNvZGUgdGhhdCBsaXZlcyBvbiB0aGUgc2VydmVyLCBhIGNsaWVudCBvciBpbiBzb21lIG90aGVyIGNvbnRleHQ/IEkgd2FudCB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyBhbiBhdHRhY2sgc3VyZmFjZS4gRXNzZW50aWFsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZW50aXJlIGNhbGwgZ3JhcGgsIHRoZSBhcmd1bWVudHMsIHRoZSB0aW1pbmcsIGFuZCB0aGUgdWx0aW1hdGUgaW1wYWN0IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMjo1Ni4zNDU1OTA3OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTcwNzg0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzIyOT1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI0NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzI0NjpzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjQ3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjk2PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMwOS1cXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG5tbS9kYW1vbi9jb3JlLmM6MzMxMDpcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzExLVxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMjUtXFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxubW0vZGFtb24vY29yZS5jOjMzMjY6XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMyNy1cXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBxdW90YS1cXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODk2PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyOC1cXHQvKiBmcmVzaCBnb2FsLCBmaXJzdCB0dW5pbmcgcm91bmQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTI5OlxcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkzMC1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkzMi1cXHQvKiBzZWNvbmQgcm91bmQ6IGxhc3RfcHNpX3RvdGFsIGlzIGluaXRpYWxpc2VkIG5vdyAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MzM6XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTM0LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVxcdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTM3LVxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGdvYWwsIFxcdTAwMjZzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5Mzg6XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTM5LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVxcdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQ2LVxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsLS07XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk0NzpcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDgtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXFx1MDAzZXF1b3RhLmVzeiwgMHVsKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NTMtXFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgXFx1MDAyNnNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk1NDpcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NTUtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXFx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfMzJLKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NTguNzAyNjc2ODYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MzY2Nzg0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKlRyYWNpbmcgRG93biBhIERBTU9OIFF1b3RhIElzc3VlKipcblxuT2theSwgc28gYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCBhbmQgaXQncyBuZXN0bGVkIGRlZXAgaW4gYG1tL2RhbW9uL2NvcmUuY2AuICBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLCBJIG5lZWQgdG8gc2VlIHdoYXQncyAqY2FsbGluZyogYGRhbW9zX2FkanVzdF9xdW90YWAuIEknbGwgd2FudCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbjsgdW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBnb2luZyB0byBpbGx1bWluYXRlIHRoZSBjaXJjdW1zdGFuY2VzIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uIGFuZCBnaXZlIG1lIHNvbWUgY29udGV4dC4gSXQncyB0aGUgZmlyc3Qgc3RlcCB0byBmaWd1cmluZyBvdXQgYW55IHF1b3RhLXJlbGF0ZWQgcHJvYmxlbXMgdGhhdCBtYXkgYmUgYXJpc2luZyB3aXRoaW4gREFNT04uIFRpbWUgdG8gZGlnIGluIGFuZCBjaGVjayB0aG9zZSBjYWxsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzQ1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MDIuMjM5MzU4Mzc4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk1NTM3OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FkanVzdF9xdW90YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzI4Mj1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyOTUtXFxubW0vZGFtb24vY29yZS5jOjMyOTY6c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMzI5Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzM3Nz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzkyLVxcbm1tL2RhbW9uL2NvcmUuYzozMzkzOlxcdFxcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzM5NC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjA0LjYzNDkwMzAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3NjU2MDE5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIERBTU9OIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBsaXZlcyB3aXRoaW4gdGhlIGBrZGFtb25kX2ZuYCB3b3JrZXIgdGhyZWFkLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBicm9hZGVyIGBrZGFtb25kYCBpbmZyYXN0cnVjdHVyZS4gVGhhdCdzIGdvb2QgdG8ga25vdywgY29udGV4dHVhbGl6ZXMgaXRzIHJvbGUuIFRoZW4gdGhlcmUncyB0aGlzIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluLy4uLmAsIHByb3ZpZGluZyB1c2Vyc3BhY2UgY29udHJvbCBvdmVyIERBTU9OIHF1b3RhcywgZ29hbHMsIGFuZCBzbyBvbi4gTXkgbmV4dCBzdGVwIGhlcmUgaXMgcHJldHR5IGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSByZXZpZXcgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBvcHRpb25zIHRvIGRldGVybWluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbmFibGVtZW50IGNyaXRlcmlhIGZvciBib3RoIERBTU9OIGluIGdlbmVyYWwsIGFuZCBzcGVjaWZpY2FsbHkgdGhpcyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgcmVxdWlyZWQgYXQgY29tcGlsZSB0aW1lIGZvciBhbGwgb2YgdGhpcyB0byBiZSBhdmFpbGFibGUsIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIG1pc3NpbmcuIFRoaXMgaXMgZnVuZGFtZW50YWw7IHVuZGVyc3RhbmRpbmcgdGhlIHByZXJlcXVpc2l0ZXMgdXBmcm9udCBzYXZlcyBhIGxvdCBvZiB3YXN0ZWQgZWZmb3J0IGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTc3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MTQuNDAwNTA3MjI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njg1NDMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzoxNC40NzczNzA2MDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDYzNTY4ODYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29yZSBCdWlsZCBhbmQgUFNJIFF1b3RhIEVuYWJsZW1lbnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIGBjb3JlLmNgIGJ1aWxkIGFuZCB0aG9zZSBQU0kgcXVvdGEgZ29hbHMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCB0aGF0J3Mgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBmb3IgYGNvcmUuY2AgYXJlIGRlZmluZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbnMgb3IgYnVpbGQgZmxhZ3MgcmVsYXRlZCB0byBQU0kgcXVvdGEgaW50ZWdyYXRpb24gd291bGQgYmUuIEkgbmVlZCB0byB0cmFjZSB0aGUgYnVpbGQgcHJvY2VzcyB0byBzZWUgaWYgYGNvcmUuY2AgaXMgYmVpbmcgY29tcGlsZWQgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucyBvciBpZiBpdCdzIGdlbmVyYWxseSBpbmNsdWRlZC4gRnVydGhlcm1vcmUsIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIHJlbGF0ZWQgdG8gUFNJIHF1b3RhIHN1cHBvcnQg4oCTIHBlcmhhcHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MsIG9iamVjdCBmaWxlIGluY2x1c2lvbiwgb3IgbGlua2VyIGRpcmVjdGl2ZXMgdGhhdCBhcmUgdHJpZ2dlcmVkIGJ5IGEgcGFydGljdWxhciBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcydsbCByZXF1aXJlIGEgYml0IG9mIGNyb3NzLXJlZmVyZW5jaW5nIGFuZCBwb3RlbnRpYWxseSBzb21lIGBncmVwYGluZyB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHN1YnRsZS4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgZm9yIGRpYWdub3NpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHVuZGVyc3RhbmRpbmcgaG93IFBTSSBxdW90YSBpbnRlcmFjdGlvbnMgYXJlIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjIxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MTkuMTEzMDYyMjA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjE5LjExMzE0NTgxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDMwNTM1OTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX0RBTU9OYC4gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQsIHNvIEknbGwgZ28gYWhlYWQgYW5kIGNoZWNrIG91dCBgbW0vZGFtb24vS2NvbmZpZ2AuIExldCdzIGdldCBhIGdvb2QgcGljdHVyZSBvZiB0aGUgc2l0dWF0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBmaXJzdCA0MCBsaW5lcyBvZiB0aGUgZmlsZSwganVzdCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQgYW5kIHVuZGVyc3RhbmQgdGhlIGJhc2ljIHN0cnVjdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zLiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgZW5vdWdoIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzozMy40MTg1MDc2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjMzLjQxODU3MTUyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzMzMjk4OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEQU1PTiBTeXNmcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBEQU1PTiDigJMgRHluYW1pYyBBY2Nlc3MgTW9uaXRvcmluZyDigJMgYWdhaW4uIFJpZ2h0LCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgYENPTkZJR19EQU1PTl9TWVNGU2AsIGFuZCB0aGUgcGxhY2UgdG8gbG9vayBmb3IgdGhhdCBpcyB0dWNrZWQgYXdheSBpbiBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG1haW4gZmVhdHVyZSBmbGFncyBmb3IgREFNT04gd2lsbCBiZSBzZXQgdXAuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHZhbHVlIGlzLCBhbmQgb2YgY291cnNlLCB3aGF0J3MgYmVlbiBzYWlkIGluIGNvbW1lbnRzIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBob29rcyBpbnRvIHN5c2ZzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MzUuNzUxODc0MDEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgNjQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgREFNT05fU1lTRlNcXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gIDcxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDcyOlxcdFxcdGhlbHBcXG4gIDczOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxuICA3NDpcXHRcXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDc5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA4MDpcXHRcXHRoZWxwXFxuICA4MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDg0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDg3OlxcdFxcbiAgODg6XFx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG4gIDg5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbiAgOTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG4gIDkzOlxcdFxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbiAgOTQ6XFx0XFx0ICB0aG9zZS5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxcbiAgOTc6XFx0XFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXFxuICA5ODpcXHRcXHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxcbiAgOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjM1Ljc1MTk2NTg0MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzE2NDc2NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFBTSSBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgYGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWxgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIGdyYWJiaW5nIHNvbWUga2luZCBvZiBQU0kgKFByZXNzdXJlIFN0YWxsIEluZm9ybWF0aW9uKSByZWxhdGVkIG1lbW9yeSBkYXRhLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIHRoaW5nIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBmdW5jdGlvbi4gSXMgaXQgaW4gdGhlIG1haW4gY29kZWJhc2UsIG9yIG1heWJlIGEgc2VwYXJhdGUgY29uZmlndXJhdGlvbiBmaWxlPyBJIGhhdmUgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZGVwZW5kZW5jeSBsaWVzIGFuZCBob3cgdGhpcyBQU0kgZGF0YSBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLCB0byBkZXRlcm1pbmUgaXRzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTk4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzozOC4wNjg0NDU0MzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzkwMzQ4MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9Mjg2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9mZWVkX2xvb3BfbmV4dF9pbnB1dCh1bnNpZ25lZCBsb25nIGxhc3RfaW5wdXQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjg5NC1cXG5tbS9kYW1vbi9jb3JlLmM6Mjg5NTpzdGF0aWMgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtMjg5Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjkwNC1cXG5tbS9kYW1vbi9jb3JlLmM6MjkwNTpzdGF0aWMgaW5saW5lIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTI5MDYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNjItXFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XFxubW0vZGFtb24vY29yZS5jOjMxNjM6XFx0XFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzE2NC1cXHRcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDItXFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gMTA7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk0MzpcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKSAtIDEwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDQtXFx0LyogVTY0X01BWCBtYXJrcyBhbiB1bm1lYXN1cmVkIGdvYWwsIGtlZXAgdGhlIHNhbXBsZSBhd2F5IGZyb20gaXQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6NDAuMzQ3NDg3NDM4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2ODAwNTQ5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gREFNT04gQ29yZSdzIEhlYXJ0KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHplcm8gaW4gb24gYSBzcGVjaWZpYyBjaHVuayBvZiBjb2RlIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOiBsaW5lcyAyODkwIHRvIDI5MTUgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIGludGVyZXN0aW5nIG1pZ2h0IGJlIGhhcHBlbmluZyBpbiB0aGF0IHJlZ2lvbjsgcGVyaGFwcyBpdCdzIHJlbGF0ZWQgdG8gYSByZWNlbnQgb2JzZXJ2YXRpb24gb3IgYSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gZGlhZ25vc2UuIEknbSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBzb21ldGhpbmcgc3BlY2lmaWMgaGVyZTogcGVyaGFwcyBEQU1PTidzIGhhbmRsaW5nIG9mIHNwZWNpZmljIGV2ZW50cywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCBvciBtYXliZSB0aGUgbG9naWMgc3Vycm91bmRpbmcgcmVnaW9uIG1hbmFnZW1lbnQgb3IgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhvc2UgbGluZXMsIGFuZCBteSBleHBlcmllbmNlIHRlbGxzIG1lIEknbGwgbGlrZWx5IGJlIGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIHZhcmlhYmxlIGFzc2lnbm1lbnRzIHRoYXQgbWlnaHQgcmV2ZWFsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoYXQgY29kZSBibG9jay4gRnJvbSBwYXN0IGV4cGVyaWVuY2UsIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyBEQU1PTiBpcyBrZWVwaW5nIHRyYWNrIG9mIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgaW4gdGhhdCByYW5nZSwgYW5kIGhvdyBpdCBpcyBtYWtpbmcgZGVjaXNpb25zIGFib3V0IG1lbW9yeSBhY2Nlc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzo0My4wMjc1NDUxNTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODkwOlxcdFxcdHJldHVybiBVTE9OR19NQVg7XFxuMjg5MTpcXHR9XFxuMjg5MjpcXHRcXG4yODkzOlxcdCNpZmRlZiBDT05GSUdfUFNJXFxuMjg5NDpcXHRcXG4yODk1OlxcdHN0YXRpYyB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxcbjI4OTY6XFx0e1xcbjI4OTc6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZwc2lfZGlzYWJsZWQpKVxcbjI4OTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjg5OTpcXHRcXHRyZXR1cm4gZGl2X3U2NChwc2lfc3lzdGVtLnRvdGFsW1BTSV9BVkdTXVtQU0lfTUVNICogMl0sXFxuMjkwMDpcXHRcXHRcXHRcXHROU0VDX1BFUl9VU0VDKTtcXG4yOTAxOlxcdH1cXG4yOTAyOlxcdFxcbjI5MDM6XFx0I2Vsc2VcXHQvKiBDT05GSUdfUFNJICovXFxuMjkwNDpcXHRcXG4yOTA1OlxcdHN0YXRpYyBpbmxpbmUgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcXG4yOTA2OlxcdHtcXG4yOTA3OlxcdFxcdHJldHVybiAwO1xcbjI5MDg6XFx0fVxcbjI5MDk6XFx0XFxuMjkxMDpcXHQjZW5kaWZcXHQvKiBDT05GSUdfUFNJICovXFxuMjkxMTpcXHRcXG4yOTEyOlxcdCNpZmRlZiBDT05GSUdfTlVNQVxcbjI5MTM6XFx0c3RhdGljIGJvb2wgaW52YWxpZF9tZW1fbm9kZShpbnQgbmlkKVxcbjI5MTQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzo0My4wMjc3NzkwMDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAxMDE2NjMzMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRdW90YSBHb2FsIE1ldHJpYyoqXG5cbk9rYXksIHNvIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBraWNrcyBpbiB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBhcyB0aGUgcXVvdGEgZ29hbCBtZXRyaWMuIFJpZ2h0LiBOb3csIHdoZXJlIGlzICp0aGF0KiBtZXRyaWMgYWN0dWFsbHkgYmVpbmcgc2V0PyBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIHN5c2ZzIGFuZCB0cmFjayBkb3duIHRoZSBzb3VyY2Ugb2YgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AuIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGlzIGludGVyYWN0aW9uLiBMZXQncyBzZWUgd2hhdCBzeXNmcyBmaWxlcyBhcmUgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDg3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzo1My4xMjk0NDQ5MDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjE4MzQwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMjg9ZW51bSBkYW1vc19hY3Rpb24ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE0Ni0gKiBAREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcXHRVc2VyLWlucHV0IHZhbHVlLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxNDc6ICogQERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcXHRTeXN0ZW0gbGV2ZWwgc29tZSBtZW1vcnkgUFNJIGluIHVzLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNDgtICogQERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XFx0TWVtVXNlZCByYXRpbyBvZiBhIG5vZGUuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTYxPWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNjItXFx0REFNT1NfUVVPVEFfVVNFUl9JTlBVVCxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTYzOlxcdERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTY0LVxcdERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlAsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Njg4PXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02OTgtXFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlO1xcbm1tL2RhbW9uL2NvcmUuYzo2OTk6XFx0aWYgKG1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXFxubW0vZGFtb24vY29yZS5jLTcwMC1cXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTE5MT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTk0LVxcdHN3aXRjaCAoZHN0LVxcdTAwM2VtZXRyaWMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTE5NTpcXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcXG5tbS9kYW1vbi9jb3JlLmMtMTE5Ni1cXHRcXHRkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMTUzPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTYxLVxcdFxcdGJyZWFrO1xcbm1tL2RhbW9uL2NvcmUuYzozMTYyOlxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbm1tL2RhbW9uL2NvcmUuYy0zMTYzLVxcdFxcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM1LVxcdGlmIChxdW90YV9tZW1fcHJlc3N1cmVfdXMpIHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjM2OlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNy1cXHRcXHRcXHRcXHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMzU9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNDAtXFx0e1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjQxOlxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNDItXFx0XFx0Lm5hbWUgPSBcXFwic29tZV9tZW1fcHNpX3VzXFxcIixcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxNC1cXHRzd2l0Y2ggKGRzdC1cXHUwMDNlbWV0cmljKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxNTpcXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE2LVxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MzI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM0LVxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIGRzdCA9IHtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODM1OlxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgzNi1cXHRcXHQudGFyZ2V0X3ZhbHVlID0gMTAwMCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDItXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NDM6XFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODQ0LVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSAyMzQsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODg0LVxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpIHtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODg1OlxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4Ni1cXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDUtXFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgc3JjID0ge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MDY6XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA3LVxcdFxcdC50YXJnZXRfdmFsdWUgPSBVTE9OR19NQVgsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIwLVxcdGRhbW9uX2FkZF9zY2hlbWUoYywgcyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkyMTpcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLCBVTE9OR19NQVgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjItXFx0aWYgKCFnb2FsKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjU1LjM5MTI5OTg2MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDExNTM3NjQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUZW1wb3JhbCBHb2FsIFR1bmluZyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTGAsIHNwZWNpZmljYWxseSwgaG93IHRoZSBgZ29hbF90dW5lcmAgY29tcG9uZW50IGludGVyYWN0cyB3aXRoaW4gdGhhdCBmcmFtZXdvcmsuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBgREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTGAuIEkgbmVlZCB0byBzb2xpZGlmeSB0aGUgZGV0YWlscyBvZiB0aGUgb3ZlcmFyY2hpbmcgc3RydWN0dXJlIGJlZm9yZSBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgYmVoYXZpb3Igb2YgdGhlIGBnb2FsX3R1bmVyYC4gTGV0IG1lIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHdob2xlIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMzMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjA5LjUwNjY3OTIzNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMTc5OTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xOTg9c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyMC0gKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOlxcdEFpbSBsb25nIHRlcm0gY29uc2lzdGVudCBxdW90YS5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MjIxOiAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMOlxcdEFpbSB6ZXJvIHF1b3RhIGFzYXAuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyMi0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MjIzPWVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyNC1cXHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjIyNTpcXHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMjYtfTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMTUzPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTY2LVxcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5nb2FsX3R1bmVyID09XFxubW0vZGFtb24vY29yZS5jOjMxNjc6XFx0XFx0XFx0XFx0XFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcXG5tbS9kYW1vbi9jb3JlLmMtMzE2OC1cXHRcXHRcXHRcXHQvKiBhbiBhY2hpZXZlZCBzY29yZSB3b3VsZCB6ZXJvIHRoZSB0ZW1wb3JhbCBxdW90YSAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyNDY9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjYwLVxcdFxcdFxcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChjdHgsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYzozMjYxOlxcdFxcdGVsc2UgaWYgKHF1b3RhLVxcdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXFxubW0vZGFtb24vY29yZS5jLTMyNjItXFx0XFx0XFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChjdHgsIHMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4MjI9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF90dW5lcl9uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWVzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgyNy1cXHR7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4Mjg6XFx0XFx0LnR1bmVyID0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgyOS1cXHRcXHQubmFtZSA9IFxcXCJ0ZW1wb3JhbFxcXCIsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODk2PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkwMS1cXHRcXHQuc3ogPSBTWl82NEssXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkwMjpcXHRcXHQuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkwMy1cXHR9O1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTEwNDk9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGEoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNjUtXFx0XFx0LnN6ID0gOSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTA2NjpcXHRcXHQuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNjctXFx0XFx0LmZhaWxfY2hhcmdlX251bSA9IDEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjEyLjIyODQ4MzYxNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1Njk0OTgzODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyB0dW5pbmcgcHJvY2Vzcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBhbGwgdW5mb2xkcy5cblxuKipEaWdnaW5nIGludG8gdGhlIERBTU9OIFR1bmluZyBQcm9jZXNzKipcblxuUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIHR1bmluZyBvZiB0aGlzIERBTU9OIHN5c3RlbSwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGZvdXIga2V5IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYDogYGRhbW9zX3F1b3RhX3Njb3JlYCwgYGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWxgLCBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0YCwgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYC4gVGhlc2Ugc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgaW5zaWdodHMgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHF1b3RhcyBhbmQgZ29hbCBhZGp1c3RtZW50cyBhcmUgd29ya2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyYWN0IHRvIHJlZmluZSB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgZGVjaXNpb25zLiBLbm93aW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ1NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjE3LjkyMzQ3MDM0M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyMDA6XFx0XFx0fVxcbjMyMDE6XFx0fVxcbjMyMDI6XFx0XFxuMzIwMzpcXHQvKiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmUgc2luY2UgaXQgbWFrZXMgc2NoZW1lcyBsZWFzdCBhZ2dyZXNzaXZlICovXFxuMzIwNDpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuMzIwNTpcXHR7XFxuMzIwNjpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4zMjA3OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMzIwODpcXHRcXHR1bnNpZ25lZCBsb25nIGhpZ2hlc3Rfc2NvcmUgPSAwO1xcbjMyMDk6XFx0XFxuMzIxMDpcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XFxuMzIxMTpcXHRcXHRcXHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xcbjMyMTI6XFx0XFx0XFx0aGlnaGVzdF9zY29yZSA9IG1heChoaWdoZXN0X3Njb3JlLFxcbjMyMTM6XFx0XFx0XFx0XFx0XFx0bXVsdF9mcmFjKGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUsIDEwMDAwLFxcbjMyMTQ6XFx0XFx0XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKSk7XFxuMzIxNTpcXHRcXHR9XFxuMzIxNjpcXHRcXG4zMjE3OlxcdFxcdHJldHVybiBoaWdoZXN0X3Njb3JlO1xcbjMyMTg6XFx0fVxcbjMyMTk6XFx0XFxuMzIyMDpcXHRzdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMyMjE6XFx0e1xcbjMyMjI6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4zMjIzOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2NvcmUgPSBkYW1vc19xdW90YV9zY29yZShjLCBzKTtcXG4zMjI0OlxcdFxcbjMyMjU6XFx0XFx0cXVvdGEtXFx1MDAzZWVzel9icCA9IGRhbW9uX2ZlZWRfbG9vcF9uZXh0X2lucHV0KFxcbjMyMjY6XFx0XFx0XFx0XFx0bWF4KHF1b3RhLVxcdTAwM2Vlc3pfYnAsIDEwMDAwVUwpLCBzY29yZSk7XFxuMzIyNzpcXHR9XFxuMzIyODpcXHRcXG4zMjI5OlxcdHN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4zMjMwOlxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG4zMjMxOlxcdHtcXG4zMjMyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMzIzMzpcXHRcXHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XFxuMzIzNDpcXHRcXG4zMjM1OlxcdFxcdGlmIChzY29yZSBcXHUwMDNlPSAxMDAwMClcXG4zMjM2OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2Vlc3pfYnAgPSAwO1xcbjMyMzc6XFx0XFx0ZWxzZSBpZiAocXVvdGEtXFx1MDAzZXN6KVxcbjMyMzg6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWVzel9icCA9IHF1b3RhLVxcdTAwM2VzeiAqIDEwMDAwO1xcbjMyMzk6XFx0XFx0ZWxzZVxcbjMyNDA6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWVzel9icCA9IFVMT05HX01BWDtcXG4zMjQxOlxcdH1cXG4zMjQyOlxcdFxcbjMyNDM6XFx0LypcXG4zMjQ0OlxcdCAqIENhbGxlZCBvbmx5IGlmIHF1b3RhLVxcdTAwM2Vtcywgb3IgcXVvdGEtXFx1MDAzZXN6IGFyZSBzZXQsIG9yIHF1b3RhLVxcdTAwM2Vnb2FscyBpcyBub3QgZW1wdHlcXG4zMjQ1OlxcdCAqL1xcbjMyNDY6XFx0c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG4zMjQ3OlxcdHtcXG4zMjQ4OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMzI0OTpcXHRcXHR1bnNpZ25lZCBsb25nIHRocm91Z2hwdXQ7XFxuMzI1MDpcXHRcXHR1bnNpZ25lZCBsb25nIGVzeiA9IFVMT05HX01BWDtcXG4zMjUxOlxcdFxcdHVuc2lnbmVkIGxvbmcgZXN6X3RpbWU7XFxuMzI1MjpcXHRcXG4zMjUzOlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZW1zIFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnF1b3RhLVxcdTAwM2Vnb2FscykpIHtcXG4zMjU0OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2Vlc3ogPSBxdW90YS1cXHUwMDNlc3o7XFxuMzI1NTpcXHRcXHRcXHRyZXR1cm47XFxuMzI1NjpcXHRcXHR9XFxuMzI1NzpcXHRcXG4zMjU4OlxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSkge1xcbjMyNTk6XFx0XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVClcXG4zMjYwOlxcdFxcdFxcdFxcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChjdHgsIHMpO1xcbjMyNjE6XFx0XFx0XFx0ZWxzZSBpZiAocXVvdGEtXFx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcXG4zMjYyOlxcdFxcdFxcdFxcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoY3R4LCBzKTtcXG4zMjYzOlxcdFxcdFxcdGVzeiA9IHF1b3RhLVxcdTAwM2Vlc3pfYnAgLyAxMDAwMDtcXG4zMjY0OlxcdFxcdH1cXG4zMjY1OlxcdFxcbjMyNjY6XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2Vtcykge1xcbjMyNjc6XFx0XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX25zKVxcbjMyNjg6XFx0XFx0XFx0XFx0dGhyb3VnaHB1dCA9IG11bHRfZnJhYyhxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeixcXG4zMjY5OlxcdFxcdFxcdFxcdFxcdFxcdDEwMDAwMDAsIHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX25zKTtcXG4zMjcwOlxcdFxcdFxcdGVsc2VcXG4zMjcxOlxcdFxcdFxcdFxcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xcbjMyNzI6XFx0XFx0XFx0ZXN6X3RpbWUgPSBtYXgodGhyb3VnaHB1dCAqIHF1b3RhLVxcdTAwM2VtcywgY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4zMjczOlxcdFxcdFxcdGVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTtcXG4zMjc0OlxcdFxcdH1cXG4zMjc1OlxcdFxcbjMyNzY6XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2VzeiBcXHUwMDI2XFx1MDAyNiBxdW90YS1cXHUwMDNlc3ogXFx1MDAzYyBlc3opXFxuMzI3NzpcXHRcXHRcXHRlc3ogPSBxdW90YS1cXHUwMDNlc3o7XFxuMzI3ODpcXHRcXG4zMjc5OlxcdFxcdHF1b3RhLVxcdTAwM2Vlc3ogPSBlc3o7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjE3LjkyMzY1MzAzM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTM2NjAxODgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIERBTU9OIFF1b3RhIElzc3VlIGFuZCBXb3J0aEZ1enppbmcgRGV0ZXJtaW5hdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkndmUgaWRlbnRpZmllZCBhIGJ1ZyBpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHF1b3RhIGltcGxlbWVudGF0aW9uIHJlbGF0ZWQgdG8gaG93IFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pIGlzIGhhbmRsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIHdoZW4gYSBQU0ktYmFzZWQgcXVvdGEgZ29hbCBpcyB1bmluaXRpYWxpemVkIChpLmUuLCBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgaXMgc2V0IHRvIGBVNjRfTUFYYCksIHRoZSBleGlzdGluZyBjb2RlIHdhcyBsZWFkaW5nIHRvIGFuIGltbWVkaWF0ZSBkaXNhYmxpbmcgb2YgdGhlIHF1b3RhLiBUaGUgaW5pdGlhbCBsb2dpYyB3YXMgc2V0dGluZyB0aGUgY3VycmVudCB2YWx1ZSBlcXVhbCB0byB0aGUgdGFyZ2V0IHZhbHVlIGlmIGxhc3RfcHNpX3RvdGFsIHdhcyBlcXVhbCB0byBVNjRfTUFYLiBBbmQgc2luY2UgdGhlIGNvZGUgd2FzIGludGVuZGVkIGZvciBQU0kgdHJhY2tpbmcsIHRoZSBsb2dpYyB3b3VsZCBjYXVzZSBhbiBpc3N1ZSBpbiB3aGljaCB0aGUgZXN6X2JwIHZhbHVlIHdpbGwgYmUgc2V0IHRvIDAuXG5cblRoZSBmaXggYWRkcmVzc2VzIHRoaXMgYnkgc2V0dGluZyB0aGUgYGN1cnJlbnRfdmFsdWVgIHRvIGAwYCBpZiB0aGUgZ29hbCB0dW5lciBpcyBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLiBUaGlzIHByZXZlbnRzIHRoZSBzY29yZSBjYWxjdWxhdGlvbiBmcm9tIHRyaWdnZXJpbmcgdGhlIHF1b3RhIGRpc2FibGUgb24gdGhlIGZpcnN0IHJvdW5kLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBmaXggd29ydGggZnV6emluZz9cblxuTGV0J3MgYXBwbHkgdGhlIHRyaWFnZSBjcml0ZXJpYSBJIGhhdmUgaW4gbWluZC4gVGhlIGNyaXRlcmlhIHN0YXRlcyB0aGF0IHJlYWNoYWJpbGl0eSBpcyBrZXkgYW5kIHRoYXQgbW9kaWZpY2F0aW9ucyBpbiBgbW0vYCBzdWJzeXN0ZW1zIGFyZSBoaWdobHkgcmVsZXZhbnQuIFRoZSBmaXggZGlyZWN0bHkgdG91Y2hlcyBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggZmFsbHMgc3F1YXJlbHkgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL2ApIHN1YnN5c3RlbS4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhICpwb3RlbnRpYWxseSogaGlnaC1wcmlvcml0eSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgbGluZSBvZiByZWFzb25pbmcgaXMgdG8gZGV0ZXJtaW5lIGlmIERBTU9OIGl0c2VsZiBpcyByZWFjaGFibGUuIFRoZSBjcml0ZXJpYSBzYXkgZnV6emluZyBpcyB1c2VmdWwgaWYgY29kZSBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEknbSBhd2FyZSB0aGF0IERBTU9OIGlzIGRlc2lnbmVkIHRvIGJlIGFjY2Vzc2libGUgdmlhIHN5c2ZzIGludGVyZmFjZXMgKHNwZWNpZmljYWxseSwgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2ApIGFuZCBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHN5c2ZzLiBUaGlzIGlzIHZlcnkgcmVsZXZhbnQgYmVjYXVzZSB0aGUgY3JpdGVyaWEgYWxzbyBzdGF0ZSB0aGF0IEkgbmVlZCB0byBjaGVjayBpZiB0aGUgY29kZSBpbiBxdWVzdGlvbiBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIEFuZCBEQU1PTiB1c2VzIFFFTVUgb24gYW1kNjQgd2l0aG91dCBzcGVjaWFsaXplZCBoYXJkd2FyZS5cblxuU3l6a2FsbGVyIHByb3ZpZGVzIGdlbmVyaWMgZmlsZSBvcGVyYXRpb25zIC8gc3lzZnMgd3JpdGVzLiBTbywgdGhlIHBhdGNoIHNlZW1zIHJlYWNoYWJsZSBmcm9tIHN5emthbGxlci5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEV4YW1pbmluZyB0aGUgS2NvbmZpZyBmaWxlcywgSSBzZWU6XG5cbjEuICBgREFNT05gIG5lZWRzIHRvIGJlIGVuYWJsZWQuXG4yLiAgYERBTU9OX1NZU0ZTYCBpcyBhbHNvIHJlcXVpcmVkIGZvciBzeXNmcyBpbnRlcmFjdGlvbi5cbjMuICBgUFNJYCBpcyB1c2VkIGJ5IHRoZSBEQU1PUyBxdW90YSBpbXBsZW1lbnRhdGlvbiwgYnV0IHRoZSBjb2RlIHN0aWxsIGNvbXBpbGVzIHdpdGhvdXQgUFNJIGFuZCByZXR1cm5zIDAuXG5cblNvLCBJIHdpbGwgY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIGlzIHdvcnRod2hpbGUgdG8gZnV6ei5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwMDAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6MzMuMjg5Njc1Mzk1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI3MjAzMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQU0lcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9NzE1PWNvbmZpZyBUQVNLX0lPX0FDQ09VTlRJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy03MjMtXFxuaW5pdC9LY29uZmlnOjcyNDpjb25maWcgUFNJXFxuaW5pdC9LY29uZmlnLTcyNS1cXHRib29sIFxcXCJQcmVzc3VyZSBzdGFsbCBpbmZvcm1hdGlvbiB0cmFja2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6MzUuNzE2ODg1MzQyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5MTM1ODM4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiB3aGF0IEknbSBsb29raW5nIGF0LCBteSBndXQgZmVlbGluZyB0ZWxscyBtZSB0byBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSSdtIHRoaW5raW5nIHRoYXQgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDcyNCBtaWdodCBob2xkIHNvbWUgY2x1ZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHdoYXQgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdCdzIGEgYnJvYWQgc3RhcnRpbmcgcG9pbnQsIGJ1dCBgaW5pdC9LY29uZmlnYCBpcyBvZnRlbiB0aGUgcGxhY2UgdG8gZ28gd2hlbiBkZWFsaW5nIHdpdGggY29yZSBrZXJuZWwgaW5pdGlhbGl6YXRpb24gb3IgZ2VuZXJhbCBidWlsZCBvcHRpb25zLCBhbmQgbGluZSA3MjQgZmVlbHMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gYmVnaW4gdGhlIGludmVzdGlnYXRpb24uIEknbGwgbmVlZCB0byB1c2UgbXkgZWRpdG9yIGFuZCBkbyBzb21lIGNvbnRleHQtYXdhcmUgc2VhcmNoaW5nIHdpdGhpbiB0aGF0IGxpbmUgYW5kIGl0cyBzdXJyb3VuZGluZyBsaW5lcyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IEkgYW0gbG9va2luZyBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNDozOC42MzA0NzkzOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTczODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyMDpcXHRcXHQgIHRhc2sgaGFzIGNhdXNlZC5cXG4gNzIxOlxcdFxcbiA3MjI6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuIDcyMzpcXHRcXG4gNzI0OlxcdGNvbmZpZyBQU0lcXG4gNzI1OlxcdFxcdGJvb2wgXFxcIlByZXNzdXJlIHN0YWxsIGluZm9ybWF0aW9uIHRyYWNraW5nXFxcIlxcbiA3MjY6XFx0XFx0c2VsZWN0IEtFUk5GU1xcbiA3Mjc6XFx0XFx0aGVscFxcbiA3Mjg6XFx0XFx0ICBDb2xsZWN0IG1ldHJpY3MgdGhhdCBpbmRpY2F0ZSBob3cgb3ZlcmNvbW1pdHRlZCB0aGUgQ1BVLCBtZW1vcnksXFxuIDcyOTpcXHRcXHQgIGFuZCBJTyBjYXBhY2l0eSBhcmUgaW4gdGhlIHN5c3RlbS5cXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGtlcm5lbCB3aWxsIGNyZWF0ZSAvcHJvYy9wcmVzc3VyZS8gd2l0aCB0aGVcXG4gNzMyOlxcdFxcdCAgcHJlc3N1cmUgc3RhdGlzdGljcyBmaWxlcyBjcHUsIG1lbW9yeSwgYW5kIGlvLiBUaGVzZSB3aWxsIGluZGljYXRlXFxuIDczMzpcXHRcXHQgIHRoZSBzaGFyZSBvZiB3YWxsdGltZSBpbiB3aGljaCBzb21lIG9yIGFsbCB0YXNrcyBpbiB0aGUgc3lzdGVtIGFyZVxcbiA3MzQ6XFx0XFx0ICBkZWxheWVkIGR1ZSB0byBjb250ZW50aW9uIG9mIHRoZSByZXNwZWN0aXZlIHJlc291cmNlLlxcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHQgIEluIGtlcm5lbHMgd2l0aCBjZ3JvdXAgc3VwcG9ydCwgY2dyb3VwcyAoY2dyb3VwMiBvbmx5KSB3aWxsXFxuIDczNzpcXHRcXHQgIGhhdmUgY3B1LnByZXNzdXJlLCBtZW1vcnkucHJlc3N1cmUsIGFuZCBpby5wcmVzc3VyZSBmaWxlcyxcXG4gNzM4OlxcdFxcdCAgd2hpY2ggYWdncmVnYXRlIHByZXNzdXJlIHN0YWxscyBmb3IgdGhlIGdyb3VwZWQgdGFza3Mgb25seS5cXG4gNzM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNDozOC42MzA2Mzk0MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NDg0MTY5MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBiZWZvcmUgd2UgZ28gYW55IGZ1cnRoZXIsIGxldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgREFNT04gbWlnaHQgbmVjZXNzaXRhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGJleW9uZCB3aGF0IHdlJ3ZlIGFscmVhZHkgY29uc2lkZXJlZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFzc29jaWF0ZWQgYWRkcmVzcy1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIOKAkyBzb21ldGhpbmcgbGlrZSBgREFNT05fUEFERFJgIG9yIGBEQU1PTl9WQUREUmAgbWlnaHQgYmUgcmVsZXZhbnQuIFRvIGNsYXJpZnkgdGhpcywgSSdsbCBkaXZlIGludG8gYG1tL2RhbW9uL0tjb25maWdgIHRvIGdldCBhIGRlZmluaXRpdmUgb3ZlcnZpZXcgb2YgdGhlIGF2YWlsYWJsZSBzZXR0aW5ncyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgbW9zdCBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQncyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1NzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjQ2LjExNDgxMDc2OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNDo0Ni4xMTQ4OTAxNzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDc4Njk3MzgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04ncyBGb2N1cyBTeW1ib2wgU2VsZWN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgRm9jdXNTeW1ib2wgc2VsZWN0aW9uIHByb2Nlc3MuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgZnVuY3Rpb24gd2UncmUgaW50ZXJlc3RlZCBpbiwgdGhlIG9uZSBtb2RpZmllZCwgaXMgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSG1tLCBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCdzIHN0YXRpYy4gWWVzLCBpdCBpczogYHN0YXRpYyB2b2lkYC4gVGhhdCByYWlzZXMgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSBpdC4gV29ydGggaW52ZXN0aWdhdGluZy5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQncyBjYWxsZWQgd2l0aGluIGBkYW1vc19xdW90YV9zY29yZWAuIEkgc2VlIHRoYXQgYGRhbW9zX3F1b3RhX3Njb3JlYCB0aGVuIGZlZWRzIGludG8gYGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdGAgYW5kIGBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsYC4gVGhlc2UsIGluIHR1cm4sIGFyZSBjYWxsZWQgYnkgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGRhbW9zX2FkanVzdF9xdW90YWAsIGFuZCBmaW5hbGx5IGJ5IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBUaGF0IGdpdmVzIGEgbmljZSBjYWxsIHN0YWNrLlxuXG5Ob3csIHdoZXJlIGFyZSB0aGUgZ29hbHMgY29uZmlndXJlZCBmcm9tIHN5c2ZzPyBJIG5lZWQgdG8gY2hlY2sgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODE4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6NTAuOTAxODY3MjMzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY0ODA1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfZ29hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NjgyPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02ODctXFxubW0vZGFtb24vY29yZS5jOjY4ODpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jOjY4OTpcXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG5tbS9kYW1vbi9jb3JlLmMtNjkwLVxcdFxcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKVxcbm1tL2RhbW9uL2NvcmUuYy02OTEte1xcbm1tL2RhbW9uL2NvcmUuYzo2OTI6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vY29yZS5jLTY5My1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MDQtXFxubW0vZGFtb24vY29yZS5jOjcwNTp2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxubW0vZGFtb24vY29yZS5jLTcwNi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzA5LVxcbm1tL2RhbW9uL2NvcmUuYzo3MTA6c3RhdGljIHZvaWQgZGFtb3NfZGVsX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxubW0vZGFtb24vY29yZS5jLTcxMS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzE0LVxcbm1tL2RhbW9uL2NvcmUuYzo3MTU6c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy03MTYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTcxOS1cXG5tbS9kYW1vbi9jb3JlLmM6NzIwOnZvaWQgZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy03MjEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTcyNS1cXG5tbS9kYW1vbi9jb3JlLmM6NzI2OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHN0cnVjdCBkYW1vc19xdW90YSAqcSlcXG5tbS9kYW1vbi9jb3JlLmMtNzI3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04MTQ9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTgxNS17XFxubW0vZGFtb24vY29yZS5jOjgxNjpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZywgKmdfbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmMtODE3LVxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmYsICpuZXh0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExNjY9dm9pZCBkYW1vbl9zZXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqKnNjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ny1cXG5tbS9kYW1vbi9jb3JlLmM6MTE3ODpzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX250aF9xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTc5LVxcdFxcdGludCBuLCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEpXFxubW0vZGFtb24vY29yZS5jLTExODAte1xcbm1tL2RhbW9uL2NvcmUuYzoxMTgxOlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTgyLVxcdGludCBpID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTkxPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbm1tL2RhbW9uL2NvcmUuYzoxMTkyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExOTMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyMTU9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmM6MTIxNjpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjE3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMjQwPWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjQxLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTI0MjpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDtcXG5tbS9kYW1vbi9jb3JlLmMtMTI0My1cXHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTg3OT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODgyLVxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbm1tL2RhbW9uL2NvcmUuYzoxODgzOlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy0xODg0LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI0MDc9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQwOS1cXHRyZXR1cm4gcXVvdGEtXFx1MDAzZWVzeiB8fCBxdW90YS1cXHUwMDNlc3ogfHwgcXVvdGEtXFx1MDAzZW1zIHx8XFxubW0vZGFtb24vY29yZS5jOjI0MTA6XFx0XFx0IWRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQxMS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjkxOD1zdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxubW0vZGFtb24vY29yZS5jOjI5MTk6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxubW0vZGFtb24vY29yZS5jLTI5MjAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5NDY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG5tbS9kYW1vbi9jb3JlLmM6Mjk0NzpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG5tbS9kYW1vbi9jb3JlLmMtMjk0OC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzEwMD1zdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxubW0vZGFtb24vY29yZS5jOjMxMDE6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxubW0vZGFtb24vY29yZS5jLTMxMDIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxMDY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG5tbS9kYW1vbi9jb3JlLmM6MzEwNzpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG5tbS9kYW1vbi9jb3JlLmMtMzEwOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzE1Mz1zdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jOjMxNTQ6XFx0XFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG5tbS9kYW1vbi9jb3JlLmMtMzE1NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIwND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMyMDUte1xcbm1tL2RhbW9uL2NvcmUuYzozMjA2OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjA3LVxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTIyOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzMS17XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzI6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzMtXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk5LVxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMDA6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vcmVjbGFpbS5jLTIwMS1cXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIxNT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTYtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxNzpcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxOC1cXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjI5PXN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMzA6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzEtXFx0Y2hhciAqbmFtZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNjg0PXN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTEtXFx0dW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfc3o7XFx0LyogRWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMgKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY5MjpcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgZ29hbF90dW5lcjtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5My1cXHR1bnNpZ25lZCBpbnQgZmFpbF9jaGFyZ2VfbnVtO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4MTc9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODE4OlxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB0dW5lcjtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxOS1cXHRjaGFyICpuYW1lO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg1NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NTU6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NTYtXFx0aW50IGksIGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk4PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MDctXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTA4OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTA5LVxcdFxcdGludCBlcnI7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODA0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODA1OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgwNjpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDcte1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzMj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODMzLXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODM0OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIGRzdCA9IHtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM1LVxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODQxLVxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg0MjpcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0My1cXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0OC1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NDk6XFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1MC1cXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTMtXFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODU0OlxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTUtXFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODYwLVxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg2MTpcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODYyLVxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQLFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2Ny1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Njg6XFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2OS1cXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQLFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3NS1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NzY6XFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3Ny1cXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQLFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4My1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4ODQ6XFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04ODUtXFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA0LVxcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcyA9IHt9O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MDU6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgc3JjID0ge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDYtXFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDgtXFx0fTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTA5OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MTAtXFx0c3RydWN0IGRhbW9zICpzO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTk2MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NjE6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FscywgaW50IG5yX2RzdF9nb2FscyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTYyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmNfZ29hbHMsIGludCBucl9zcmNfZ29hbHMpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk2My17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk2NC1cXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgZHN0LCBzcmM7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk2NTpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCwgKm5leHQ7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk2Ni1cXHRib29sIHNraXAgPSB0cnVlO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTEwMTQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMTYtXFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHRlc3QsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwMTc6XFx0XFx0XFx0KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsW10pe30sIDAsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwMTg6XFx0XFx0XFx0KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsW10pe1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDE5LVxcdFxcdFxcdFxcdHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDI0LVxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2Zvcih0ZXN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDI1OlxcdFxcdFxcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAyNi1cXHRcXHRcXHRcXHR7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAzMS1cXHRcXHRcXHR9LCAxLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDMyOlxcdFxcdFxcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAzMy1cXHRcXHRcXHRcXHR7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAzOC1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3IodGVzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTAzOTpcXHRcXHRcXHQoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxbXSl7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNDAtXFx0XFx0XFx0XFx0e1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNDUtXFx0XFx0XFx0fSwgMSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTA0NjpcXHRcXHRcXHQoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxbXSl7fSwgMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNDo1MS4wMTgzNTUxMDRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQwNTAyNTUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIFF1b3RhIFNjb3JlIFNldHRlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHdlIG5lZWQgdG8gZXhhbWluZSwgYXMgaXQncyBkZWZpbmVkIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgbGV0J3MgdHJhY2UgZXhhY3RseSB3aGF0IHRoaXMgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGZ1bmN0aW9uICpkb2VzKi5cIiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBoYW5kbGluZyB0aGUgcXVvdGEgc2NvcmVzIHdpdGhpbiB0aGUgREFNT04gc3lzdGVtIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGF0IGhhcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxMzcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNDo1Ny40MjMzODI2ODdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODkwOlxcdFxcdFxcdGRlZmF1bHQ6XFxuMjg5MTpcXHRcXHRcXHRcXHRicmVhaztcXG4yODkyOlxcdFxcdFxcdH1cXG4yODkzOlxcdFxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKHF1b3RhLCBnb2FsKTtcXG4yODk0OlxcdFxcdH1cXG4yODk1OlxcdFxcdHJldHVybiAwO1xcbjI4OTY6XFx0fVxcbjI4OTc6XFx0XFxuMjg5ODpcXHRpbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4yODk5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4yOTAwOlxcdHtcXG4yOTAxOlxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbjI5MDI6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge307XFxuMjkwMzpcXHRcXHRpbnQgaSA9IDA7XFxuMjkwNDpcXHRcXG4yOTA1OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZxdW90YS5nb2Fscyk7XFxuMjkwNjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcXG4yOTA3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnN5c2ZzX3NjaGVtZTtcXG4yOTA4OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xcbjI5MDk6XFx0XFx0XFx0aW50IGVycjtcXG4yOTEwOlxcdFxcbjI5MTE6XFx0XFx0XFx0LyogdXNlciBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlIHNjaGVtZSBzeXNmcyBkaXIgKi9cXG4yOTEyOlxcdFxcdFxcdGlmIChpIFxcdTAwM2U9IHN5c2ZzX3NjaGVtZXMtXFx1MDAzZW5yKVxcbjI5MTM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjkxNDpcXHRcXG4yOTE1OlxcdFxcdFxcdHN5c2ZzX3NjaGVtZSA9IHN5c2ZzX3NjaGVtZXMtXFx1MDAzZXNjaGVtZXNfYXJyW2ldO1xcbjI5MTY6XFx0XFx0XFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3NjaGVtZS1cXHUwMDNlcXVvdGFzLVxcdTAwM2Vnb2FscyxcXG4yOTE3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZxdW90YSk7XFxuMjkxODpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMjkxOTpcXHRcXHRcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcXHUwMDI2cXVvdGEpXFxuMjkyMDpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XFxuMjkyMTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI5MjI6XFx0XFx0XFx0fVxcbjI5MjM6XFx0XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBcXHUwMDI2cXVvdGEpO1xcbjI5MjQ6XFx0XFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXFx1MDAyNnF1b3RhKVxcbjI5MjU6XFx0XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xcbjI5MjY6XFx0XFx0XFx0aWYgKGVycilcXG4yOTI3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjkyODpcXHRcXHRcXHRpKys7XFxuMjkyOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjU3LjQyMzUyOTYxN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjg0ODE0MTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgLiBJdCdzIGNhbGxlZCBieSBgZGFtb3NfcXVvdGFfc2NvcmVgLCB3aGljaCBpcyBpdHNlbGYgaW52b2tlZCBkdXJpbmcgREFNT04gcnVudGltZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2RhbW9uZGAuIFRoYXQncyB0aHJvdWdoIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIC1cdTAwM2UgYGRhbW9zX2FkanVzdF9xdW90YWAgLVx1MDAzZSBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgLVx1MDAzZSBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAgLyBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0YCAtXHUwMDNlIGBkYW1vc19xdW90YV9zY29yZWAgLVx1MDAzZSBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAuIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyByZWFjaGVkIHdoZW4gc3lzZnMgaXMgd3JpdHRlbiB0byBhZGp1c3QgREFNT1Mgc2V0dGluZ3MuIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBkaXJlY3RseSBzZXRzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0eXBpY2FsIGVudmlyb25tZW50cy4gQWgsIGl0IHNlZW1zIERBTU9OIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBubyBleG90aWMgaGFyZHdhcmUgaXMgbmVlZGVkLCB3aGljaCBtZWFucyBpdCdzIHByZXR0eSBhY2Nlc3NpYmxlIGZvciB0ZXN0aW5nLlxuXG5Ob3csIGRvZXMgaXQgdG91Y2ggY29yZSBzdWJzeXN0ZW1zPyBZZXMsIGBtbS9kYW1vbi9gIGxpdmVzIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL2ApLCBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBpbXBvcnRhbnQuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgcXVvdGEgY2FsY3VsYXRpb25zIHdoZW4gdGhlIG1ldHJpYyBpcyBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBhbmQgdGhlIHR1bmVyIGlzIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYC4gVGhpcyBhbGlnbnMgd2l0aCB0aGUgXCJDb3JlIFN1YnN5c3RlbXNcIiBjcml0ZXJpYSwgYW5kIHRoZXJlZm9yZSwgV29ydGhGdXp6aW5nPXRydWUuXG5cbkxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uOlxuKiAgIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYFxuKiAgIGBkYW1vc19xdW90YV9zY29yZWBcbiogICBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWBcbiogICBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGBcbiogICBgZGFtb3NfYWRqdXN0X3F1b3RhYFxuXG5BcmUgdGhlc2UgZnVuY3Rpb25zIGxpa2VseSB0byBiZSBldmVyeXdoZXJlPyBObywgdGhlc2Ugc2VlbSBzcGVjaWZpYyB0byBEQU1PTiBhbmQgREFNT1MsIG5vdCB1YmlxdWl0b3VzIG1lbW9yeSBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuXG5cbk5vdywgdGhlIGVuYWJsZW1lbnQgY29uZmlncy4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlncyBhcmUgZW5hYmxlZDpcblxuKiAgIGBEQU1PTmAgKHRoZSBiYXNlKVxuKiAgIGBEQU1PTl9TWVNGU2AgKHVzZXItc3BhY2UgY29udHJvbCB0aHJvdWdoIHN5c2ZzKVxuKiAgIGBQU0lgIChQcmVzc3VyZSBTdGFsbCBJbmZvcm1hdGlvbiBiZWNhdXNlIG9mIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgKVxuXG5IbW0sIGEgcXVpY2sgbm90ZSwgSSB3b25kZXIgaWYgYERBTU9OX1BBRERSYCBvciBgREFNT05fVkFERFJgIGFyZSBwcmVyZXF1aXNpdGVzPyBJIHNob3VsZCBjaGVjayBga2RhbW9uZF9mbmAgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdG8gc2VlIGhvdyBEQU1PTiBzY2hlbWVzIHdvcmsgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5ODIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNToxNC4yNzE2NzQ4OThaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTQ4NjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZGFtb25kX2ZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwNS0gKiBiZSBjYWxsZWQgZnJvbSBhIHNhZmUgY29udGV4dHMuICBTdWNoIGNvbnRleHRzIGluY2x1ZGUgZGFtb25fY3R4IHNldHVwIHRpbWVcXG5tbS9kYW1vbi9jb3JlLmM6MTEwNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTA3LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxubW0vZGFtb24vY29yZS5jOjExMTE6ICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXFxubW0vZGFtb24vY29yZS5jLTExMTItICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTE4PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNDQtXFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6MTE0NTpcXHQgKiBuZXh0X2ludGVydmFsc190dW5lX3NpcyB3aWxsIGJlIHVwZGF0ZWQgaW5zaWRlIGtkYW1vbmRfZm4oKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cXHQgKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDM4LVxcbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjA0MC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA1Ni1cXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xcbm1tL2RhbW9uL2NvcmUuYzoyMDU3OlxcdFxcdGN0eC1cXHUwMDNla2RhbW9uZCA9IGt0aHJlYWRfcnVuKGtkYW1vbmRfZm4sIGN0eCwgXFxcImtkYW1vbmQuJWRcXFwiLFxcbm1tL2RhbW9uL2NvcmUuYy0yMDU4LVxcdFxcdFxcdFxcdG5yX3J1bm5pbmdfY3R4cyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjE1MT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2N0eHM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MjE1NjpcXHRcXHQvKiBucl9ydW5uaW5nX2N0eHMgaXMgZGVjcmVtZW50ZWQgaW4ga2RhbW9uZF9mbiAqL1xcbm1tL2RhbW9uL2NvcmUuYy0yMTU3LVxcdFxcdF9fZGFtb25fc3RvcChjdHhzW2ldKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zODg4PXN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5MDktICovXFxubW0vZGFtb24vY29yZS5jOjM5MTA6c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxubW0vZGFtb24vY29yZS5jLTM5MTEte1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE4NzY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTkwMi0gKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTkwMzogKiBjb21taXQgMzNjM2Y2YzJiNDhjIChcXFwibW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlXFxcIilcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTkwNC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDU6MTQuNDAxMTcxOTU3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1ODk4NzA1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBEQU1PTidzIFN5c2ZzIEludGVyZmFjZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIERBTU9OIGluaXRpYWxpemF0aW9uIGZyb20gdGhlIHN5c2ZzIHBlcnNwZWN0aXZlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIERBTU9OIG1vbml0b3IgaXMgdHJpZ2dlcmVkLCBjb25maWd1cmVkLCBhbmQgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgcGF0aHMgYW5kIGZpbmQgb3V0IGV4YWN0bHkgaG93IHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB0cmFuc2xhdGVzIGludG8ga2VybmVsLXNwYWNlIGFjdGlvbnMuIFdoYXQgc3lzZnMgYXR0cmlidXRlcyBhcmUgaW52b2x2ZWQsIGFuZCBob3cgZG8gdGhleSBpbXBhY3QgdGhlIERBTU9OIHN0YXJ0dXAgc2VxdWVuY2U/IFRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUgYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTEyMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjE3Ljk5MTA0NTU1NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzA2ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jLTExMTAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzk9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNDEtLypcXG5tbS9kYW1vbi9jb3JlLmM6MjA0MjogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTIwNDMtICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQ4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDQ5OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwNTAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNzEtLyoqXFxubW0vZGFtb24vY29yZS5jOjIwNzI6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxubW0vZGFtb24vY29yZS5jLTIwNzMtICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4MC0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiAnZGFtb25fc3RhcnQoKScgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XFxubW0vZGFtb24vY29yZS5jLTIwODItICogcmV0dXJucyAtRUJVU1kuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA4NjppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjExMS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIxMTI6XFx0XFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjExMy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyMTQ9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyNjItICpcXG5tbS9kYW1vbi9jb3JlLmM6MjI2MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMjY0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQxNDpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxNS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMyND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzM3OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzgtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vc3RhdC5jLTIxNC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTU9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTM5LVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjI1NDA6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjU0MS1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjE4LjEwNjM1NzQzN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjM0NDAwMzQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBBY3RpdmF0aW9uIGFuZCBNb25pdG9yaW5nIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgIGlzIHRoZSBrZXkgdG8gYWN0dWFsbHkgZW5hYmxpbmcgREFNT04uIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC4gTm93LCBJIHNlZSB0aGF0IHdlIGhhdmUgdGhlc2UgYERBTU9OX1BBRERSYCBhbmQgYERBTU9OX1ZBRERSYCBtYWNyb3MgdGhhdCBkZWZpbmUgaG93IHRoZSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgYXJlIGNvbmZpZ3VyZWQuIEl0J3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0eXBpY2FsbHkgdXNlZCBmb3Igc3BlY2lmaWMgdGhpbmdzLCBidXQgSSB0aGluayBmb3IgbXkgdGVzdGluZywgZXNwZWNpYWxseSB3aXRoIHRoZSBEQU1PUyBxdW90YSBzdHVmZiBvciBteSBvd24gY3VzdG9tIHNjaGVtZXMsIEknZCBiZSBzZXR0aW5nIHRoZSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgdmlhIHN5c2ZzLCBlaXRoZXIgdGhyb3VnaCB0aGUgYHN0YXRlYCBmaWxlIG9yIHRoZSBgb3BzYCBmaWxlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBkYW1vbl9zeXNmc19zZXRfdGFyZ2V0c2AgZnVuY3Rpb24gb3IgdGhlIGBvcHNgIHNwZWNpZmljYWxseSB0byBjb25maXJtIHRoYXQgYmVoYXZpb3IgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUxMSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNTozMC40NTAzNzE1NTlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjYwMjQ5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RBTU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0PTUxPVRvIHVzZSB0aGlzIGZlYXR1cmUsIHlvdSBzaG91bGQgZmlyc3QgZW5zdXJlIHlvdXIgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYSBrZXJuZWxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdDo1Mjp0aGF0IGlzIGJ1aWx0IHdpdGggYGBDT05GSUdfREFNT05fTFJVX1NPUlQ9eWBgLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTUzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdD00Mz1UbyB1c2UgdGhpcyBmZWF0dXJlLCB5b3Ugc2hvdWxkIGZpcnN0IGVuc3VyZSB5b3VyIHN5c3RlbSBpcyBydW5uaW5nIG9uIGEga2VybmVsXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdDo0NDp0aGF0IGlzIGJ1aWx0IHdpdGggYGBDT05GSUdfREFNT05fUkVDTEFJTT15YGAuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdC00NS1cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0PTIwPVlvdSBzaG91bGQgZmlyc3QgZW5zdXJlIHlvdXIgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYSBrZXJuZWwgYnVpbHQgd2l0aFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0OjIxOmBgQ09ORklHX0RBTU9OXyo9eWBgLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTIyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0LnJzdD0zMT1UbyB1c2UgdGhpcyBmZWF0dXJlLCB5b3Ugc2hvdWxkIGZpcnN0IGVuc3VyZSB5b3VyIHN5c3RlbSBpcyBydW5uaW5nIG9uIGEga2VybmVsXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0LnJzdDozMjp0aGF0IGlzIGJ1aWx0IHdpdGggYGBDT05GSUdfREFNT05fU1RBVD15YGAuICBUaGUgZmVhdHVyZSBjYW4gYmUgZW5hYmxlZCBieVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdC5yc3Q6MzM6ZGVmYXVsdCBhdCBidWlsZCB0aW1lLCBieSBzZXR0aW5nIGBgQ09ORklHX0RBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUYGAgdHJ1ZS5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXQucnN0LTM0LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0LnJzdD00NT1TZXR0aW5nIGl0IGFzIGBgTmBgIGRpc2FibGVzIERBTU9OX1NUQVQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgYnlcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXQucnN0OjQ2OmBgQ09ORklHX0RBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUYGAgYnVpbGQgY29uZmlnIG9wdGlvbi5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXQucnN0LTQ3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3Q9Mzc9c3lzZnMgSW50ZXJmYWNlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdC0zOS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdDo0MDpEQU1PTiBzeXNmcyBpbnRlcmZhY2UgaXMgYnVpbHQgd2hlbiBgYENPTkZJR19EQU1PTl9TWVNGU2BgIGlzIGRlZmluZWQuICBJdFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0LTQxLWNyZWF0ZXMgbXVsdGlwbGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIHVuZGVyIGl0cyBzeXNmcyBkaXJlY3RvcnksXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3Q9MzM9REFNT05fTFJVX1NPUlTkvb/nlKhEQU1PTuWvu+aJvueDremhte+8iOiMg+WbtOWGheeahOmhtemdouiuv+mXrumikeeOh+mrmOS6jueUqOaIt+aMh+WumueahOmYiOWAvO+8ieWSjOWGt+mhtVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTQ2LeS9v+eUqOatpOeJueaAp++8jOS9oOmmluWFiOmcgOimgeehruiupOS9oOeahOezu+e7n+S4rei/kOihjOeahOWGheaguOWcqOe8luivkeaXtuWQr+eUqOS6hlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdDo0NzpgYENPTkZJR19EQU1PTl9MUlVfU09SVD15YGAuXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTQ4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q9MzY9REFNT05fUkVDTEFJTeaJvuWIsOWcqOeJueWumuaXtumXtOWGheayoeacieiiq+iuv+mXrueahOWGheWtmOWMuuWfn+W5tuWIhumhteOAguS4uuS6humBv+WFjeWug+WcqOWIhumhteaTjeS9nOS4rea2iOiAl+i/h+Wkmlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3QtNDItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q6NDM66KaB5L2/55So6L+Z5Liq5Yqf6IO977yM5L2g6aaW5YWI6KaB56Gu5L+d5L2g55qE57O757uf6L+Q6KGM5Zyo5LiA5Liq5LulIGBgQ09ORklHX0RBTU9OX1JFQ0xBSU09eWBgIOaehOW7uueahOWGhVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW0ucnN0LTQ0LeaguOS4iuOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI2LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXJ0LnJzdDoyNzrpppblhYjvvIzkvaDopoHnoa7kv53kvaDlvZPliY3ns7vnu5/kuK3ot5HnmoTlhoXmoLjmnoTlu7rml7bpgInlrprkuobov5nkuKrlip/og73pgInpobkgYGBDT05GSUdfREFNT05fKj15YGAuXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0PTM1PXN5c2Zz5o6l5Y+jXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0LTM2LT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdDozNzpEQU1PTueahHN5c2Zz5o6l5Y+j5piv5Zyo5a6a5LmJIGBgQ09ORklHX0RBTU9OX1NZU0ZTYGAg5pe25bu656uL55qE44CC5a6D5Zyo5YW2c3lzZnPnm67lvZXkuIvliJvlu7rlpJpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QtMzgt5Liq55uu5b2V5ZKM5paH5Lu277yMIGBgXFx1MDAzY3N5c2ZzXFx1MDAzZS9rZXJuZWwvbW0vZGFtb24vYGAg44CC5L2g5Y+v5Lul6YCa6L+H5a+56K+l55uu5b2V5LiL55qE5paH5Lu26L+b6KGM5YaZ5YWl5ZKMXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3Q9MzM9REFNT05fTFJVX1NPUlTkvb/nlKhEQU1PTuWwi+aJvueGsemgge+8iOevhOWcjeWFp+eahOmggemdouioquWVj+mgu+eOh+mrmOaWvOeUqOaItuaMh+WumueahOmWvuWAvO+8ieWSjOWGt+mggVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTQ2LeS9v+eUqOatpOeJueaAp++8jOS9oOmmluWFiOmcgOimgeeiuuiqjeS9oOeahOezu+e1seS4remBi+ihjOeahOWFp+aguOWcqOe3qOitr+aZguWVk+eUqOS6hlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdDo0NzpgYENPTkZJR19EQU1PTl9MUlVfU09SVD15YGAuXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTQ4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q9MzY9REFNT05fUkVDTEFJTeaJvuWIsOWcqOeJueWumuaZgumWk+WFp+aykuacieiiq+ioquWVj+eahOWFp+WtmOWNgOWfn+S4puWIhumggeOAgueIsuS6humBv+WFjeWug+WcqOWIhumggeaTjeS9nOS4rea2iOiAl+mBjuWkmlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3QtNDItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q6NDM66KaB5L2/55So6YCZ5YCL5Yqf6IO977yM5L2g6aaW5YWI6KaB56K65L+d5L2g55qE57O757Wx6YGL6KGM5Zyo5LiA5YCL5LulIGBgQ09ORklHX0RBTU9OX1JFQ0xBSU09eWBgIOani+W7uueahOWFp1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW0ucnN0LTQ0LeaguOS4iuOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI2LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXJ0LnJzdDoyNzrpppblhYjvvIzkvaDopoHnorrkv53kvaDnlbbliY3ns7vntbHkuK3ot5HnmoTlhafmoLjmp4vlu7rmmYLpgbjlrprkuobpgJnlgIvlip/og73pgbjpoIUgYGBDT05GSUdfREFNT05fKj15YGAuXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0PTM1PXN5c2Zz5o6l5Y+jXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0LTM2LT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdDozNzpEQU1PTueahHN5c2Zz5o6l5Y+j5piv5Zyo5a6a576pIGBgQ09ORklHX0RBTU9OX1NZU0ZTYGAg5pmC5bu656uL55qE44CC5a6D5Zyo5YW2c3lzZnPnm67pjITkuIvlibXlu7rlpJpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QtMzgt5YCL55uu6YyE5ZKM5paH5Lu277yMIGBgXFx1MDAzY3N5c2ZzXFx1MDAzZS9rZXJuZWwvbW0vZGFtb24vYGAg44CC5L2g5Y+v5Lul6YCa6YGO5bCN6Kmy55uu6YyE5LiL55qE5paH5Lu26YCy6KGM5a+r5YWl5ZKMXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9OTk4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDU5LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDYwOiNpZmRlZiBDT05GSUdfREFNT05cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA2MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMTUyPWludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMTU2LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMTU3OiNlbmRpZlxcdC8qIENPTkZJR19EQU1PTiAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMTU4LVxcbi0tXFxubW0vTWFrZWZpbGU9MTM2PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgKz0gZGVidWdfcGFnZV9yZWYub1xcbm1tL01ha2VmaWxlOjEzNzpvYmotJChDT05GSUdfREFNT04pICs9IGRhbW9uL1xcbm1tL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICs9IHVzZXJjb3B5Lm9cXG4tLVxcbm1tL2RhbW9uL01ha2VmaWxlPTM9b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbm1tL2RhbW9uL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxubW0vZGFtb24vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxubW0vZGFtb24vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxubW0vZGFtb24vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0OT11bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzItXFxubW0vZGFtb24vY29yZS5jOjM3MzojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYy0zNzQtc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDIzPXN0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9pbnNlcnRfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDMwLVxcbm1tL2RhbW9uL2NvcmUuYzo0MzE6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9jb3JlLmMtNDMyLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9kZWxfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjk0Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI5OTEtXFxubW0vZGFtb24vY29yZS5jOjI5OTI6I2lmZGVmIENPTkZJR19EQU1PTl9QQUREUlxcbm1tL2RhbW9uL2NvcmUuYy0yOTkzLS8qXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAwNC0gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGRhbW9uX2dldF9mb2xpbygpIGZyb20gb3BzLWNvbW1vbi5jLCB3aGljaCBpc1xcbm1tL2RhbW9uL2NvcmUuYzozMDA1OiAqIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RBTU9OX1BBRERSIGlzIGVuYWJsZWQuIEl0IGFsc28gcmVxdWlyZXMgdGhlXFxubW0vZGFtb24vY29yZS5jLTMwMDYtICogY29udGV4dCB0byBiZSB1c2luZyBQQUREUiBvcGVyYXRpb25zIGZvciBtZWFuaW5nZnVsIHJlc3VsdHMuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzA3Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDkxLX1cXG5tbS9kYW1vbi9jb3JlLmM6MzA5MjojZWxzZSAvKiBDT05GSUdfREFNT05fUEFERFIgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMzA5My1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDk3LX1cXG5tbS9kYW1vbi9jb3JlLmM6MzA5ODojZW5kaWYgLyogQ09ORklHX0RBTU9OX1BBRERSICovXFxubW0vZGFtb24vY29yZS5jLTMwOTktI2Vsc2UgLyogQ09ORklHX05VTUEgKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzc3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MjQtXFxubW0vZGFtb24vY29yZS5jOjM0MjU6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9jb3JlLmMtMzQyNi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfdHdvX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzUzMz1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNTU5LVxcbm1tL2RhbW9uL2NvcmUuYzozNTYwOiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jLTM1NjEtc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM3Nzc9c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2VjcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzg0LVxcbm1tL2RhbW9uL2NvcmUuYzozNzg1OiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jLTM3ODYtc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTMwPXN0YXRpYyBib29sIGVuYWJsZWQgX19yZWFkX21vc3RseSA9IElTX0VOQUJMRUQoXFxubW0vZGFtb24vc3RhdC5jOjMxOlxcdENPTkZJR19EQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVCk7XFxubW0vZGFtb24vc3RhdC5jLTMyLW1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcXHUwMDI2ZW5hYmxlZF9wYXJhbV9vcHMsIE5VTEwsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnPTI9Q09ORklHX0tVTklUPXlcXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6MzpDT05GSUdfREFNT049eVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzo0OkNPTkZJR19EQU1PTl9LVU5JVF9URVNUPXlcXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWctNS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZz04PUNPTkZJR19QQUdFX0lETEVfRkxBRz15XFxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnOjk6Q09ORklHX0RBTU9OX1ZBRERSPXlcXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6MTA6Q09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1Q9eVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZy0xMS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZz0xMz1DT05GSUdfU1lTRlM9eVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxNDpDT05GSUdfREFNT05fU1lTRlM9eVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxNTpDT05GSUdfREFNT05fU1lTRlNfS1VOSVRfVEVTVD15XFxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnLTE2LVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZy0xNy0jIGVuYWJsZSBEQU1PTl9ERUJVR19TQU5JVFkgdG8gY2F0Y2ggYW55IGJ1Z1xcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxODpDT05GSUdfREFNT05fREVCVUdfU0FOSVRZPXlcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2OiNpZmRlZiBDT05GSUdfREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTQxOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQyNi1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NDI3OlxcdC8qIERBTU9OX09QU19WQUREUiBpcyByZWdpc3RlcmVkIG9ubHkgaWYgQ09ORklHX0RBTU9OX1ZBRERSIGlzIHNldCAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MjgtXFx0aWYgKCFkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhEQU1PTl9PUFNfVkFERFIpKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTk4Mz1rdW5pdF90ZXN0X3N1aXRlKGRhbW9uX3Rlc3Rfc3VpdGUpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5ODYtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE5ODc6I2VuZGlmXFx0LyogQ09ORklHX0RBTU9OX0tVTklUX1RFU1QgKi9cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0LmgtNS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oOjY6I2lmZGVmIENPTkZJR19EQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC03LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaD0xMDY9a3VuaXRfdGVzdF9zdWl0ZShkYW1vbl9zeXNmc190ZXN0X3N1aXRlKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0LmgtMTA5LVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg6MTEwOiNlbmRpZiAvKiBDT05GSUdfREFNT05fU1lTRlNfS1VOSVRfVEVTVCAqL1xcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC01LVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NjojaWZkZWYgQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTctXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTI4Mj1rdW5pdF90ZXN0X3N1aXRlKGRhbW9uX3Rlc3Rfc3VpdGUpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0yODUtXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoyODY6I2VuZGlmXFx0LyogQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1QgKi9cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMTktXFxubW0vZGFtb24vdmFkZHIuYzoyMDojaWZkZWYgQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi92YWRkci5jLTIxLSN1bmRlZiBEQU1PTl9NSU5fUkVHSU9OX1NaXFxuLS1cXG50b29scy90ZXN0aW5nL2t1bml0L2NvbmZpZ3MvYWxsX3Rlc3RzLmNvbmZpZz0zOT1DT05GSUdfSVdMV0lGST15XFxudG9vbHMvdGVzdGluZy9rdW5pdC9jb25maWdzL2FsbF90ZXN0cy5jb25maWctNDAtXFxudG9vbHMvdGVzdGluZy9rdW5pdC9jb25maWdzL2FsbF90ZXN0cy5jb25maWc6NDE6Q09ORklHX0RBTU9OPXlcXG50b29scy90ZXN0aW5nL2t1bml0L2NvbmZpZ3MvYWxsX3Rlc3RzLmNvbmZpZzo0MjpDT05GSUdfREFNT05fVkFERFI9eVxcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvY29uZmlncy9hbGxfdGVzdHMuY29uZmlnOjQzOkNPTkZJR19EQU1PTl9QQUREUj15XFxudG9vbHMvdGVzdGluZy9rdW5pdC9jb25maWdzL2FsbF90ZXN0cy5jb25maWctNDQtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9jb25maWc6MTpDT05GSUdfREFNT049eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzoyOkNPTkZJR19EQU1PTl9TWVNGUz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vY29uZmlnOjM6Q09ORklHX0RBTU9OX1BBRERSPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9jb25maWc6NDpDT05GSUdfREFNT05fVkFERFI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzo1OkNPTkZJR19EQU1PTl9SRUNMQUlNPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9jb25maWc6NjpDT05GSUdfREFNT05fTFJVX1NPUlQ9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzo3OkNPTkZJR19EQU1PTl9ERUJVR19TQU5JVFk9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNTozMi43NzY0MDY2MTJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTE3OTMzNzIxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWZXJkaWN0OiBEQU1PTiBRdW90YSBHb2FsIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIHdlIG5lZWQgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBQU0lgIGNvbmZpZ3VyZWQuIFRob3NlIGFyZSBzdHJhaWdodGZvcndhcmQuXG5cbk5leHQsIHRoZSBmb2N1cyBzeW1ib2xzLiBXZSBoYXZlIGEgbGlzdDogYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgLCBgZGFtb3NfcXVvdGFfc2NvcmVgLCBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAsIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCwgYW5kIGBkYW1vc19hZGp1c3RfcXVvdGFgLiBUaGVzZSBsb29rIGNvcnJlY3QgZ2l2ZW4gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UuXG5cblJpZ2h0LCB0aGUgZGlmZiBjb25maXJtcyB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkLiBMb29raW5nIGF0IGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCwgd2Ugc2VlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdG91Y2hlZC4gTm90aGluZyBlbHNlIGp1bXBzIG91dCB0aGF0J3MgZGlyZWN0bHkgcmVsZXZhbnQgdG8gZnV6emluZy5cblxuTm93LCBsZXQncyBlbnN1cmUgd2UncmUgY2xlYXIgb24gdGhlIGluc3RydWN0aW9ucy4gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGB0cnVlYCBiZWNhdXNlIHRoZSBjaGFuZ2UgbW9kaWZpZXMgcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhlIGVkaXQgdG8gYG1tL2RhbW9uL2NvcmUuY2AgbWFrZXMgdGhpcyBhIGRlZmluaXRlIHllcy5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgYXMgZXhwZWN0ZWQ6IHRob3NlIHNhbWUgZnVuY3Rpb25zIHdlIGlkZW50aWZpZWQgYmVmb3JlLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbHJlYWR5IGNvbmZpcm1lZC5cblxuRmluYWxseSwgdGhlIHJlYXNvbmluZy4gV2UgbmVlZCBhIGNvbmNpc2UgZXhwbGFuYXRpb24uIEJhc2VkIG9uIHRoZSBjb2RlIGluc3BlY3Rpb24sIHRoaXMgY2hhbmdlIG1vZGlmaWVzIHRoZSBxdW90YSBnb2FsIGV2YWx1YXRpb24gbG9naWMuIFRoaXMgaXMgZm9yIERBTU9TIFBTSSBnb2FscyAqc3BlY2lmaWNhbGx5KiBhbmQgaW52b2x2ZXMgdGhlIHRlbXBvcmFsIHR1bmVyLiBBbmQsIGNydWNpYWxseSwgaXQncyBhbGwgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIGRhZW1vbiBzY2hlbWVzLlxuXG5ZZXAsIGl0J3MgYWxsIGNvbnNpc3RlbnQ6IHRoZSBjb2RlIGNoYW5nZXMsIHRoZSBjb25maWd1cmF0aW9ucywgdGhlIGZvY3VzIHN5bWJvbHMsIGFuZCB0aGUgcmVhc29uaW5nLiBXZSdyZSByZWFkeSB0byBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTI2LCJPdXRwdXRUb2tlbnMiOjE3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNjoyNC41Njk3ODM1NTVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3NjQ2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiUFNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZVwiLFxuICAgIFwiZGFtb3NfcXVvdGFfc2NvcmVcIixcbiAgICBcImRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWxcIixcbiAgICBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OL0RBTU9TIHF1b3RhIGdvYWwgZXZhbHVhdGlvbiBpbiBtbS9kYW1vbi9jb3JlLmMsIGVuc3VyaW5nIHRoYXQgdW5tZWFzdXJlZCBQU0kgZ29hbHMgdW5kZXIgYSB0ZW1wb3JhbCBnb2FsIHR1bmVyIGRvIG5vdCBwcmVtYXR1cmVseSB6ZXJvIHRoZSBlZmZlY3RpdmUgcXVvdGEgZHVyaW5nIGluaXRpYWwgdHVuaW5nIHJvdW5kcy4gVGhpcyBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIGV4ZWN1dGlvbiBhbmQgcXVvdGEgY2FsY3VsYXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OJ3Mgc3lzZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiUFNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZVwiLFxuICAgIFwiZGFtb3NfcXVvdGFfc2NvcmVcIixcbiAgICBcImRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWxcIixcbiAgICBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OL0RBTU9TIHF1b3RhIGdvYWwgZXZhbHVhdGlvbiBpbiBtbS9kYW1vbi9jb3JlLmMsIGVuc3VyaW5nIHRoYXQgdW5tZWFzdXJlZCBQU0kgZ29hbHMgdW5kZXIgYSB0ZW1wb3JhbCBnb2FsIHR1bmVyIGRvIG5vdCBwcmVtYXR1cmVseSB6ZXJvIHRoZSBlZmZlY3RpdmUgcXVvdGEgZHVyaW5nIGluaXRpYWwgdHVuaW5nIHJvdW5kcy4gVGhpcyBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIGV4ZWN1dGlvbiBhbmQgcXVvdGEgY2FsY3VsYXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OJ3Mgc3lzZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNjoyNC43MDk1NTY3MjNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTY3NDM3Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDY6MjQuNzEwMDQ3NzgzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODY5NjY5MzA3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJ3MgcXVvdGEgZ29hbCBsb2dpYyBpbiBgbW0vZGFtb24vY29yZS5jYCBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgbWV0cmljcyBhbmQgYWRkcyBhIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYYCAoYSBkb21haW4tbGV2ZWwgc2VudGluZWwgdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIFBTSSBzYW1wbGUgaGFzIHlldCBiZWVuIHJlY29yZGVkKSwgaXQgc2V0cyBgZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IDBgIGluc3RlYWQgb2YgYGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZWAgaWYgdGhlIHR1bmVyIGlzIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYC5cXG5cXG5EZXNwaXRlIHRoZSBjb2RlIGNvbW1lbnQgcmVmZXJyaW5nIHRvIFxcXCJ1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsXFxcIiwgdGhpcyBpcyBwdXJlbHkgYSBzZW1hbnRpYyBzZW50aW5lbCB2YWx1ZTogYGxhc3RfcHNpX3RvdGFsYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBVNjRfTUFYYCB1cG9uIGFsbG9jYXRpb24gb3IgY29tbWl0IChgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgYWNjZXNzZWQgb3IgZXhwb3NlZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1NDI1NTQ1YmRiOGMzYmM0NGViY2ViNmNhMDU0MjYzOTA2NjRlMzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNzowMToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMDZjZjJhYjdlOTdkNy4uZTZkODdmZDM5OTJlZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzE2MSwxMiArMzE2MSwxOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4gXHRcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XG4tXHRcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cbi1cdFx0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcbi1cdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZTtcbi1cdFx0ZWxzZVxuK1x0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XG4rXHRcdFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xuK1x0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPT1cbitcdFx0XHRcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbitcdFx0XHRcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXG4rXHRcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuK1x0XHR9IGVsc2Uge1xuIFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxuIFx0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbitcdFx0fVxuIFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBjMDFlNmE3NWNhZGMxLi4yYjliMjRjZTdkYWQzIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC04ODksNiArODg5LDc0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdH0pO1xuIH1cbiBcbisvKlxuKyAqIFVubWVhc3VyZWQgUFNJIGdvYWxzIG11c3Qgbm90IGRpc2FibGUgdGhlIHRlbXBvcmFsIHF1b3RhLlxuKyAqIEtlZXAgc3ogKiAxMDAwMCB3aXRoaW4gYSAzMi1iaXQgdW5zaWduZWQgbG9uZy5cbisgKi9cbitzdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xuK1x0c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIHBhdHRlcm4gPSB7fTtcbitcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHtcbitcdFx0LnN6ID0gU1pfNjRLLFxuK1x0XHQuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXG4rXHR9O1xuK1x0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzID0ge307XG4rXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBzcmMgPSB7XG4rXHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG4rXHRcdC50YXJnZXRfdmFsdWUgPSBVTE9OR19NQVgsXG4rXHR9O1xuK1x0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4rXHRzdHJ1Y3QgZGFtb3MgKnM7XG4rXG4rXHRpZiAoIWMpXG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJjdHggYWxsb2MgZmFpbFwiKTtcbitcdHMgPSBkYW1vbl9uZXdfc2NoZW1lKFx1MDAyNnBhdHRlcm4sIERBTU9TX1NUQVQsIDAsIFx1MDAyNnF1b3RhLCBcdTAwMjZ3bWFya3MsXG4rXHRcdFx0TlVNQV9OT19OT0RFKTtcbitcdGlmICghcykge1xuK1x0XHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbitcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInNjaGVtZSBhbGxvYyBmYWlsXCIpO1xuK1x0fVxuK1x0ZGFtb25fYWRkX3NjaGVtZShjLCBzKTtcbitcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsIFVMT05HX01BWCk7XG4rXHRpZiAoIWdvYWwpIHtcbitcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJnb2FsIGFsbG9jIGZhaWxcIik7XG4rXHR9XG4rXHRkYW1vc19hZGRfcXVvdGFfZ29hbChcdTAwMjZzLVx1MDAzZXF1b3RhLCBnb2FsKTtcbitcbitcdC8qIGZyZXNoIGdvYWwsIGZpcnN0IHR1bmluZyByb3VuZCAqL1xuK1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTtcbitcbitcdC8qIHNlY29uZCByb3VuZDogbGFzdF9wc2lfdG90YWwgaXMgaW5pdGlhbGlzZWQgbm93ICovXG4rXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuK1xuK1x0LyogY29tbWl0IGEgUFNJIGdvYWwgb250byB0aGUgaW5pdGlhbGlzZWQgUFNJIGdvYWwgKi9cbitcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNnNyYyk7XG4rXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuK1xuK1x0LyogYSBtZWFzdXJlZCByb3VuZCB0aGF0IHJlYWNoZXMgdGhlIHRhcmdldCBkaXNhYmxlcyB0aGUgcXVvdGEgKi9cbitcdGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlID0gMTA7XG4rXHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpIC0gMTA7XG4rXHQvKiBVNjRfTUFYIG1hcmtzIGFuIHVubWVhc3VyZWQgZ29hbCwga2VlcCB0aGUgc2FtcGxlIGF3YXkgZnJvbSBpdCAqL1xuK1x0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcbitcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbC0tO1xuK1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgMHVsKTtcbitcbitcdC8qIHRoZSBjb25zaXN0IHR1bmVyIGtlZXBzIGl0cyBxdW90YSBvdmVyIGFuIHVubWVhc3VyZWQgcm91bmQgKi9cbitcdHMtXHUwMDNlcXVvdGEuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVDtcbitcdHMtXHUwMDNlcXVvdGEuZXN6X2JwID0gU1pfMzJLICogMTAwMDA7XG4rXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChnb2FsLCBcdTAwMjZzcmMpO1xuK1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfMzJLKTtcbitcbitcdGRhbW9uX2Rlc3Ryb3lfY3R4KGMpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWxzLCBpbnQgbnJfZHN0X2dvYWxzLFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjX2dvYWxzLCBpbnQgbnJfc3JjX2dvYWxzKVxuQEAgLTE4ODcsNiArMTk1NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfbmV3X2ZpbHRlciksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyksXG4rXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2kpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YSksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfZmlsdGVyKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA2OjI0LjcxMDA0ODY4M1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjIxODU2ODI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gUXVvdGEgR29hbCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWZmZWN0cyBgbW0vZGFtb24vY29yZS5jYCBhbmQgYSByZWxhdGVkIEtVbml0IGhlYWRlciwgbGV0J3MgZGl2ZSBpbi4gVGhlIGRpZmYgaXMgZm9jdXNlZCBvbiBob3cgd2UgY2FsY3VsYXRlIHRoZSBgY3VycmVudF92YWx1ZWAgZm9yIGEgcXVvdGEgZ29hbCwgc3BlY2lmaWNhbGx5IHdoZW4gdXNpbmcgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AuXG5cblRoZSBrZXkgc2VjdGlvbiBpcyB0aGUgYGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOmAgYmxvY2suIEl0IGxvb2tzIGxpa2Ugd2UncmUgc3VidHJhY3RpbmcgdGhlIHByZXZpb3VzIFBTSSB0b3RhbCBmcm9tIHRoZSBjdXJyZW50IFBTSSB0b3RhbCB0byBkZXJpdmUgdGhlIFwidXNhZ2VcIiBvdmVyIHRoZSBsYXN0IGl0ZXJhdGlvbi4gVGhlcmUncyBhIGNoZWNrOiBgaWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClgLiBUaGUgY29tbWVudCBzYXlzIFwidW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZFwiLiBUaGlzIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0LiBJcyBgVTY0X01BWGAgKmFjdHVhbGx5KiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgaXMgaXQgYmVpbmcgdXNlZCBhcyBhIHNlbnRpbmVsIHZhbHVlIGhlcmU/IEEgZmxhZyB0byBkZW5vdGUgXCJubyBwcmV2aW91cyBtZWFzdXJlbWVudCBhdmFpbGFibGVcIj8gVGhlIGNvZGUncyBjb21tZW50IG1lbnRpb25zIGl0J3MgXCJ1bmluaXRpYWxpemVkLFwiIGltcGx5aW5nIHRoZSBmb3JtZXIsIGhvd2V2ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbnRlcmVzdGluZy4gVGhlIGFkZGl0aW9uIG9mIHRlbXBvcmFsIHF1b3RhIG1heSBoYXZlIGRpZmZlcmVudCByYW1pZmljYXRpb25zLlxuXG5UaGUgYGlmYCBjb25kaXRpb24gdGhlbiBicmFuY2hlcy4gSWYgYGxhc3RfcHNpX3RvdGFsYCBpcyBgVTY0X01BWGAsIGl0IHNldHMgYGN1cnJlbnRfdmFsdWVgIHRvIGBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZWAgb3IgMCBmb3IgdGhlIHRlbXBvcmFsIHF1b3RhLiBPdGhlcndpc2UsIGl0IGNhbGN1bGF0ZXMgYGN1cnJlbnRfdmFsdWVgIGFzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gY3VycmVudCBhbmQgbGFzdCBQU0kgdG90YWwsIGFuZCB1cGRhdGVzIGBsYXN0X3BzaV90b3RhbGAuXG5cblRvIGJlIHN1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgaXMgKmluaXRpYWxpemVkKi4gSSBuZWVkIHRvIGxvb2sgYXQgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBgbGFzdF9wc2lfdG90YWxgIGlzIHNldCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IGBVNjRfTUFYYCBpcyBiZWluZyB1c2VkIGFzIGEgc2VudGluZWwgZm9yIGluaXRpYWxpemF0aW9uLCB0byBpbmRpY2F0ZSB0aGF0IG5vIHByZXZpb3VzIFBTSSBtZWFzdXJlbWVudCBpcyBhdmFpbGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzowNi45Mjg2MTk5NDZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MzY1NDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxhc3RfcHNpX3RvdGFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9Njg4PXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02OTktXFx0aWYgKG1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXFxubW0vZGFtb24vY29yZS5jOjcwMDpcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XFxubW0vZGFtb24vY29yZS5jLTcwMS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Z29hbC1cXHUwMDNlbGlzdCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTE5MT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTk1LVxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbm1tL2RhbW9uL2NvcmUuYzoxMTk2OlxcdFxcdGRzdC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTk3LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNjMtXFx0XFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzE2NDpcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkge1xcbm1tL2RhbW9uL2NvcmUuYzozMTY1OlxcdFxcdFxcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMzE2Ni1cXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuZ29hbF90dW5lciA9PVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNzMtXFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxcbm1tL2RhbW9uL2NvcmUuYzozMTc0OlxcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsO1xcbm1tL2RhbW9uL2NvcmUuYy0zMTc1LVxcdFxcdH1cXG5tbS9kYW1vbi9jb3JlLmM6MzE3NjpcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XFxubW0vZGFtb24vY29yZS5jLTMxNzctXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODA0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTUtXFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxNjpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VsYXN0X3BzaV90b3RhbCwgVTY0X01BWCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxNy1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MzI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM3LVxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMTIzLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Mzg6XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzktXFx0fTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDUtXFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg0NjpcXHRcXHRcXHQubGFzdF9wc2lfdG90YWwgPSA1NjcsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0Ny1cXHRcXHRcXHR9KTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04ODctXFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4ODpcXHRcXHRcXHQubGFzdF9wc2lfdG90YWwgPSA1NjcsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4OS1cXHRcXHRcXHR9KTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTMxLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MzI6XFx0Lyogc2Vjb25kIHJvdW5kOiBsYXN0X3BzaV90b3RhbCBpcyBpbml0aWFsaXNlZCBub3cgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTMzLVxcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQyLVxcdGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSA9IDEwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NDM6XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCkgLSAxMDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQ0LVxcdC8qIFU2NF9NQVggbWFya3MgYW4gdW5tZWFzdXJlZCBnb2FsLCBrZWVwIHRoZSBzYW1wbGUgYXdheSBmcm9tIGl0ICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk0NTpcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTQ2OlxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsLS07XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk0Ny1cXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzowNy4wMTcwMDM3MzJaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQ4ODA5Mzk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBjb3JlLmNgIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLCBzbyBsZXQncyBqdW1wIHJpZ2h0IGludG8gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzE2MC4gSSBmaWd1cmUgdGhhdCdzIHRoZSBsaWtlbHkgbG9jYXRpb24gd2hlcmUgdGhlIGlzc3VlIGlzIG9jY3VycmluZywgb3IgYXQgbGVhc3QsIHRoZSBjcml0aWNhbCBsb2dpYyBJIG5lZWQgdG8gcmV2aWV3IHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSdzIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlzc2VjdCB0aGlzIHNlY3Rpb24gYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcsIGhvdyBpdCdzIGJlaGF2aW5nLCBhbmQgaG9wZWZ1bGx5LCBJJ2xsIGZpbmQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4ODAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzoxMC41MDUxMDA4NTdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTQ1OlxcdFxcdFxcdHJldHVybiAxMDAwMDtcXG4zMTQ2OlxcdFxcbjMxNDc6XFx0XFx0dGhwID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9BTk9OX1RIUFMpICtcXG4zMTQ4OlxcdFxcdFxcdFxcdFxcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfU0hNRU1fVEhQUykgK1xcbjMxNDk6XFx0XFx0XFx0XFx0XFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9GSUxFX1RIUFMpO1xcbjMxNTA6XFx0XFx0cmV0dXJuIG11bHRfZnJhYyh0aHAsIDEwMDAwLCB0b3RhbF9wYWdlcyAtIGZyZWVfcGFnZXMpO1xcbjMxNTE6XFx0fVxcbjMxNTI6XFx0XFxuMzE1MzpcXHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMzE1NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjMxNTU6XFx0e1xcbjMxNTY6XFx0XFx0dTY0IG5vd19wc2lfdG90YWw7XFxuMzE1NzpcXHRcXG4zMTU4OlxcdFxcdHN3aXRjaCAoZ29hbC1cXHUwMDNlbWV0cmljKSB7XFxuMzE1OTpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxuMzE2MDpcXHRcXHRcXHQvKiBVc2VyIHNob3VsZCBhbHJlYWR5IHNldCBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlICovXFxuMzE2MTpcXHRcXHRcXHRicmVhaztcXG4zMTYyOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbjMxNjM6XFx0XFx0XFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG4zMTY0OlxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XFxuMzE2NTpcXHRcXHRcXHRcXHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXFxuMzE2NjpcXHRcXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuZ29hbF90dW5lciA9PVxcbjMxNjc6XFx0XFx0XFx0XFx0XFx0XFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcXG4zMTY4OlxcdFxcdFxcdFxcdFxcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXFxuMzE2OTpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMDtcXG4zMTcwOlxcdFxcdFxcdFxcdGVsc2VcXG4zMTcxOlxcdFxcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuMzE3MjpcXHRcXHRcXHR9IGVsc2Uge1xcbjMxNzM6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxcbjMxNzQ6XFx0XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxuMzE3NTpcXHRcXHRcXHR9XFxuMzE3NjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XFxuMzE3NzpcXHRcXHRcXHRicmVhaztcXG4zMTc4OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG4zMTc5OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcXG4zMTgwOlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XFxuMzE4MTpcXHRcXHRcXHRicmVhaztcXG4zMTgyOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbjMxODM6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxuMzE4NDpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcXG4zMTg1OlxcdFxcdFxcdGJyZWFrO1xcbjMxODY6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQOlxcbjMxODc6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlA6XFxuMzE4ODpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXFxuMzE4OTpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XFxuMzE5MDpcXHRcXHRcXHRicmVhaztcXG4zMTkxOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XFxuMzE5MjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsXFxuMzE5MzpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VuaWQpO1xcbjMxOTQ6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA3OjEwLjUwNTI5Mzg4N1oiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODQ0ODAwNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUXVvdGEgR29hbCBBZGp1c3RtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCwgSSBzZWUgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgaXMgYFU2NF9NQVhgLiBFc3NlbnRpYWxseSwgdGhpcyBtZWFucyB3ZSBoYXZlbid0IHJlY29yZGVkIGEgcHJldmlvdXMgUFNJIG1lYXN1cmVtZW50IGZvciB0aGlzIGdvYWwsIGEgc2VudGluZWwgdmFsdWUgZGVub3RpbmcgdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEl0J3MgY3J1Y2lhbCB0byByZW1lbWJlciB0aGF0IHRoaXMgKmlzbid0KiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2U7IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRlZmluZWQgc3RhdGUuXG5cblByZXZpb3VzbHksIHdoZW4gZW5jb3VudGVyaW5nIHRoaXMgXCJ1bmluaXRpYWxpemVkXCIgc3RhdGUsIHdlIHNpbXBseSBzZXQgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgdG8gYGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlYC4gTm93LCB3ZSBoYXZlIGEgY29uZGl0aW9uYWw6XG5cbmBgYGNcbmlmIChzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbiAgICBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xuZWxzZVxuICAgIGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuYGBgXG5cblNvLCB0aGUga2V5IGRpZmZlcmVuY2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIHRlbXBvcmFsIHR1bmVyLiBJZiBgcy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyYCBpcyBzZXQgdG8gYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLCB3ZSBpbml0aWFsaXplIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIHRvIDAuIE90aGVyd2lzZSwgd2Uga2VlcCB0aGUgcHJldmlvdXMgYmVoYXZpb3Igb2Ygc2V0dGluZyBpdCB0byB0aGUgdGFyZ2V0LiBUaGlzIGluZGljYXRlcyBhIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IgYWRqdXN0bWVudCBzdHJhdGVneSBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0dW5lciBpbiB1c2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGVtcG9yYWwgdHVuaW5nIGVudGFpbHMuIElzIGl0IHN0YXJ0aW5nIGZyZXNoLCBvciBpbnRyb2R1Y2luZyBhIGJpYXM/XG5cblNpbmNlIGBnb2FsYCBpcyBhbGxvY2F0ZWQgdmlhIGBkYW1vc19uZXdfcXVvdGFfZ29hbCgpYCwgcHJvYmFibHkgdXNpbmcgYGttYWxsb2MoKWAsIEkgd2FudCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBkYW1vc19uZXdfcXVvdGFfZ29hbCgpYCB0byBzZWUgaG93IGl0J3MgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhpcyBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgZ29hbGAgaXMgYmVpbmcgbWFuYWdlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBsdXJraW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzoxNy4zNTAwOTcxODlaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODU6XFx0XFx0ZGFtb3NfZnJlZV9maWx0ZXIoZik7XFxuIDY4NjpcXHR9XFxuIDY4NzpcXHRcXG4gNjg4OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG4gNjg5OlxcdFxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbiA2OTA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXFxuIDY5MTpcXHR7XFxuIDY5MjpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0Z29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcXG4gNjk1OlxcdFxcdGlmICghZ29hbClcXG4gNjk2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2OTc6XFx0XFx0Z29hbC1cXHUwMDNlbWV0cmljID0gbWV0cmljO1xcbiA2OTg6XFx0XFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlO1xcbiA2OTk6XFx0XFx0aWYgKG1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXFxuIDcwMDpcXHRcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XFxuIDcwMTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Z29hbC1cXHUwMDNlbGlzdCk7XFxuIDcwMjpcXHRcXHRyZXR1cm4gZ29hbDtcXG4gNzAzOlxcdH1cXG4gNzA0OlxcdFxcbiA3MDU6XFx0dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbiA3MDY6XFx0e1xcbiA3MDc6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Zy1cXHUwMDNlbGlzdCwgXFx1MDAyNnEtXFx1MDAzZWdvYWxzKTtcXG4gNzA4OlxcdH1cXG4gNzA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzoxNy4zNTAzNjY4MzlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU1MjQ0OTAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZGFtb3NfcXVvdGFfZ29hbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0IGZpZWxkcyBpdCdzIHBhY2tpbmcuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlLiBXaGF0IGRvZXMgaXQgY29udGFpbiwgYW5kIGhvdyBpcyBpdCBvcmdhbml6ZWQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBzaXplLCB0aW1lc3RhbXBzLCB1c2FnZSBpbmRpY2F0b3JzLCBvciBtYXliZSBzb21lIGZsYWdzPyBCYXNlZCBvbiBpdHMgbmFtZSBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiB0YXJnZXQgcXVvdGEsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBEQU1PUyBjb250ZXh0OyBzbyBJIGltYWdpbmUgSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgcmVzb3VyY2UgdXNhZ2UgdGFyZ2V0cy4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIGRhdGEgdHlwZXMsIHRoZWlyIGxheW91dCwgYW5kIGFueSBwb3RlbnRpYWwgYWxpZ25tZW50IGNvbmNlcm5zLiBLbm93aW5nIHRoZSBmaWVsZHMnIHNlbWFudGljcyB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVuZGVkIHVzZSBhbmQgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBEQU1PUyBzdWJzeXN0ZW1zLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA3OjIwLjkwMjgxODg0NFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NDkwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xNjE9ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk3LSAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxOTg6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xOTktXFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA3OjIxLjAwMTQ3NzQ4OFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjE3MzkzMDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBIZWFkZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEYXRhIEFjY2VzcyBNT05pdG9yIChEQU1PTikgZnJhbWV3b3JrIHdvcmtzLCBhbmQgSSB0aGluayBzdGFydGluZyB3aXRoIHRoZSBjb3JlIGhlYWRlciBmaWxlIGlzIHRoZSByaWdodCBtb3ZlLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIG92ZXIgdG8gYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGFuZCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgbmVpZ2hib3Job29kIGFyb3VuZCBsaW5lIDE5OC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1vc3QgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYSBtb2R1bGUgYmVnaW4gdG8gc3VyZmFjZS4gSSdtIGhvcGluZyB0byBmaW5kIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgb2YgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgYW5kIGhvdyBpdCB0cmFja3MgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucy4gVGhpcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBwb2ludHMgb2YgaXRzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzg5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDc6MjMuNjE4ODczNjI0WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0ICogSWYgQG1ldHJpYyBpcyBEQU1PU19RVU9UQV9OT0RFX01FTUNHX3tVU0VELEZSRUV9X0JQLCBAbmlkIGFuZCBAbWVtY2dfaWRcXG4gMTk2OlxcdCAqIHJlcHJlc2VudHMgdGhlIG5vZGUgaWQgYW5kIHRoZSBjZ3JvdXAgdG8gYWNjb3VudCB0aGUgdXNlZCBtZW1vcnkgZm9yLlxcbiAxOTc6XFx0ICovXFxuIDE5ODpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XFxuIDE5OTpcXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcXG4gMjAwOlxcdFxcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlO1xcbiAyMDE6XFx0XFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xcbiAyMDI6XFx0XFx0LyogbWV0cmljLWRlcGVuZGVudCBmaWVsZHMgKi9cXG4gMjAzOlxcdFxcdHVuaW9uIHtcXG4gMjA0OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDIwNTpcXHRcXHRcXHRcXHRpbnQgbmlkO1xcbiAyMDY6XFx0XFx0XFx0XFx0dTY0IG1lbWNnX2lkO1xcbiAyMDc6XFx0XFx0XFx0fTtcXG4gMjA4OlxcdC8qIHByaXZhdGU6ICovXFxuIDIwOTpcXHRcXHRcXHQvKiBMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSSAqL1xcbiAyMTA6XFx0XFx0XFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRcXHR9O1xcbiAyMTM6XFx0LyogcHJpdmF0ZTogKi9cXG4gMjE0OlxcdFxcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIDIxNTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIDIxNjpcXHR9O1xcbiAyMTc6XFx0XFxuIDIxODpcXHQvKipcXG4gMjE5OlxcdCAqIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciAtIEdvYWwtYmFzZWQgcXVvdGEgdHVuaW5nIGxvZ2ljLlxcbiAyMjA6XFx0ICogQERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVDpcXHRBaW0gbG9uZyB0ZXJtIGNvbnNpc3RlbnQgcXVvdGEuXFxuIDIyMTpcXHQgKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTDpcXHRBaW0gemVybyBxdW90YSBhc2FwLlxcbiAyMjI6XFx0ICovXFxuIDIyMzpcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xcbiAyMjQ6XFx0XFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNULFxcbiAyMjU6XFx0XFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCxcXG4gMjI2OlxcdH07XFxuIDIyNzpcXHRcXG4gMjI4OlxcdC8qKlxcbiAyMjk6XFx0ICogc3RydWN0IGRhbW9zX3F1b3RhIC0gQ29udHJvbHMgdGhlIGFnZ3Jlc3NpdmVuZXNzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA3OjIzLjYxODk2ODU4NFoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzU2NzA0Mzg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgREFNT04gUXVvdGEgR29hbCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBzdWJ0bHkgdHdlYWtzIGhvdyB0aGUgYGN1cnJlbnRfdmFsdWVgIGlzIGNvbXB1dGVkIHdpdGhpbiB0aGUgREFNT04gcXVvdGEgc3lzdGVtLiBJdCdzIGZvY3VzZWQgb24gdGhlIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCBmaWVsZCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBwYXJ0IG9mIGEgdW5pb24gd2l0aCBgbmlkYCBhbmQgYG1lbWNnX2lkYC4gSXQncyBhIGtleSB2YWx1ZSBmb3IgdHJhY2tpbmcgbWVtb3J5IFBTSS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IHRoZSBjYXNlIHdoZXJlIGBtZXRyaWNgIGlzIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCB0aGUgYGxhc3RfcHNpX3RvdGFsYCBoYXMgdGhlIHNlbnRpbmVsIHZhbHVlIGBVNjRfTUFYYCwgbWVhbmluZyBpdCBoYXNuJ3QgYmVlbiBtZWFzdXJlZCB5ZXQuIFRoYXQgaXMgaW5pdGlhbGl6ZWQgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLlxuXG5JbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCwgdGhlIGV4aXN0aW5nIGNvZGUgY2hlY2tzIGlmIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCAqaXMqIHRoaXMgc2VudGluZWwgdmFsdWUuIElmIGl0ICppcyosIHRoZW4gYGN1cnJlbnRfdmFsdWVgIGlzIHNldCB0byBlaXRoZXIgMCAoaWYgdXNpbmcgdGhlIHRlbXBvcmFsIHR1bmVyKSBvciBgdGFyZ2V0X3ZhbHVlYCAob3RoZXJ3aXNlKS4gVGhlIHVwZGF0ZWQgcGF0Y2ggc2VlbXMgdG8gYmUgYWx0ZXJpbmcgdGhlIGxvZ2ljIGZvciBjYWxjdWxhdGluZyBjdXJyZW50X3ZhbHVlIG9ubHkgd2hlbiB0aGUgc2VudGluZWwgaXMgcHJlc2VudC4gQWZ0ZXIgdGhhdCwgaXQgdXBkYXRlcyBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgdG8gdGhlIGBub3dfcHNpX3RvdGFsYC5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBpc3N1ZXMgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgb3IgZXhwb3NlcyBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UgaW4gYSB3YXkgdGhhdCBjcmVhdGVzIHZ1bG5lcmFiaWxpdGllcy4gVGhlIGNvZGUgSeKAmW0gZmFtaWxpYXIgd2l0aCBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCAqc2hvdWxkbid0KiBkbyB0aGF0LiBUaGUgYWZmZWN0ZWQgdmFsdWVzIOKAkyBgcy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyYCBhbmQgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAg4oCTIGFyZSBpbnRlcm5hbCB0byBEQU1PTidzIGFjY291bnRpbmcgYW5kIHRoZSBxdW90YSBzeXN0ZW0uIEV2ZW4gaWYgdGhlc2UgYXJlIHJlYWQgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLCBsZXQncyBkb3VibGUtY2hlY2sgaG93IGBjdXJyZW50X3ZhbHVlYCBpcyBleHBvc2VkLiBUaGlzIHdpbGwgbmVlZCBmdXJ0aGVyIHJldmlldyBvZiBob3cgc3lzZnMgaGFuZGxlcyB0aGVzZSB2YWx1ZXMuIFRoZSBnb29kIG5ld3MgaXMsIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHN0cnVjdHVyZXMgb3IgZmllbGRzIHBhc3NlZCB0byB1c2VyIHNwYWNlLlxuXG5UaGUgaW5jbHVzaW9uIG9mIHRoZSBLVW5pdCB0ZXN0IGBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpYCBpcyBleGNlbGxlbnQ7IGl0J3MgZXhhY3RseSB3aGF0IEknZCBleHBlY3QgdG8gc2VlIHRvIGNvdmVyIHRoZSBjaGFuZ2VkIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTI1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDc6NDEuMTg2MDE1ODg5WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxNDI4ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF92YWx1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEyMTU9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjIyLVxcdGlmIChkc3QtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxcbm1tL2RhbW9uL2NvcmUuYzoxMjIzOlxcdFxcdGRzdC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cXHUwMDNlY3VycmVudF92YWx1ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMTIyNC1cXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzEzNz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNTItXFxubW0vZGFtb24vY29yZS5jOjMxNTM6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0zMTU0LVxcdFxcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzE1OS1cXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxubW0vZGFtb24vY29yZS5jOjMxNjA6XFx0XFx0LyogVXNlciBzaG91bGQgYWxyZWFkeSBzZXQgZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSAqL1xcbm1tL2RhbW9uL2NvcmUuYy0zMTYxLVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNjgtXFx0XFx0XFx0XFx0LyogYW4gYWNoaWV2ZWQgc2NvcmUgd291bGQgemVybyB0aGUgdGVtcG9yYWwgcXVvdGEgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzE2OTpcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMzE3MC1cXHRcXHRcXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjMxNzE6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMzE3Mi1cXHRcXHR9IGVsc2Uge1xcbm1tL2RhbW9uL2NvcmUuYzozMTczOlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC1cXG5tbS9kYW1vbi9jb3JlLmMtMzE3NC1cXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTc5LVxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzE4MDpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtX2JwKGdvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMTgxLVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxODMtXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxubW0vZGFtb24vY29yZS5jOjMxODQ6XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTMxODUtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzE4Ny1cXHRjYXNlIERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzE4ODpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXFxubW0vZGFtb24vY29yZS5jLTMxODktXFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxOTEtXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzE5MjpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsXFxubW0vZGFtb24vY29yZS5jLTMxOTMtXFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbmlkKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTk1LVxcdGNhc2UgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMTk2OlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzE5Ny1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjA0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjEwLVxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzIxMTpcXHRcXHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjEyLVxcdFxcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcXG5tbS9kYW1vbi9jb3JlLmM6MzIxMzpcXHRcXHRcXHRcXHRtdWx0X2ZyYWMoZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSwgMTAwMDAsXFxubW0vZGFtb24vY29yZS5jLTMyMTQtXFx0XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKSk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ2LVxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDc6XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDgtXFx0XFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEsIGdvYWwpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTk6XFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVxcdGludCBuaWQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMyMz1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzMi1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzMzpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzQtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzOTpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQwLX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MjpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQzLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0Ni1cXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0NzpcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDgtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQyMj1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjY6XFx0XFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjctXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzND1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzYtXFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNzpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzOC1cXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ci5hdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3MC1cXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NzE6XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NzItXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODA0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTItXFx0aWYgKHNyYy1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxMzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlLCBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTQtXFx0c3dpdGNoIChkc3QtXFx1MDAzZW1ldHJpYykge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzMj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzYtXFx0XFx0LnRhcmdldF92YWx1ZSA9IDEwMDAsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgzNzpcXHRcXHQuY3VycmVudF92YWx1ZSA9IDEyMyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM4LVxcdFxcdC5sYXN0X3BzaV90b3RhbCA9IDQ1NixcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDQtXFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODQ1OlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDYtXFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1MS1cXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gNzg5LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTI6XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAxMn0pO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTMtXFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTYtXFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDM0NSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODU3OlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gNjc4LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTgtXFx0XFx0XFx0Lm5pZCA9IDksXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODYzLVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSAxMixcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODY0OlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjUtXFx0XFx0XFx0Lm5pZCA9IDYsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODcwLVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA0NTYsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg3MTpcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDU2NyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODcyLVxcdFxcdFxcdC5uaWQgPSA2LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3OC1cXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gODkwLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Nzk6XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSA5MDEsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4MC1cXHRcXHRcXHQubmlkID0gMTAsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODg2LVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSAyMzQsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4NzpcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDM0NSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODg4LVxcdFxcdFxcdC5sYXN0X3BzaV90b3RhbCA9IDU2NyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDc6NDEuMzAzMTY0OFoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDM3Mzc4MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgRml4IEFuYWx5c2lzKipcblxuT2theSwgc28gdGhpcyBjaGFuZ2UgaXMgYWxsIGFib3V0IGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgYW5kIHRoYXQgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGZ1bmN0aW9uLiBXaGF0J3MgaGFwcGVuaW5nIGlzIHRoYXQgd2hlbiBjYWxjdWxhdGluZyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AsIGFuZCBjcnVjaWFsbHksIGJlZm9yZSB0aGUgZmlyc3QgUFNJIHNhbXBsZSBpcyBldmVuIHJlY29yZGVkIChtZWFuaW5nIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCBpcyBzdGlsbCBhdCBpdHMgaW5pdGlhbCBgVTY0X01BWGAgdmFsdWUpLCB0aGUgY29kZSBjaGVja3MgaWYgdGhlIGdvYWwgdHVuZXIgaXMgc2V0IHRvIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYC4gSWYgaXQgaXMsIHRoZW4gYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgZ2V0cyBzZXQgdG8gYDBgIGluc3RlYWQgb2YgYGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlYC4gQSBLVW5pdCB0ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIHZlcmlmeSB0aGlzIHNwZWNpZmljIGJlaGF2aW9yLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24sIGFzIGFsd2F5czogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlza3M/IFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3cml0ZXMsIGluZm9ybWF0aW9uIGxlYWtzPyBMZXQncyBicmVhayBpdCBkb3duOlxuXG4qICAgRmlyc3QsIGBsYXN0X3BzaV90b3RhbGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVTY0X01BWGAgd2hlbiBhIGdvYWwgaXMgY3JlYXRlZCBvciBjb21taXR0ZWQsIHdoaWNoIGlzIHRoZSBzZW50aW5lbCB2YWx1ZSB3ZSBhcmUgdGFsa2luZyBhYm91dC5cbiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGludHJvZHVjZWQsIHNvIHRoYXQncyBhIGNoZWNrLlxuKiAgIFRoZXJlJ3Mgbm8gY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UgaGFwcGVuaW5nIGhlcmUuXG4qICAgTm8gcG9pbnRlcnMgb3IgYnVmZmVyIGFjY2Vzc2VzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byByZWFkaW5nIG9mIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZWl0aGVyLlxuKiAgIEtNU0FOIHNob3VsZG4ndCBiZSBjb25jZXJuZWQsIGJlY2F1c2UgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2Ugb3IgYWZmZWN0IGFueSBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBzdGFuZGFyZCBzYW5pdGl6ZXJzIChsaWtlIEtBU0FOKSBhbmQgdGhlIEtVbml0IHRlc3RzIGFyZSBzdWZmaWNpZW50IGhlcmUuXG5cblRvIHJlY2FwIGFuZCBtYWtlIHN1cmUgSSd2ZSBjb3ZlcmVkIGV2ZXJ5dGhpbmcsIHRoaXMgcGF0Y2ggZml4ZXMgdGhlIGluaXRpYWwgY2FsY3VsYXRpb24gb2YgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgd2hlbiB1c2luZyBgREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTGAgKmJlZm9yZSogdGhlIGZpcnN0IFBTSSBtZWFzdXJlbWVudCBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgaXMgdGFrZW4uIFRoYXQgYFU2NF9NQVhgIHZhbHVlIGlzIGEgZGVsaWJlcmF0ZSBzZW50aW5lbCwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZC4gTm8gdXNlciBzcGFjZSBpbnRlcmFjdGlvbiBpcyBhZmZlY3RlZCwgYW5kIG5vdGhpbmcgcmVsYXRlZCB0byBidWZmZXIgYm91bmRzIG9yIGFsbG9jYXRpb24gbG9naWMgY2hhbmdlcy4gT2theSwgdGltZSB0byBkb3VibGUtY2hlY2sgZXZlcnl0aGluZyBvbmUgbGFzdCB0aW1lLiBOb3cgSSBjYW4gaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDcxLCJPdXRwdXRUb2tlbnMiOjI2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzo1MS42NzY5NTExMloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04ncyBxdW90YSBnb2FsIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBtZXRyaWNzIGFuZCBhZGRzIGEgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0LiBTcGVjaWZpY2FsbHksIHdoZW4gYGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVhgIChhIGRvbWFpbi1sZXZlbCBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gUFNJIHNhbXBsZSBoYXMgeWV0IGJlZW4gcmVjb3JkZWQpLCBpdCBzZXRzIGBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMGAgaW5zdGVhZCBvZiBgZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlYCBpZiB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLlxcblxcbkRlc3BpdGUgdGhlIGNvZGUgY29tbWVudCByZWZlcnJpbmcgdG8gXFxcInVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWxcXFwiLCB0aGlzIGlzIHB1cmVseSBhIHNlbWFudGljIHNlbnRpbmVsIHZhbHVlOiBgbGFzdF9wc2lfdG90YWxgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFU2NF9NQVhgIHVwb24gYWxsb2NhdGlvbiBvciBjb21taXQgKGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmApLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBhY2Nlc3NlZCBvciBleHBvc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04ncyBxdW90YSBnb2FsIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBtZXRyaWNzIGFuZCBhZGRzIGEgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0LiBTcGVjaWZpY2FsbHksIHdoZW4gYGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVhgIChhIGRvbWFpbi1sZXZlbCBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gUFNJIHNhbXBsZSBoYXMgeWV0IGJlZW4gcmVjb3JkZWQpLCBpdCBzZXRzIGBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMGAgaW5zdGVhZCBvZiBgZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlYCBpZiB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLlxcblxcbkRlc3BpdGUgdGhlIGNvZGUgY29tbWVudCByZWZlcnJpbmcgdG8gXFxcInVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWxcXFwiLCB0aGlzIGlzIHB1cmVseSBhIHNlbWFudGljIHNlbnRpbmVsIHZhbHVlOiBgbGFzdF9wc2lfdG90YWxgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFU2NF9NQVhgIHVwb24gYWxsb2NhdGlvbiBvciBjb21taXQgKGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmApLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBhY2Nlc3NlZCBvciBleHBvc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sdmq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 06:16:59 +0000 UTC FinishedAt: 2026-09-15 07:07:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b7fee0cd63a958580fc652ac2cb7be0d545f61aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "PSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b7fee0cd63a958580fc652ac2cb7be0d545f61aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "PSI" ], "series_id": "d9c11db9-af53-474d-9f8c-d70bccb18b2e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_set_quota_goal_current_value", "damos_quota_score", "damos_goal_tune_esz_bp_temporal", "damos_set_effective_quota", "damos_adjust_quota" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "b7fee0cd63a958580fc652ac2cb7be0d545f61aa", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUmIzM0OywKICAgICYjMzQ7ZGFtb3NfcXVvdGFfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbCYjMzQ7LAogICAgJiMzNDtkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJiMzOTtzIHF1b3RhIGdvYWwgbG9naWMgaW4gYG1tL2RhbW9uL2NvcmUuY2AgZm9yIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIG1ldHJpY3MgYW5kIGFkZHMgYSBjb3JyZXNwb25kaW5nIEtVbml0IHRlc3QuIFNwZWNpZmljYWxseSwgd2hlbiBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYYCAoYSBkb21haW4tbGV2ZWwgc2VudGluZWwgdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIFBTSSBzYW1wbGUgaGFzIHlldCBiZWVuIHJlY29yZGVkKSwgaXQgc2V0cyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gMGAgaW5zdGVhZCBvZiBgZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWVgIGlmIHRoZSB0dW5lciBpcyBgREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTGAuXG5cbkRlc3BpdGUgdGhlIGNvZGUgY29tbWVudCByZWZlcnJpbmcgdG8gXCYjMzQ7dW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbFwmIzM0OywgdGhpcyBpcyBwdXJlbHkgYSBzZW1hbnRpYyBzZW50aW5lbCB2YWx1ZTogYGxhc3RfcHNpX3RvdGFsYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBVNjRfTUFYYCB1cG9uIGFsbG9jYXRpb24gb3IgY29tbWl0IChgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgYWNjZXNzZWQgb3IgZXhwb3NlZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTi9EQU1PUyBxdW90YSBnb2FsIGV2YWx1YXRpb24gaW4gbW0vZGFtb24vY29yZS5jLCBlbnN1cmluZyB0aGF0IHVubWVhc3VyZWQgUFNJIGdvYWxzIHVuZGVyIGEgdGVtcG9yYWwgZ29hbCB0dW5lciBkbyBub3QgcHJlbWF0dXJlbHkgemVybyB0aGUgZWZmZWN0aXZlIHF1b3RhIGR1cmluZyBpbml0aWFsIHR1bmluZyByb3VuZHMuIFRoaXMgYWx0ZXJzIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBleGVjdXRpb24gYW5kIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NTQyNTU0NWJkYjhjM2JjNDRlYmNlYjZjYTA1NDI2MzkwNjY0ZTMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDE6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAwNmNmMmFiN2U5N2Q3Li5lNmQ4N2ZkMzk5MmVlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMTYxLDEyICYjNDM7MzE2MSwxOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4gXHRcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XG4tXHRcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cbi1cdFx0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcbi1cdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZTtcbi1cdFx0ZWxzZVxuJiM0MztcdFx0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkge1xuJiM0MztcdFx0XHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXG4mIzQzO1x0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPT1cbiYjNDM7XHRcdFx0XHRcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXG4mIzQzO1x0XHRcdFx0LyogYW4gYWNoaWV2ZWQgc2NvcmUgd291bGQgemVybyB0aGUgdGVtcG9yYWwgcXVvdGEgKi9cbiYjNDM7XHRcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWU7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxuIFx0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbiYjNDM7XHRcdH1cbiBcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggYzAxZTZhNzVjYWRjMS4uMmI5YjI0Y2U3ZGFkMyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtODg5LDYgJiM0Mzs4ODksNzQgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0fSk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBVbm1lYXN1cmVkIFBTSSBnb2FscyBtdXN0IG5vdCBkaXNhYmxlIHRoZSB0ZW1wb3JhbCBxdW90YS5cbiYjNDM7ICogS2VlcCBzeiAqIDEwMDAwIHdpdGhpbiBhIDMyLWJpdCB1bnNpZ25lZCBsb25nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xuJiM0MztcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge307XG4mIzQzO1x0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge1xuJiM0MztcdFx0LnN6ID0gU1pfNjRLLFxuJiM0MztcdFx0LmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzID0ge307XG4mIzQzO1x0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgc3JjID0ge1xuJiM0MztcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbiYjNDM7XHRcdC50YXJnZXRfdmFsdWUgPSBVTE9OR19NQVgsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb3MgKnM7XG4mIzQzO1xuJiM0MztcdGlmICghYylcbiYjNDM7XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Y3R4IGFsbG9jIGZhaWxcJiMzNDspO1xuJiM0MztcdHMgPSBkYW1vbl9uZXdfc2NoZW1lKFx1MDAyNnBhdHRlcm4sIERBTU9TX1NUQVQsIDAsIFx1MDAyNnF1b3RhLCBcdTAwMjZ3bWFya3MsXG4mIzQzO1x0XHRcdE5VTUFfTk9fTk9ERSk7XG4mIzQzO1x0aWYgKCFzKSB7XG4mIzQzO1x0XHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiYjNDM7XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c2NoZW1lIGFsbG9jIGZhaWxcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XHRkYW1vbl9hZGRfc2NoZW1lKGMsIHMpO1xuJiM0MztcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsIFVMT05HX01BWCk7XG4mIzQzO1x0aWYgKCFnb2FsKSB7XG4mIzQzO1x0XHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiYjNDM7XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Z29hbCBhbGxvYyBmYWlsXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2cy1cdTAwM2VxdW90YSwgZ29hbCk7XG4mIzQzO1xuJiM0MztcdC8qIGZyZXNoIGdvYWwsIGZpcnN0IHR1bmluZyByb3VuZCAqL1xuJiM0MztcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuJiM0MztcbiYjNDM7XHQvKiBzZWNvbmQgcm91bmQ6IGxhc3RfcHNpX3RvdGFsIGlzIGluaXRpYWxpc2VkIG5vdyAqL1xuJiM0MztcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuJiM0MztcbiYjNDM7XHQvKiBjb21taXQgYSBQU0kgZ29hbCBvbnRvIHRoZSBpbml0aWFsaXNlZCBQU0kgZ29hbCAqL1xuJiM0MztcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNnNyYyk7XG4mIzQzO1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7XG4mIzQzO1xuJiM0MztcdC8qIGEgbWVhc3VyZWQgcm91bmQgdGhhdCByZWFjaGVzIHRoZSB0YXJnZXQgZGlzYWJsZXMgdGhlIHF1b3RhICovXG4mIzQzO1x0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUgPSAxMDtcbiYjNDM7XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpIC0gMTA7XG4mIzQzO1x0LyogVTY0X01BWCBtYXJrcyBhbiB1bm1lYXN1cmVkIGdvYWwsIGtlZXAgdGhlIHNhbXBsZSBhd2F5IGZyb20gaXQgKi9cbiYjNDM7XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKVxuJiM0MztcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbC0tO1xuJiM0MztcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAwdWwpO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgY29uc2lzdCB0dW5lciBrZWVwcyBpdHMgcXVvdGEgb3ZlciBhbiB1bm1lYXN1cmVkIHJvdW5kICovXG4mIzQzO1x0cy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyID0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUO1xuJiM0MztcdHMtXHUwMDNlcXVvdGEuZXN6X2JwID0gU1pfMzJLICogMTAwMDA7XG4mIzQzO1x0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2c3JjKTtcbiYjNDM7XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfMzJLKTtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FscywgaW50IG5yX2RzdF9nb2FscyxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyY19nb2FscywgaW50IG5yX3NyY19nb2FscylcbkBAIC0xODg3LDYgJiM0MzsxOTU1LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9uZXdfZmlsdGVyKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbCksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzKSxcbiYjNDM7XHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2kpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YSksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfZmlsdGVyKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtQU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlJiMzNDssCiAgICAmIzM0O2RhbW9zX3F1b3RhX3Njb3JlJiMzNDssCiAgICAmIzM0O2RhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwmIzM0OywKICAgICYjMzQ7ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSYjMzQ7LAogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04vREFNT1MgcXVvdGEgZ29hbCBldmFsdWF0aW9uIGluIG1tL2RhbW9uL2NvcmUuYywgZW5zdXJpbmcgdGhhdCB1bm1lYXN1cmVkIFBTSSBnb2FscyB1bmRlciBhIHRlbXBvcmFsIGdvYWwgdHVuZXIgZG8gbm90IHByZW1hdHVyZWx5IHplcm8gdGhlIGVmZmVjdGl2ZSBxdW90YSBkdXJpbmcgaW5pdGlhbCB0dW5pbmcgcm91bmRzLiBUaGlzIGFsdGVycyBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgZXhlY3V0aW9uIGFuZCBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04mIzM5O3Mgc3lzZnMgaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODU0MjU1NDViZGI4YzNiYzQ0ZWJjZWI2Y2EwNTQyNjM5MDY2NGUzMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA3OjAxOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDA2Y2YyYWI3ZTk3ZDcuLmU2ZDg3ZmQzOTkyZWUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTMxNjEsMTIgJiM0MzszMTYxLDE4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYywKIAkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6CiAJCW5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7Ci0JCS8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi8KLQkJaWYgKGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpCi0JCQlnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlOwotCQllbHNlCiYjNDM7CQlpZiAoZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkgewomIzQzOwkJCS8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi8KJiM0MzsJCQlpZiAocy0mZ3Q7cXVvdGEuZ29hbF90dW5lciA9PQomIzQzOwkJCQkJREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCkKJiM0MzsJCQkJLyogYW4gYWNoaWV2ZWQgc2NvcmUgd291bGQgemVybyB0aGUgdGVtcG9yYWwgcXVvdGEgKi8KJiM0MzsJCQkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IDA7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlOwomIzQzOwkJfSBlbHNlIHsKIAkJCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0KIAkJCQlnb2FsLSZndDtsYXN0X3BzaV90b3RhbDsKJiM0MzsJCX0KIAkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsOwogCQlicmVhazsKIAljYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggYzAxZTZhNzVjYWRjMS4uMmI5YjI0Y2U3ZGFkMyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtODg5LDYgJiM0Mzs4ODksNzQgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCQl9KTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVW5tZWFzdXJlZCBQU0kgZ29hbHMgbXVzdCBub3QgZGlzYWJsZSB0aGUgdGVtcG9yYWwgcXVvdGEuCiYjNDM7ICogS2VlcCBzeiAqIDEwMDAwIHdpdGhpbiBhIDMyLWJpdCB1bnNpZ25lZCBsb25nLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTsKJiM0MzsJc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIHBhdHRlcm4gPSB7fTsKJiM0MzsJc3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0gewomIzQzOwkJLnN6ID0gU1pfNjRLLAomIzQzOwkJLmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3MgPSB7fTsKJiM0MzsJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgc3JjID0gewomIzQzOwkJLm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUywKJiM0MzsJCS50YXJnZXRfdmFsdWUgPSBVTE9OR19NQVgsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsOwomIzQzOwlzdHJ1Y3QgZGFtb3MgKnM7CiYjNDM7CiYjNDM7CWlmICghYykKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtjdHggYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJcyA9IGRhbW9uX25ld19zY2hlbWUoJmFtcDtwYXR0ZXJuLCBEQU1PU19TVEFULCAwLCAmYW1wO3F1b3RhLCAmYW1wO3dtYXJrcywKJiM0MzsJCQlOVU1BX05PX05PREUpOwomIzQzOwlpZiAoIXMpIHsKJiM0MzsJCWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwomIzQzOwkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O3NjaGVtZSBhbGxvYyBmYWlsJiMzNDspOwomIzQzOwl9CiYjNDM7CWRhbW9uX2FkZF9zY2hlbWUoYywgcyk7CiYjNDM7CWdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsIFVMT05HX01BWCk7CiYjNDM7CWlmICghZ29hbCkgewomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoYyk7CiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7Z29hbCBhbGxvYyBmYWlsJiMzNDspOwomIzQzOwl9CiYjNDM7CWRhbW9zX2FkZF9xdW90YV9nb2FsKCZhbXA7cy0mZ3Q7cXVvdGEsIGdvYWwpOwomIzQzOwomIzQzOwkvKiBmcmVzaCBnb2FsLCBmaXJzdCB0dW5pbmcgcm91bmQgKi8KJiM0MzsJZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtJmd0O3F1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTsKJiM0MzsKJiM0MzsJLyogc2Vjb25kIHJvdW5kOiBsYXN0X3BzaV90b3RhbCBpcyBpbml0aWFsaXNlZCBub3cgKi8KJiM0MzsJZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtJmd0O3F1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTsKJiM0MzsKJiM0MzsJLyogY29tbWl0IGEgUFNJIGdvYWwgb250byB0aGUgaW5pdGlhbGlzZWQgUFNJIGdvYWwgKi8KJiM0MzsJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgJmFtcDtzcmMpOwomIzQzOwlkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy0mZ3Q7cXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspOwomIzQzOwomIzQzOwkvKiBhIG1lYXN1cmVkIHJvdW5kIHRoYXQgcmVhY2hlcyB0aGUgdGFyZ2V0IGRpc2FibGVzIHRoZSBxdW90YSAqLwomIzQzOwlnb2FsLSZndDt0YXJnZXRfdmFsdWUgPSAxMDsKJiM0MzsJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCkgLSAxMDsKJiM0MzsJLyogVTY0X01BWCBtYXJrcyBhbiB1bm1lYXN1cmVkIGdvYWwsIGtlZXAgdGhlIHNhbXBsZSBhd2F5IGZyb20gaXQgKi8KJiM0MzsJaWYgKGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpCiYjNDM7CQlnb2FsLSZndDtsYXN0X3BzaV90b3RhbC0tOwomIzQzOwlkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy0mZ3Q7cXVvdGEuZXN6LCAwdWwpOwomIzQzOwomIzQzOwkvKiB0aGUgY29uc2lzdCB0dW5lciBrZWVwcyBpdHMgcXVvdGEgb3ZlciBhbiB1bm1lYXN1cmVkIHJvdW5kICovCiYjNDM7CXMtJmd0O3F1b3RhLmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1Q7CiYjNDM7CXMtJmd0O3F1b3RhLmVzel9icCA9IFNaXzMySyAqIDEwMDAwOwomIzQzOwlkYW1vc19jb21taXRfcXVvdGFfZ29hbChnb2FsLCAmYW1wO3NyYyk7CiYjNDM7CWRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLSZndDtxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzMySyk7CiYjNDM7CiYjNDM7CWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsCiAJCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbHMsIGludCBucl9kc3RfZ29hbHMsCiAJCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmNfZ29hbHMsIGludCBucl9zcmNfZ29hbHMpCkBAIC0xODg3LDYgJiM0MzsxOTU1LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfbmV3X2ZpbHRlciksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKSwKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzKSwKJiM0MzsJS1VOSVRfQ0FTRShkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKSwKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhKSwKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzKSwKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlciksCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaDogUXVvdGEgR29hbCBBZGp1c3RtZW50IGFuZCBLVW5pdCBUZXN0KioKCk9rYXksIHNvIEkgc2VlIGEgcGF0Y2ggc3VibWl0dGVkIGZvciBEQU1PTiwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgbW0vZGFtb24vY29yZS5jYCBhbmQgYSBuZXcgS1VuaXQgdGVzdCBpbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gTGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBnb2FsIGlzIHRvIGV2YWx1YXRlIHRoaXMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2h5LgoKRmlyc3QsIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBjb2RlIGRpZmYgaW4gYGNvcmUuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgbGluZSAzMTYxLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaG93IERBTU9OIHNldHMgdGhlIGBjdXJyZW50X3ZhbHVlYCBmb3IgcXVvdGEgZ29hbHMsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBxdW90YSB0YXJnZXQgaXMgYmFzZWQgb24gc29tZSBraW5kIG9mIFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pLiBUaGUgY29kZSBhZGRyZXNzZXMgdGhlIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGNhc2UuCgpCZWZvcmUgdGhpcyBjaGFuZ2UsIGlmIGBsYXN0X3BzaV90b3RhbGAgd2FzIHVuaW5pdGlhbGl6ZWQgKGBVNjRfTUFYYCksIHRoZSBgY3VycmVudF92YWx1ZWAgd291bGQganVzdCBiZSBzZXQgdG8gdGhlIGB0YXJnZXRfdmFsdWVgLiBOb3csIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY2hlY2suICBJZiB0aGUgcXVvdGEgdHVuZXIgaXMgdGVtcG9yYWwgKGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYCkgYW5kIGBsYXN0X3BzaV90b3RhbGAgaXMgdW5pbml0aWFsaXplZCwgdGhlIGBjdXJyZW50X3ZhbHVlYCBiZWNvbWVzIHplcm8uIE90aGVyd2lzZSwgaXQgYmVoYXZlcyBhcyBiZWZvcmUgKHdpdGggYW4gdW5pbml0aWFsaXplZCBgbGFzdF9wc2lfdG90YWxgKS4gSWYgYGxhc3RfcHNpX3RvdGFsYCBoYXMgYmVlbiBpbml0aWFsaXplZCwgdGhlIGBjdXJyZW50X3ZhbHVlYCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IFBTSSB0b3RhbCBhbmQgdGhlIGxhc3Qgb25lLiBUaGUgYGxhc3RfcHNpX3RvdGFsYCBpcyB1cGRhdGVkIGluIGVpdGhlciB0aGUgaW5pdGlhbGl6ZWQgb3IgdW5pbml0aWFsaXplZCBjYXNlLgoKRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBsb29rcyBsaWtlIGEgcmVmaW5lbWVudCBpbiB0aGUgdGVtcG9yYWwgcXVvdGEgYWRqdXN0bWVudCBsb2dpYy4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBtYWtlIHRoZSB0ZW1wb3JhbCBxdW90YSB6ZXJvIGlmIHVuaW5pdGlhbGl6ZWQsIHJhdGhlciB0aGFuIGJlaW5nIHNldCB0byB0aGUgdGFyZ2V0IHZhbHVlLgoKSSBhbHNvIHNlZSBhIG5ldyBLVW5pdCB0ZXN0LCBgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaWAuIFRoaXMgaXMgZ3JlYXQuIEl0JiMzOTtsbCBiZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSB0ZXN0IGlzIHZlcmlmeWluZywgd2hpY2ggd2lsbCBzaGVkIG1vcmUgbGlnaHQgb24gdGhlIGludGVuZGVkIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHRlc3QgY29kZSBpbiBgY29yZS1rdW5pdC5oYCB0byBzZWUgdGhlIHNwZWNpZmljcy4gTXkgZ3Vlc3MgaXMgaXQgdmVyaWZpZXMgdGhlIG5ldyBjb25kaXRpb25hbCBsb2dpYyBJIGp1c3QgZGVzY3JpYmVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgUFNJIHZhbHVlcyBhcmUgc2V0IHVwIGFuZCBob3cgdGhlIGBjdXJyZW50X3ZhbHVlYCBpcyBhc3NlcnRlZCBpbiB0aGUgdGVzdC4gVGhlIHRlc3Qgd2lsbCBob3BlZnVsbHkgc2hvdyBtZSB0aGUgc2NlbmFyaW9zIHRoaXMgbG9naWMgaGFuZGxlcywgd2hpY2ggaXMga2V5LiBNeSBleHBlcmllbmNlIHdpdGggREFNT04gdGVsbHMgbWUgdGhpcyBsaWtlbHkgYWltcyB0byBmaW5lLXR1bmUgdGhlIHF1b3RhIGJlaGF2aW9yIGluIGVkZ2UgY2FzZXMgb3IgYXQgdGhlIHN0YXJ0IG9mIERBTU9OJiMzOTtzIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE1MDpcdFx0cmV0dXJuIG11bHRfZnJhYyh0aHAsIDEwMDAwLCB0b3RhbF9wYWdlcyAtIGZyZWVfcGFnZXMpO1xuMzE1MTpcdH1cbjMxNTI6XHRcbjMxNTM6XHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4zMTU0Olx0XHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4zMTU1Olx0e1xuMzE1NjpcdFx0dTY0IG5vd19wc2lfdG90YWw7XG4zMTU3Olx0XG4zMTU4Olx0XHRzd2l0Y2ggKGdvYWwtXHUwMDNlbWV0cmljKSB7XG4zMTU5Olx0XHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XG4zMTYwOlx0XHRcdC8qIFVzZXIgc2hvdWxkIGFscmVhZHkgc2V0IGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSAqL1xuMzE2MTpcdFx0XHRicmVhaztcbjMxNjI6XHRcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxuMzE2MzpcdFx0XHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuMzE2NDpcdFx0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XG4zMTY1Olx0XHRcdFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xuMzE2NjpcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPT1cbjMxNjc6XHRcdFx0XHRcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbjMxNjg6XHRcdFx0XHRcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXG4zMTY5Olx0XHRcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xuMzE3MDpcdFx0XHRcdGVsc2VcbjMxNzE6XHRcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuMzE3MjpcdFx0XHR9IGVsc2Uge1xuMzE3MzpcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxuMzE3NDpcdFx0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbjMxNzU6XHRcdFx0fVxuMzE3NjpcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcbjMxNzc6XHRcdFx0YnJlYWs7XG4zMTc4Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4zMTc5Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4zMTgwOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbV9icChnb2FsKTtcbjMxODE6XHRcdFx0YnJlYWs7XG4zMTgyOlx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbjMxODM6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxuMzE4NDpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xuMzE4NTpcdFx0XHRicmVhaztcbjMxODY6XHRcdGNhc2UgREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUDpcbjMxODc6XHRcdGNhc2UgREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxuMzE4ODpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcbjMxODk6XHRcdFx0XHRcdGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xuMzE5MDpcdFx0XHRicmVhaztcbjMxOTE6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XG4zMTkyOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLFxuMzE5MzpcdFx0XHRcdFx0Z29hbC1cdTAwM2VuaWQpO1xuMzE5NDpcdFx0XHRicmVhaztcbjMxOTU6XHRcdGNhc2UgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQOlxuMzE5NjpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcbjMxOTc6XHRcdFx0YnJlYWs7XG4zMTk4Olx0XHRkZWZhdWx0OlxuMzE5OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzY2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIENhbGxzIHRvIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbGVycyBvZiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlYnVnZ2luZyB0YXNrLCBidXQgdGhlIGFwcHJvYWNoIEkgdGFrZSB3aWxsIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4KCk15IGluaXRpYWwgYXBwcm9hY2ggd291bGQgYmUgdG8gdXNlIGEgc3RhdGljIGFuYWx5c2lzIHRvb2wsIGxpa2UgZ3JlcCB3aXRoIHNvbWUganVkaWNpb3VzIHVzZSBvZiByZWdleCwgdG8gc2VhcmNoIHRoZSBlbnRpcmUgcHJvamVjdCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGlzIGdpdmVzIG1lIGEgcXVpY2sgb3ZlcnZpZXcgb2YgYWxsIHBvdGVudGlhbCBjYWxsIHNpdGVzLiBIb3dldmVyLCBzdGF0aWMgYW5hbHlzaXMgY2FuIGJlIGEgYml0IGJsdW50OyBpdCBtaWdodCBtaXNzIGNhbGxzIGlmIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIG1hY3JvIGV4cGFuc2lvbnMuIEkmIzM5O2QgdGhlbiBoYXZlIHRvIHJlZmluZSB0aGUgc2VhcmNoLgoKSWYgdGhhdCBwcm92ZXMgaW5zdWZmaWNpZW50LCBvciBpZiB0aGUgY29kZSBpcyBwYXJ0aWN1bGFybHkgY29tcGxleCwgSSYjMzk7bGwgbmVlZCB0byBlbXBsb3kgYSBkZWJ1Z2dlci4gSSBjYW4gc2V0IGEgYnJlYWtwb2ludCBvbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgYW5kIHRoZW4gcnVuIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGEgdGVzdCBjYXNlIHRoYXQgSSBrbm93IHNob3VsZCB0cmlnZ2VyIGl0cyBleGVjdXRpb24uIFRoaXMgaXMgd2hlcmUgYSBnb29kIHRlc3QgZW52aXJvbm1lbnQgY29tZXMgaW4gaGFuZHkuIFN0ZXBwaW5nIHRocm91Z2ggdGhlIGNvZGUgd2lsbCBzaG93IG1lIHRoZSBhY3R1YWwgY2FsbCBzdGFjayBhbmQgYWxsb3cgbWUgdG8gb2JzZXJ2ZSB0aGUgZXhlY3V0aW9uIGNvbnRleHQgbGVhZGluZyB1cCB0byB0aGUgZnVuY3Rpb24gY2FsbC4gSSBjYW4gYWxzbyBsb29rIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBjb250cm9scyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgZXZlciBjYWxsZWQsIG9yIGlzIGNhbGxlZCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLgoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyBhIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIFRoaXMgbWlnaHQgaW52b2x2ZSBhIGNvbWJpbmF0aW9uIG9mIHN0YXRpYyBhbmFseXNpcywgZHluYW1pYyBkZWJ1Z2dpbmcsIGFuZCBldmVuIHNvbWUgY29kZSByZXZpZXcgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMxMzc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19odWdlcGFnZV9tZW1fYnAodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE1Mi1cbm1tL2RhbW9uL2NvcmUuYzozMTUzOnN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0zMTU0LVx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjA0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzIxMC1cdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcbm1tL2RhbW9uL2NvcmUuYzozMjExOlx0XHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMyMTItXHRcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDE1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipUcmFjaW5nIHRoZSBMaW5lYWdlIG9mIGBkYW1vc19xdW90YV9zY29yZWAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIGh1bnQgZG93biB3aGVyZSBgZGFtb3NfcXVvdGFfc2NvcmVgIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IHNpZ25pZmljYW50IGludmVzdGlnYXRpb24sIHJpZ2h0PyBJIHdhbnQgdG8gc2VlIGFsbCB0aGUgY2FsbGVycywgYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIGlzIGFic29sdXRlbHkgY3J1Y2lhbDsgaXQgdGVsbHMgbWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGRhbW9zX3F1b3RhX3Njb3JlYCBvcGVyYXRlcyBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0cyBvdXRwdXQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyBpdHMgcm9sZSB3aXRoaW4gdGhlIHdpZGVyIGZyYW1ld29yaywgaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvciBldmVuIGFudGljaXBhdGUgdGhlIHJpcHBsZSBlZmZlY3RzIG9mIGFueSBjaGFuZ2VzIEkgbWlnaHQgbWFrZSB0byB0aGF0IGZ1bmN0aW9uLiBTbywgc2hvdyBtZSB0aGUgY2FsbGVycyEgTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfcXVvdGFfc2NvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjAzLS8qIFJldHVybiB0aGUgaGlnaGVzdCBzY29yZSBzaW5jZSBpdCBtYWtlcyBzY2hlbWVzIGxlYXN0IGFnZ3Jlc3NpdmUgKi9cbm1tL2RhbW9uL2NvcmUuYzozMjA0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy0zMjA1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzIyMD1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjIyLVx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG5tbS9kYW1vbi9jb3JlLmM6MzIyMzpcdHVuc2lnbmVkIGxvbmcgc2NvcmUgPSBkYW1vc19xdW90YV9zY29yZShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMjI0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjI5PXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzIzMi1cdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jOjMyMzM6XHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzIzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjIzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBDYWxsZXJzIHRvIERBTU9TIFR1bmluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyB0aGVzZSBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAgYW5kIGBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3RgIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBrbm93aW5nIHRoZWlyIGJhc2ljIGRlZmluaXRpb24g4oCTIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICpjb250ZXh0KiBvZiB0aGVpciBjYWxscy4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBtb2R1bGVzLCBjbGFzc2VzLCBvciBmdW5jdGlvbnMgYXJlIHJlbHlpbmcgb24gdGhlbS4gQXJlIHRoZXkgYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gdG9wLWxldmVsIHNjcmlwdHMsIG9yIGFyZSB0aGV5IGJ1cmllZCBkZWVwIHdpdGhpbiBhIGNvbXBsZXggYXJjaGl0ZWN0dXJlPyBXaGF0IGRhdGEgYXJlIHRoZXkgcmVjZWl2aW5nIGFzIGlucHV0PyBXaGF0IGlzIHRoZWlyIGV4cGVjdGVkIG91dHB1dCwgYW5kIHdoZXJlIGRvZXMgdGhhdCBvdXRwdXQgZ28/IFRoaXMgaGVscHMgcGFpbnQgYSBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSB3aG9sZSBzeXN0ZW0uIFRoaXMgYW5hbHlzaXMgc2hvdWxkIGhlbHAgbWUsIGJhc2VkIG9uIHRoZSByZXN1bHRzLCB0byBmb3JtIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHR1bmluZyBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgdG8gc3VwcG9ydCB0aGUgb3ZlcmFsbCBnb2FsIG9mIHRoZSBzeXN0ZW0uIEkgd2lsbCBuZWVkIHRvIHVzZSBjYWxsIGdyYXBoIGFuYWx5c2lzLCBjcm9zcy1yZWZlcmVuY2luZywgb3IgcGVyaGFwcyBldmVuIGR5bmFtaWMgYW5hbHlzaXMgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19nb2FsX3R1bmVfZXN6X2JwXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzIwND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyMTktXG5tbS9kYW1vbi9jb3JlLmM6MzIyMDpzdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyMjEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjI4LVxubW0vZGFtb24vY29yZS5jOjMyMjk6c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxubW0vZGFtb24vY29yZS5jLTMyMzAtXHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI0Nj1zdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjU5LVx0XHRpZiAocXVvdGEtXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QpXG5tbS9kYW1vbi9jb3JlLmM6MzI2MDpcdFx0XHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3QoY3R4LCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMjYxLVx0XHRlbHNlIGlmIChxdW90YS1cdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXG5tbS9kYW1vbi9jb3JlLmM6MzI2MjpcdFx0XHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKGN0eCwgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzI2My1cdFx0ZXN6ID0gcXVvdGEtXHUwMDNlZXN6X2JwIC8gMTAwMDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgcGF0dGVybnMgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgY2FsbHMgdG8gYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/JiMzNDsgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8ga25vdyB0aGUgY29kZWJhc2UgbG9jYXRpb25zIGFuZCBjb250ZXh0cyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGVhY2ggY2FsbC4gQXJlIHdlIHRhbGtpbmcgY29yZSBxdW90YSBtYW5hZ2VtZW50IGxvZ2ljLCBhIHNwZWNpZmljIGZlYXR1cmUsIG9yIHBvdGVudGlhbGx5LCBhIHRlc3QgaGFybmVzcz8KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGFyZ3VtZW50cyBwYXNzZWQuICpXaGF0KiBpcyBiZWluZyBzZXQ/IFF1b3RhIHR5cGUsIHZhbHVlcywgb3RoZXIgcGFyYW1ldGVycz8gS25vd2luZyB0aGUgYXJndW1lbnRzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5IGFuZCB0aGUgZGF0YSBpdCBvcGVyYXRlcyBvbi4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIGFyZ3VtZW50cyBhcmUgZGVyaXZlZC4gQXJlIHRoZXkgY29taW5nIGZyb20gdXNlciBpbnB1dCwgY29uZmlndXJhdGlvbiBmaWxlcywgY2FsY3VsYXRlZCB2YWx1ZXMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHNvdXJjZSBoZWxwcyBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGxvZ2ljYWwgZmxhd3MuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyAqd2hlbiogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEFyZSB0aGVzZSBxdW90YSBhZGp1c3RtZW50cyB0cmlnZ2VyZWQgYnkgdXNlciBhY3Rpb25zLCBiYWNrZ3JvdW5kIHByb2Nlc3Nlcywgc3lzdGVtIGV2ZW50cywgb3Igc29tZXRoaW5nIGVsc2U/IFRoZSB0aW1pbmcgaGFzIGEgYmlnIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBxdW90YSBtYW5hZ2VtZW50IHN5c3RlbSYjMzk7cyBiZWhhdmlvciwgYW5kIGhvdyB3ZSBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMuIElzIHRoZXJlIGFueSBsb2NraW5nIGludm9sdmVkPyBBbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uPwoKRmluYWxseSwgd2hhdCBhcmUgdGhlICpjb25zZXF1ZW5jZXMqIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhlY3V0aW9uPyBEb2VzIGl0IGRpcmVjdGx5IG1vZGlmeSBhIGRhdGFiYXNlLCB1cGRhdGUgY2FjaGVzLCB0cmlnZ2VyIG5vdGlmaWNhdGlvbnMsIG9yIHNvbWUgY29tYmluYXRpb24gb2YgdGhlc2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlIGVmZmVjdHMuIEFuZCBtb3N0IGltcG9ydGFudGx5LCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaGVyZT8gQ2FuIG1hbGljaW91cyBhY3RvcnMgZXhwbG9pdCB0aGVzZSBjYWxscyB0byBieXBhc3MgcXVvdGEgbGltaXRzLCBjYXVzZSBkZW5pYWwgb2Ygc2VydmljZSwgb3IgbWFuaXB1bGF0ZSBkYXRhPyBLbm93aW5nIHdoZXJlIHRoaXMgY2FsbCBsaXZlcyBpcyBrZXkuIElzIGl0IGluIGNvZGUgdGhhdCBsaXZlcyBvbiB0aGUgc2VydmVyLCBhIGNsaWVudCBvciBpbiBzb21lIG90aGVyIGNvbnRleHQ/IEkgd2FudCB0byBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW4gYXR0YWNrIHN1cmZhY2UuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBlbnRpcmUgY2FsbCBncmFwaCwgdGhlIGFyZ3VtZW50cywgdGhlIHRpbWluZywgYW5kIHRoZSB1bHRpbWF0ZSBpbXBhY3QgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzIyOT1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyNDUtICovXG5tbS9kYW1vbi9jb3JlLmM6MzI0NjpzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyNDcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjk2PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMDktXHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG5tbS9kYW1vbi9jb3JlLmM6MzMxMDpcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzExLVx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMyNS1cdFx0XHRjYWNoZWRfZXN6ID0gcXVvdGEtXHUwMDNlZXN6O1xubW0vZGFtb24vY29yZS5jOjMzMjY6XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzMyNy1cdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyOC1cdC8qIGZyZXNoIGdvYWwsIGZpcnN0IHR1bmluZyByb3VuZCAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkyOTpcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTMwLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MzItXHQvKiBzZWNvbmQgcm91bmQ6IGxhc3RfcHNpX3RvdGFsIGlzIGluaXRpYWxpc2VkIG5vdyAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkzMzpcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTM0LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MzctXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChnb2FsLCBcdTAwMjZzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkzODpcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTM5LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDYtXHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwtLTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NDc6XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk0OC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgMHVsKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTUzLVx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NTQ6XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk1NS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfMzJLKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc0NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKlRyYWNpbmcgRG93biBhIERBTU9OIFF1b3RhIElzc3VlKioKCk9rYXksIHNvIGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgYW5kIGl0JiMzOTtzIG5lc3RsZWQgZGVlcCBpbiBgbW0vZGFtb24vY29yZS5jYC4gIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzICpjYWxsaW5nKiBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gSSYjMzk7bGwgd2FudCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbjsgdW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBnb2luZyB0byBpbGx1bWluYXRlIHRoZSBjaXJjdW1zdGFuY2VzIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uIGFuZCBnaXZlIG1lIHNvbWUgY29udGV4dC4gSXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgdG8gZmlndXJpbmcgb3V0IGFueSBxdW90YS1yZWxhdGVkIHByb2JsZW1zIHRoYXQgbWF5IGJlIGFyaXNpbmcgd2l0aGluIERBTU9OLiBUaW1lIHRvIGRpZyBpbiBhbmQgY2hlY2sgdGhvc2UgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMjgyPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyOTUtXG5tbS9kYW1vbi9jb3JlLmM6MzI5NjpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyOTcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzc3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzkyLVxubW0vZGFtb24vY29yZS5jOjMzOTM6XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzk0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE3NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBEQU1PTiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGxpdmVzIHdpdGhpbiB0aGUgYGtkYW1vbmRfZm5gIHdvcmtlciB0aHJlYWQsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGJyb2FkZXIgYGtkYW1vbmRgIGluZnJhc3RydWN0dXJlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgY29udGV4dHVhbGl6ZXMgaXRzIHJvbGUuIFRoZW4gdGhlcmUmIzM5O3MgdGhpcyBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gLCBwcm92aWRpbmcgdXNlcnNwYWNlIGNvbnRyb2wgb3ZlciBEQU1PTiBxdW90YXMsIGdvYWxzLCBhbmQgc28gb24uIE15IG5leHQgc3RlcCBoZXJlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSByZWxldmFudCBgS2NvbmZpZ2Agb3B0aW9ucyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5hYmxlbWVudCBjcml0ZXJpYSBmb3IgYm90aCBEQU1PTiBpbiBnZW5lcmFsLCBhbmQgc3BlY2lmaWNhbGx5IHRoaXMgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyByZXF1aXJlZCBhdCBjb21waWxlIHRpbWUgZm9yIGFsbCBvZiB0aGlzIHRvIGJlIGF2YWlsYWJsZSwgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2luZy4gVGhpcyBpcyBmdW5kYW1lbnRhbDsgdW5kZXJzdGFuZGluZyB0aGUgcHJlcmVxdWlzaXRlcyB1cGZyb250IHNhdmVzIGEgbG90IG9mIHdhc3RlZCBlZmZvcnQgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29yZSBCdWlsZCBhbmQgUFNJIFF1b3RhIEVuYWJsZW1lbnQqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgYGNvcmUuY2AgYnVpbGQgYW5kIHRob3NlIFBTSSBxdW90YSBnb2Fscy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBtbS9kYW1vbi9NYWtlZmlsZWAuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBjb3JlLmNgIGFyZSBkZWZpbmVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb25zIG9yIGJ1aWxkIGZsYWdzIHJlbGF0ZWQgdG8gUFNJIHF1b3RhIGludGVncmF0aW9uIHdvdWxkIGJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gc2VlIGlmIGBjb3JlLmNgIGlzIGJlaW5nIGNvbXBpbGVkIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMgb3IgaWYgaXQmIzM5O3MgZ2VuZXJhbGx5IGluY2x1ZGVkLiBGdXJ0aGVybW9yZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIHJlbGF0ZWQgdG8gUFNJIHF1b3RhIHN1cHBvcnQg4oCTIHBlcmhhcHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MsIG9iamVjdCBmaWxlIGluY2x1c2lvbiwgb3IgbGlua2VyIGRpcmVjdGl2ZXMgdGhhdCBhcmUgdHJpZ2dlcmVkIGJ5IGEgcGFydGljdWxhciBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcyYjMzk7bGwgcmVxdWlyZSBhIGJpdCBvZiBjcm9zcy1yZWZlcmVuY2luZyBhbmQgcG90ZW50aWFsbHkgc29tZSBgZ3JlcGBpbmcgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgc3VidGxlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgZm9yIGRpYWdub3NpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHVuZGVyc3RhbmRpbmcgaG93IFBTSSBxdW90YSBpbnRlcmFjdGlvbnMgYXJlIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzQ1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfREFNT05gLiBUaGUgS2NvbmZpZyBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydCwgc28gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGNoZWNrIG91dCBgbW0vZGFtb24vS2NvbmZpZ2AuIExldCYjMzk7cyBnZXQgYSBnb29kIHBpY3R1cmUgb2YgdGhlIHNpdHVhdGlvbi4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGZpcnN0IDQwIGxpbmVzIG9mIHRoZSBmaWxlLCBqdXN0IHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZCBhbmQgdW5kZXJzdGFuZCB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuIEhvcGVmdWxseSwgdGhhdCBnaXZlcyBtZSBlbm91Z2ggY29udGV4dCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBEQU1PTlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxuICAgOTpcdFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcbiAgMTA6XHRcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXG4gIDEzOlx0XHQgIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxuICAxNjpcdFx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBEQU1PTlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG4gIDIwOlx0XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxuICAyMTpcdFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuICAyMjpcdFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxuICAyNzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI4Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDI5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAzMDpcdFx0aGVscFxuICAzMTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDM0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICAzNTpcdFxuICAzNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBEQU1PTl9WQUREUlxuICAzOTpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbiAgNDA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ2MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIERBTU9OIFN5c2ZzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gREFNT04g4oCTIER5bmFtaWMgQWNjZXNzIE1vbml0b3Jpbmcg4oCTIGFnYWluLiBSaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGBDT05GSUdfREFNT05fU1lTRlNgLCBhbmQgdGhlIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgaXMgdHVja2VkIGF3YXkgaW4gYG1tL2RhbW9uL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgbWFpbiBmZWF0dXJlIGZsYWdzIGZvciBEQU1PTiB3aWxsIGJlIHNldCB1cC4gVGltZSB0byBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgdGhlIGRlZmF1bHQgdmFsdWUgaXMsIGFuZCBvZiBjb3Vyc2UsIHdoYXQmIzM5O3MgYmVlbiBzYWlkIGluIGNvbW1lbnRzIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBob29rcyBpbnRvIHN5c2ZzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4gIDgxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgODI6XHRcbiAgODM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDg0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA4NTpcdFxuICA4NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4NzpcdFxuICA4ODpcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXG4gIDg5Olx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4gIDkwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xuICA5MzpcdFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG4gIDk0Olx0XHQgIHRob3NlLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxuICA5NzpcdFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXG4gIDk4Olx0XHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxuICA5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE5OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgUFNJIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgYGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWxgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIGdyYWJiaW5nIHNvbWUga2luZCBvZiBQU0kgKFByZXNzdXJlIFN0YWxsIEluZm9ybWF0aW9uKSByZWxhdGVkIG1lbW9yeSBkYXRhLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIHRoaW5nIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBmdW5jdGlvbi4gSXMgaXQgaW4gdGhlIG1haW4gY29kZWJhc2UsIG9yIG1heWJlIGEgc2VwYXJhdGUgY29uZmlndXJhdGlvbiBmaWxlPyBJIGhhdmUgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZGVwZW5kZW5jeSBsaWVzIGFuZCBob3cgdGhpcyBQU0kgZGF0YSBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLCB0byBkZXRlcm1pbmUgaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI4NjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQodW5zaWduZWQgbG9uZyBsYXN0X2lucHV0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODk0LVxubW0vZGFtb24vY29yZS5jOjI4OTU6c3RhdGljIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtMjg5Ni17XG4tLVxubW0vZGFtb24vY29yZS5jLTI5MDQtXG5tbS9kYW1vbi9jb3JlLmM6MjkwNTpzdGF0aWMgaW5saW5lIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtMjkwNi17XG4tLVxubW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTYyLVx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG5tbS9kYW1vbi9jb3JlLmM6MzE2MzpcdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbm1tL2RhbW9uL2NvcmUuYy0zMTY0LVx0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQyLVx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUgPSAxMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NDM6XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpIC0gMTA7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQ0LVx0LyogVTY0X01BWCBtYXJrcyBhbiB1bm1lYXN1cmVkIGdvYWwsIGtlZXAgdGhlIHNhbXBsZSBhd2F5IGZyb20gaXQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERBTU9OIENvcmUmIzM5O3MgSGVhcnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgY2h1bmsgb2YgY29kZSB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbTogbGluZXMgMjg5MCB0byAyOTE1IGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBpbnRlcmVzdGluZyBtaWdodCBiZSBoYXBwZW5pbmcgaW4gdGhhdCByZWdpb247IHBlcmhhcHMgaXQmIzM5O3MgcmVsYXRlZCB0byBhIHJlY2VudCBvYnNlcnZhdGlvbiBvciBhIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gZGlhZ25vc2UuIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gc29tZXRoaW5nIHNwZWNpZmljIGhlcmU6IHBlcmhhcHMgREFNT04mIzM5O3MgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgZXZlbnRzLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIG9yIG1heWJlIHRoZSBsb2dpYyBzdXJyb3VuZGluZyByZWdpb24gbWFuYWdlbWVudCBvciBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhvc2UgbGluZXMsIGFuZCBteSBleHBlcmllbmNlIHRlbGxzIG1lIEkmIzM5O2xsIGxpa2VseSBiZSBsb29raW5nIGZvciBrZXkgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciB2YXJpYWJsZSBhc3NpZ25tZW50cyB0aGF0IG1pZ2h0IHJldmVhbCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IGNvZGUgYmxvY2suIEZyb20gcGFzdCBleHBlcmllbmNlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IERBTU9OIGlzIGtlZXBpbmcgdHJhY2sgb2YgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBpbiB0aGF0IHJhbmdlLCBhbmQgaG93IGl0IGlzIG1ha2luZyBkZWNpc2lvbnMgYWJvdXQgbWVtb3J5IGFjY2Vzc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg5MDpcdFx0cmV0dXJuIFVMT05HX01BWDtcbjI4OTE6XHR9XG4yODkyOlx0XG4yODkzOlx0I2lmZGVmIENPTkZJR19QU0lcbjI4OTQ6XHRcbjI4OTU6XHRzdGF0aWMgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcbjI4OTY6XHR7XG4yODk3Olx0XHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2cHNpX2Rpc2FibGVkKSlcbjI4OTg6XHRcdFx0cmV0dXJuIDA7XG4yODk5Olx0XHRyZXR1cm4gZGl2X3U2NChwc2lfc3lzdGVtLnRvdGFsW1BTSV9BVkdTXVtQU0lfTUVNICogMl0sXG4yOTAwOlx0XHRcdFx0TlNFQ19QRVJfVVNFQyk7XG4yOTAxOlx0fVxuMjkwMjpcdFxuMjkwMzpcdCNlbHNlXHQvKiBDT05GSUdfUFNJICovXG4yOTA0Olx0XG4yOTA1Olx0c3RhdGljIGlubGluZSB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxuMjkwNjpcdHtcbjI5MDc6XHRcdHJldHVybiAwO1xuMjkwODpcdH1cbjI5MDk6XHRcbjI5MTA6XHQjZW5kaWZcdC8qIENPTkZJR19QU0kgKi9cbjI5MTE6XHRcbjI5MTI6XHQjaWZkZWYgQ09ORklHX05VTUFcbjI5MTM6XHRzdGF0aWMgYm9vbCBpbnZhbGlkX21lbV9ub2RlKGludCBuaWQpXG4yOTE0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ4NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUXVvdGEgR29hbCBNZXRyaWMqKgoKT2theSwgc28gYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGtpY2tzIGluIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBhcyB0aGUgcXVvdGEgZ29hbCBtZXRyaWMuIFJpZ2h0LiBOb3csIHdoZXJlIGlzICp0aGF0KiBtZXRyaWMgYWN0dWFsbHkgYmVpbmcgc2V0PyBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBzeXNmcyBhbmQgdHJhY2sgZG93biB0aGUgc291cmNlIG9mIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB1bmRlcnN0YW5kIHRoaXMgaW50ZXJhY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCBzeXNmcyBmaWxlcyBhcmUgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTI4PWVudW0gZGFtb3NfYWN0aW9uIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTQ2LSAqIEBEQU1PU19RVU9UQV9VU0VSX0lOUFVUOlx0VXNlci1pbnB1dCB2YWx1ZS5cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxNDc6ICogQERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcdFN5c3RlbSBsZXZlbCBzb21lIG1lbW9yeSBQU0kgaW4gdXMuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTQ4LSAqIEBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlx0TWVtVXNlZCByYXRpbyBvZiBhIG5vZGUuXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTE2MT1lbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNjItXHREQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE2MzpcdERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNjQtXHREQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz02ODg9c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy02OTgtXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcbm1tL2RhbW9uL2NvcmUuYzo2OTk6XHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbm1tL2RhbW9uL2NvcmUuYy03MDAtXHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTkxPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTk0LVx0c3dpdGNoIChkc3QtXHUwMDNlbWV0cmljKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTE5NTpcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxubW0vZGFtb24vY29yZS5jLTExOTYtXHRcdGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XG4tLVxubW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTYxLVx0XHRicmVhaztcbm1tL2RhbW9uL2NvcmUuYzozMTYyOlx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG5tbS9kYW1vbi9jb3JlLmMtMzE2My1cdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cdGlmIChxdW90YV9tZW1fcHJlc3N1cmVfdXMpIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVx0XHRcdFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzNT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNDAtXHR7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI0MTpcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjQyLVx0XHQubmFtZSA9IFwmIzM0O3NvbWVfbWVtX3BzaV91c1wmIzM0Oyxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODA0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE0LVx0c3dpdGNoIChkc3QtXHUwMDNlbWV0cmljKSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODE1Olx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE2LVx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWxhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODMyPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzQtXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBkc3QgPSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODM1Olx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgzNi1cdFx0LnRhcmdldF92YWx1ZSA9IDEwMDAsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0Mi1cdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NDM6XHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDQtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODg0LVx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4NTpcdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4Ni1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkwNS1cdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHNyYyA9IHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MDY6XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA3LVx0XHQudGFyZ2V0X3ZhbHVlID0gVUxPTkdfTUFYLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjAtXHRkYW1vbl9hZGRfc2NoZW1lKGMsIHMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkyMTpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsIFVMT05HX01BWCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIyLVx0aWYgKCFnb2FsKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzMyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBUZW1wb3JhbCBHb2FsIFR1bmluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIGBnb2FsX3R1bmVyYCBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGhpbiB0aGF0IGZyYW1ld29yay4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYC4gSSBuZWVkIHRvIHNvbGlkaWZ5IHRoZSBkZXRhaWxzIG9mIHRoZSBvdmVyYXJjaGluZyBzdHJ1Y3R1cmUgYmVmb3JlIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyBiZWhhdmlvciBvZiB0aGUgYGdvYWxfdHVuZXJgLiBMZXQgbWUgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgd2hvbGUgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTE5OD1zdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyMC0gKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOlx0QWltIGxvbmcgdGVybSBjb25zaXN0ZW50IHF1b3RhLlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjIyMTogKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTDpcdEFpbSB6ZXJvIHF1b3RhIGFzYXAuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjIyLSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oPTIyMz1lbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyNC1cdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVCxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoyMjU6XHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyNi19O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTUzPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE2Ni1cdFx0XHRpZiAocy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyID09XG5tbS9kYW1vbi9jb3JlLmM6MzE2NzpcdFx0XHRcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbm1tL2RhbW9uL2NvcmUuYy0zMTY4LVx0XHRcdFx0LyogYW4gYWNoaWV2ZWQgc2NvcmUgd291bGQgemVybyB0aGUgdGVtcG9yYWwgcXVvdGEgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI0Nj1zdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjYwLVx0XHRcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChjdHgsIHMpO1xubW0vZGFtb24vY29yZS5jOjMyNjE6XHRcdGVsc2UgaWYgKHF1b3RhLVx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbm1tL2RhbW9uL2NvcmUuYy0zMjYyLVx0XHRcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoY3R4LCBzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTgyMj1zdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfdHVuZXJfbmFtZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgyNy1cdHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODI4Olx0XHQudHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4MjktXHRcdC5uYW1lID0gXCYjMzQ7dGVtcG9yYWxcJiMzNDssXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTAxLVx0XHQuc3ogPSBTWl82NEssXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTAyOlx0XHQuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTAzLVx0fTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA0OT1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNjUtXHRcdC5zeiA9IDksXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTA2NjpcdFx0LmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNjctXHRcdC5mYWlsX2NoYXJnZV9udW0gPSAxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgdHVuaW5nIHByb2Nlc3MuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgYWxsIHVuZm9sZHMuCgoqKkRpZ2dpbmcgaW50byB0aGUgREFNT04gVHVuaW5nIFByb2Nlc3MqKgoKUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIHR1bmluZyBvZiB0aGlzIERBTU9OIHN5c3RlbSwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2UgZm91ciBrZXkgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgOiBgZGFtb3NfcXVvdGFfc2NvcmVgLCBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAsIGBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3RgLCBhbmQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLiBUaGVzZSBzaG91bGQgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBpbnNpZ2h0cyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgcXVvdGFzIGFuZCBnb2FsIGFkanVzdG1lbnRzIGFyZSB3b3JraW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZWxlbWVudHMgaW50ZXJhY3QgdG8gcmVmaW5lIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgZGVjaXNpb25zLiBLbm93aW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzIwMDpcdFx0fVxuMzIwMTpcdH1cbjMyMDI6XHRcbjMyMDM6XHQvKiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmUgc2luY2UgaXQgbWFrZXMgc2NoZW1lcyBsZWFzdCBhZ2dyZXNzaXZlICovXG4zMjA0Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuMzIwNTpcdHtcbjMyMDY6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xuMzIwNzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjA4Olx0XHR1bnNpZ25lZCBsb25nIGhpZ2hlc3Rfc2NvcmUgPSAwO1xuMzIwOTpcdFxuMzIxMDpcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xuMzIxMTpcdFx0XHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xuMzIxMjpcdFx0XHRoaWdoZXN0X3Njb3JlID0gbWF4KGhpZ2hlc3Rfc2NvcmUsXG4zMjEzOlx0XHRcdFx0XHRtdWx0X2ZyYWMoZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlLCAxMDAwMCxcbjMyMTQ6XHRcdFx0XHRcdFx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpKTtcbjMyMTU6XHRcdH1cbjMyMTY6XHRcbjMyMTc6XHRcdHJldHVybiBoaWdoZXN0X3Njb3JlO1xuMzIxODpcdH1cbjMyMTk6XHRcbjMyMjA6XHRzdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuMzIyMTpcdHtcbjMyMjI6XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMzIyMzpcdFx0dW5zaWduZWQgbG9uZyBzY29yZSA9IGRhbW9zX3F1b3RhX3Njb3JlKGMsIHMpO1xuMzIyNDpcdFxuMzIyNTpcdFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQoXG4zMjI2Olx0XHRcdFx0bWF4KHF1b3RhLVx1MDAzZWVzel9icCwgMTAwMDBVTCksIHNjb3JlKTtcbjMyMjc6XHR9XG4zMjI4Olx0XG4zMjI5Olx0c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuMzIzMDpcdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4zMjMxOlx0e1xuMzIzMjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjMzOlx0XHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XG4zMjM0Olx0XG4zMjM1Olx0XHRpZiAoc2NvcmUgXHUwMDNlPSAxMDAwMClcbjMyMzY6XHRcdFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gMDtcbjMyMzc6XHRcdGVsc2UgaWYgKHF1b3RhLVx1MDAzZXN6KVxuMzIzODpcdFx0XHRxdW90YS1cdTAwM2Vlc3pfYnAgPSBxdW90YS1cdTAwM2VzeiAqIDEwMDAwO1xuMzIzOTpcdFx0ZWxzZVxuMzI0MDpcdFx0XHRxdW90YS1cdTAwM2Vlc3pfYnAgPSBVTE9OR19NQVg7XG4zMjQxOlx0fVxuMzI0MjpcdFxuMzI0MzpcdC8qXG4zMjQ0Olx0ICogQ2FsbGVkIG9ubHkgaWYgcXVvdGEtXHUwMDNlbXMsIG9yIHF1b3RhLVx1MDAzZXN6IGFyZSBzZXQsIG9yIHF1b3RhLVx1MDAzZWdvYWxzIGlzIG5vdCBlbXB0eVxuMzI0NTpcdCAqL1xuMzI0NjpcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMjQ3Olx0e1xuMzI0ODpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjQ5Olx0XHR1bnNpZ25lZCBsb25nIHRocm91Z2hwdXQ7XG4zMjUwOlx0XHR1bnNpZ25lZCBsb25nIGVzeiA9IFVMT05HX01BWDtcbjMyNTE6XHRcdHVuc2lnbmVkIGxvbmcgZXN6X3RpbWU7XG4zMjUyOlx0XG4zMjUzOlx0XHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xuMzI1NDpcdFx0XHRxdW90YS1cdTAwM2Vlc3ogPSBxdW90YS1cdTAwM2VzejtcbjMyNTU6XHRcdFx0cmV0dXJuO1xuMzI1NjpcdFx0fVxuMzI1NzpcdFxuMzI1ODpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xuMzI1OTpcdFx0XHRpZiAocXVvdGEtXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QpXG4zMjYwOlx0XHRcdFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0KGN0eCwgcyk7XG4zMjYxOlx0XHRcdGVsc2UgaWYgKHF1b3RhLVx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbjMyNjI6XHRcdFx0XHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKGN0eCwgcyk7XG4zMjYzOlx0XHRcdGVzeiA9IHF1b3RhLVx1MDAzZWVzel9icCAvIDEwMDAwO1xuMzI2NDpcdFx0fVxuMzI2NTpcdFxuMzI2NjpcdFx0aWYgKHF1b3RhLVx1MDAzZW1zKSB7XG4zMjY3Olx0XHRcdGlmIChxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKVxuMzI2ODpcdFx0XHRcdHRocm91Z2hwdXQgPSBtdWx0X2ZyYWMocXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeixcbjMyNjk6XHRcdFx0XHRcdFx0MTAwMDAwMCwgcXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyk7XG4zMjcwOlx0XHRcdGVsc2VcbjMyNzE6XHRcdFx0XHR0aHJvdWdocHV0ID0gUEFHRV9TSVpFICogMTAyNDtcbjMyNzI6XHRcdFx0ZXN6X3RpbWUgPSBtYXgodGhyb3VnaHB1dCAqIHF1b3RhLVx1MDAzZW1zLCBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4zMjczOlx0XHRcdGVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTtcbjMyNzQ6XHRcdH1cbjMyNzU6XHRcbjMyNzY6XHRcdGlmIChxdW90YS1cdTAwM2VzeiBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlc3ogXHUwMDNjIGVzeilcbjMyNzc6XHRcdFx0ZXN6ID0gcXVvdGEtXHUwMDNlc3o7XG4zMjc4Olx0XG4zMjc5Olx0XHRxdW90YS1cdTAwM2Vlc3ogPSBlc3o7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDAwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIERBTU9OIFF1b3RhIElzc3VlIGFuZCBXb3J0aEZ1enppbmcgRGV0ZXJtaW5hdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7dmUgaWRlbnRpZmllZCBhIGJ1ZyBpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHF1b3RhIGltcGxlbWVudGF0aW9uIHJlbGF0ZWQgdG8gaG93IFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pIGlzIGhhbmRsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIHdoZW4gYSBQU0ktYmFzZWQgcXVvdGEgZ29hbCBpcyB1bmluaXRpYWxpemVkIChpLmUuLCBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgIGlzIHNldCB0byBgVTY0X01BWGApLCB0aGUgZXhpc3RpbmcgY29kZSB3YXMgbGVhZGluZyB0byBhbiBpbW1lZGlhdGUgZGlzYWJsaW5nIG9mIHRoZSBxdW90YS4gVGhlIGluaXRpYWwgbG9naWMgd2FzIHNldHRpbmcgdGhlIGN1cnJlbnQgdmFsdWUgZXF1YWwgdG8gdGhlIHRhcmdldCB2YWx1ZSBpZiBsYXN0X3BzaV90b3RhbCB3YXMgZXF1YWwgdG8gVTY0X01BWC4gQW5kIHNpbmNlIHRoZSBjb2RlIHdhcyBpbnRlbmRlZCBmb3IgUFNJIHRyYWNraW5nLCB0aGUgbG9naWMgd291bGQgY2F1c2UgYW4gaXNzdWUgaW4gd2hpY2ggdGhlIGVzel9icCB2YWx1ZSB3aWxsIGJlIHNldCB0byAwLgoKVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBieSBzZXR0aW5nIHRoZSBgY3VycmVudF92YWx1ZWAgdG8gYDBgIGlmIHRoZSBnb2FsIHR1bmVyIGlzIERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwuIFRoaXMgcHJldmVudHMgdGhlIHNjb3JlIGNhbGN1bGF0aW9uIGZyb20gdHJpZ2dlcmluZyB0aGUgcXVvdGEgZGlzYWJsZSBvbiB0aGUgZmlyc3Qgcm91bmQuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBmaXggd29ydGggZnV6emluZz8KCkxldCYjMzk7cyBhcHBseSB0aGUgdHJpYWdlIGNyaXRlcmlhIEkgaGF2ZSBpbiBtaW5kLiBUaGUgY3JpdGVyaWEgc3RhdGVzIHRoYXQgcmVhY2hhYmlsaXR5IGlzIGtleSBhbmQgdGhhdCBtb2RpZmljYXRpb25zIGluIGBtbS9gIHN1YnN5c3RlbXMgYXJlIGhpZ2hseSByZWxldmFudC4gVGhlIGZpeCBkaXJlY3RseSB0b3VjaGVzIGBtbS9kYW1vbi9jb3JlLmNgLCB3aGljaCBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vYCkgc3Vic3lzdGVtLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgKnBvdGVudGlhbGx5KiBoaWdoLXByaW9yaXR5IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IG5leHQgbGluZSBvZiByZWFzb25pbmcgaXMgdG8gZGV0ZXJtaW5lIGlmIERBTU9OIGl0c2VsZiBpcyByZWFjaGFibGUuIFRoZSBjcml0ZXJpYSBzYXkgZnV6emluZyBpcyB1c2VmdWwgaWYgY29kZSBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gYXdhcmUgdGhhdCBEQU1PTiBpcyBkZXNpZ25lZCB0byBiZSBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBpbnRlcmZhY2VzIChzcGVjaWZpY2FsbHksIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9gKSBhbmQgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCBzeXNmcy4gVGhpcyBpcyB2ZXJ5IHJlbGV2YW50IGJlY2F1c2UgdGhlIGNyaXRlcmlhIGFsc28gc3RhdGUgdGhhdCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBBbmQgREFNT04gdXNlcyBRRU1VIG9uIGFtZDY0IHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuCgpTeXprYWxsZXIgcHJvdmlkZXMgZ2VuZXJpYyBmaWxlIG9wZXJhdGlvbnMgLyBzeXNmcyB3cml0ZXMuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgcmVhY2hhYmxlIGZyb20gc3l6a2FsbGVyLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEV4YW1pbmluZyB0aGUgS2NvbmZpZyBmaWxlcywgSSBzZWU6CgoxLiAgYERBTU9OYCBuZWVkcyB0byBiZSBlbmFibGVkLgoyLiAgYERBTU9OX1NZU0ZTYCBpcyBhbHNvIHJlcXVpcmVkIGZvciBzeXNmcyBpbnRlcmFjdGlvbi4KMy4gIGBQU0lgIGlzIHVzZWQgYnkgdGhlIERBTU9TIHF1b3RhIGltcGxlbWVudGF0aW9uLCBidXQgdGhlIGNvZGUgc3RpbGwgY29tcGlsZXMgd2l0aG91dCBQU0kgYW5kIHJldHVybnMgMC4KClNvLCBJIHdpbGwgY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIGlzIHdvcnRod2hpbGUgdG8gZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBTSVxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9NzE1PWNvbmZpZyBUQVNLX0lPX0FDQ09VTlRJTkdcbi0tXG5pbml0L0tjb25maWctNzIzLVxuaW5pdC9LY29uZmlnOjcyNDpjb25maWcgUFNJXG5pbml0L0tjb25maWctNzI1LVx0Ym9vbCBcJiMzNDtQcmVzc3VyZSBzdGFsbCBpbmZvcm1hdGlvbiB0cmFja2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAzOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIG15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRvIGNoZWNrIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nIHRoYXQgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDcyNCBtaWdodCBob2xkIHNvbWUgY2x1ZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHdoYXQgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSXQmIzM5O3MgYSBicm9hZCBzdGFydGluZyBwb2ludCwgYnV0IGBpbml0L0tjb25maWdgIGlzIG9mdGVuIHRoZSBwbGFjZSB0byBnbyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGtlcm5lbCBpbml0aWFsaXphdGlvbiBvciBnZW5lcmFsIGJ1aWxkIG9wdGlvbnMsIGFuZCBsaW5lIDcyNCBmZWVscyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byBiZWdpbiB0aGUgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgZWRpdG9yIGFuZCBkbyBzb21lIGNvbnRleHQtYXdhcmUgc2VhcmNoaW5nIHdpdGhpbiB0aGF0IGxpbmUgYW5kIGl0cyBzdXJyb3VuZGluZyBsaW5lcyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IEkgYW0gbG9va2luZyBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMDpcdFx0ICB0YXNrIGhhcyBjYXVzZWQuXG4gNzIxOlx0XG4gNzIyOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbiA3MjM6XHRcbiA3MjQ6XHRjb25maWcgUFNJXG4gNzI1Olx0XHRib29sIFwmIzM0O1ByZXNzdXJlIHN0YWxsIGluZm9ybWF0aW9uIHRyYWNraW5nXCYjMzQ7XG4gNzI2Olx0XHRzZWxlY3QgS0VSTkZTXG4gNzI3Olx0XHRoZWxwXG4gNzI4Olx0XHQgIENvbGxlY3QgbWV0cmljcyB0aGF0IGluZGljYXRlIGhvdyBvdmVyY29tbWl0dGVkIHRoZSBDUFUsIG1lbW9yeSxcbiA3Mjk6XHRcdCAgYW5kIElPIGNhcGFjaXR5IGFyZSBpbiB0aGUgc3lzdGVtLlxuIDczMDpcdFxuIDczMTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGtlcm5lbCB3aWxsIGNyZWF0ZSAvcHJvYy9wcmVzc3VyZS8gd2l0aCB0aGVcbiA3MzI6XHRcdCAgcHJlc3N1cmUgc3RhdGlzdGljcyBmaWxlcyBjcHUsIG1lbW9yeSwgYW5kIGlvLiBUaGVzZSB3aWxsIGluZGljYXRlXG4gNzMzOlx0XHQgIHRoZSBzaGFyZSBvZiB3YWxsdGltZSBpbiB3aGljaCBzb21lIG9yIGFsbCB0YXNrcyBpbiB0aGUgc3lzdGVtIGFyZVxuIDczNDpcdFx0ICBkZWxheWVkIGR1ZSB0byBjb250ZW50aW9uIG9mIHRoZSByZXNwZWN0aXZlIHJlc291cmNlLlxuIDczNTpcdFxuIDczNjpcdFx0ICBJbiBrZXJuZWxzIHdpdGggY2dyb3VwIHN1cHBvcnQsIGNncm91cHMgKGNncm91cDIgb25seSkgd2lsbFxuIDczNzpcdFx0ICBoYXZlIGNwdS5wcmVzc3VyZSwgbWVtb3J5LnByZXNzdXJlLCBhbmQgaW8ucHJlc3N1cmUgZmlsZXMsXG4gNzM4Olx0XHQgIHdoaWNoIGFnZ3JlZ2F0ZSBwcmVzc3VyZSBzdGFsbHMgZm9yIHRoZSBncm91cGVkIHRhc2tzIG9ubHkuXG4gNzM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBEQU1PTiBtaWdodCBuZWNlc3NpdGF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmV5b25kIHdoYXQgd2UmIzM5O3ZlIGFscmVhZHkgY29uc2lkZXJlZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFzc29jaWF0ZWQgYWRkcmVzcy1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIOKAkyBzb21ldGhpbmcgbGlrZSBgREFNT05fUEFERFJgIG9yIGBEQU1PTl9WQUREUmAgbWlnaHQgYmUgcmVsZXZhbnQuIFRvIGNsYXJpZnkgdGhpcywgSSYjMzk7bGwgZGl2ZSBpbnRvIGBtbS9kYW1vbi9LY29uZmlnYCB0byBnZXQgYSBkZWZpbml0aXZlIG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIG1vc3QgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiAgMjE6XHRcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbiAgMjI6XHRcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcbiAgMjc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyODpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAyOTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODE4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQU1PTiYjMzk7cyBGb2N1cyBTeW1ib2wgU2VsZWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBGb2N1c1N5bWJvbCBzZWxlY3Rpb24gcHJvY2Vzcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBmdW5jdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiwgdGhlIG9uZSBtb2RpZmllZCwgaXMgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSG1tLCBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBzdGF0aWMuIFllcywgaXQgaXM6IGBzdGF0aWMgdm9pZGAuIFRoYXQgcmFpc2VzIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgaXQuIFdvcnRoIGludmVzdGlnYXRpbmcuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgZGFtb3NfcXVvdGFfc2NvcmVgLiBJIHNlZSB0aGF0IGBkYW1vc19xdW90YV9zY29yZWAgdGhlbiBmZWVkcyBpbnRvIGBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3RgIGFuZCBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAuIFRoZXNlLCBpbiB0dXJuLCBhcmUgY2FsbGVkIGJ5IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBkYW1vc19hZGp1c3RfcXVvdGFgLCBhbmQgZmluYWxseSBieSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhhdCBnaXZlcyBhIG5pY2UgY2FsbCBzdGFjay4KCk5vdywgd2hlcmUgYXJlIHRoZSBnb2FscyBjb25maWd1cmVkIGZyb20gc3lzZnM/IEkgbmVlZCB0byBjaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfcXVvdGFfZ29hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz02ODI9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy02ODctXG5tbS9kYW1vbi9jb3JlLmM6Njg4OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYzo2ODk6XHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxubW0vZGFtb24vY29yZS5jLTY5MC1cdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXG5tbS9kYW1vbi9jb3JlLmMtNjkxLXtcbm1tL2RhbW9uL2NvcmUuYzo2OTI6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL2NvcmUuYy02OTMtXG4tLVxubW0vZGFtb24vY29yZS5jLTcwNC1cbm1tL2RhbW9uL2NvcmUuYzo3MDU6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxubW0vZGFtb24vY29yZS5jLTcwNi17XG4tLVxubW0vZGFtb24vY29yZS5jLTcwOS1cbm1tL2RhbW9uL2NvcmUuYzo3MTA6c3RhdGljIHZvaWQgZGFtb3NfZGVsX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNzExLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzE0LVxubW0vZGFtb24vY29yZS5jOjcxNTpzdGF0aWMgdm9pZCBkYW1vc19mcmVlX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG5tbS9kYW1vbi9jb3JlLmMtNzE2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzE5LVxubW0vZGFtb24vY29yZS5jOjcyMDp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbm1tL2RhbW9uL2NvcmUuYy03MjEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy03MjUtXG5tbS9kYW1vbi9jb3JlLmM6NzI2OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbm1tL2RhbW9uL2NvcmUuYy03Mjcte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04MTQ9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtODE1LXtcbm1tL2RhbW9uL2NvcmUuYzo4MTY6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZywgKmdfbmV4dDtcbm1tL2RhbW9uL2NvcmUuYy04MTctXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmLCAqbmV4dDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE2Nj12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ny1cbm1tL2RhbW9uL2NvcmUuYzoxMTc4OnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbnRoX3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtMTE3OS1cdFx0aW50IG4sIHN0cnVjdCBkYW1vc19xdW90YSAqcSlcbm1tL2RhbW9uL2NvcmUuYy0xMTgwLXtcbm1tL2RhbW9uL2NvcmUuYzoxMTgxOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG5tbS9kYW1vbi9jb3JlLmMtMTE4Mi1cdGludCBpID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE5MT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcbm1tL2RhbW9uL2NvcmUuYzoxMTkyOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxubW0vZGFtb24vY29yZS5jLTExOTMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMjE1PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmM6MTIxNjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjE3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTI0MD1pbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjQxLXtcbm1tL2RhbW9uL2NvcmUuYzoxMjQyOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FsLCAqbmV4dCwgKnNyY19nb2FsLCAqbmV3X2dvYWw7XG5tbS9kYW1vbi9jb3JlLmMtMTI0My1cdGludCBpID0gMCwgaiA9IDAsIGVycjtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTg3OT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg4Mi1cdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xubW0vZGFtb24vY29yZS5jOjE4ODM6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL2NvcmUuYy0xODg0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNDA3PXN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDA5LVx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiB8fCBxdW90YS1cdTAwM2VzeiB8fCBxdW90YS1cdTAwM2VtcyB8fFxubW0vZGFtb24vY29yZS5jOjI0MTA6XHRcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XG5tbS9kYW1vbi9jb3JlLmMtMjQxMS19XG4tLVxubW0vZGFtb24vY29yZS5jPTI5MTg9c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxubW0vZGFtb24vY29yZS5jOjI5MTk6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxubW0vZGFtb24vY29yZS5jLTI5MjAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yOTQ2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG5tbS9kYW1vbi9jb3JlLmM6Mjk0NzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMjk0OC17XG4tLVxubW0vZGFtb24vY29yZS5jPTMxMDA9c3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxubW0vZGFtb24vY29yZS5jOjMxMDE6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxubW0vZGFtb24vY29yZS5jLTMxMDIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTA2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG5tbS9kYW1vbi9jb3JlLmM6MzEwNzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMzEwOC17XG4tLVxubW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxubW0vZGFtb24vY29yZS5jOjMxNTQ6XHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG5tbS9kYW1vbi9jb3JlLmMtMzE1NS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMyMDQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyMDUte1xubW0vZGFtb24vY29yZS5jOjMyMDY6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL2NvcmUuYy0zMjA3LVx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjMxLXtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjMyOlx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG5tbS9kYW1vbi9scnVfc29ydC5jLTIzMy1cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTE5OS1cdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xubW0vZGFtb24vcmVjbGFpbS5jOjIwMDpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xubW0vZGFtb24vcmVjbGFpbS5jLTIwMS1cdHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIxNT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxNi1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxNzpcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIyOT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMzA6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjMxLVx0Y2hhciAqbmFtZTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTY4ND1zdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5MS1cdHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3N6O1x0LyogRWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMgKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjkyOlx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5My1cdHVuc2lnbmVkIGludCBmYWlsX2NoYXJnZV9udW07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4MTc9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MTg6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgdHVuZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxOS1cdGNoYXIgKm5hbWU7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NTU6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODU2LVx0aW50IGksIGVycjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg5OD1pbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkwNy1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MDg6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MDktXHRcdGludCBlcnI7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgwND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODA1Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgwNjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDcte1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MzI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODMzLXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MzQ6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBkc3QgPSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM1LVx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDEtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODQyOlx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0My1cdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDgtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODQ5Olx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODUwLVx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTMtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODU0Olx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU1LVx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjAtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODYxOlx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODYyLVx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjctXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODY4Olx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODY5LVx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlAsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3NS1cdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NzY6XHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NzctXHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODgzLVx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4NDpcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04ODUtXHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODk2PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDQtXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3MgPSB7fTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MDU6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBzcmMgPSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA2LVx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDgtXHR9O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkwOTpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkxMC1cdHN0cnVjdCBkYW1vcyAqcztcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9OTYwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTYxOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWxzLCBpbnQgbnJfZHN0X2dvYWxzLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk2MjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyY19nb2FscywgaW50IG5yX3NyY19nb2Fscylcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NjMte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk2NC1cdHN0cnVjdCBkYW1vc19xdW90YSBkc3QsIHNyYztcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NjU6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCwgKm5leHQ7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTY2LVx0Ym9vbCBza2lwID0gdHJ1ZTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTAxND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMTYtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3IodGVzdCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDE3Olx0XHRcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXt9LCAwLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwMTg6XHRcdFx0KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsW10pe1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMTktXHRcdFx0XHR7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMjQtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3IodGVzdCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDI1Olx0XHRcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDI2LVx0XHRcdFx0e1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDMxLVx0XHRcdH0sIDEsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTAzMjpcdFx0XHQoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxbXSl7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAzMy1cdFx0XHRcdHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAzOC1cdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2Zvcih0ZXN0LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwMzk6XHRcdFx0KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsW10pe1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNDAtXHRcdFx0XHR7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNDUtXHRcdFx0fSwgMSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDQ2Olx0XHRcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXt9LCAwKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDQ3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gUXVvdGEgU2NvcmUgU2V0dGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIHRoZSBmdW5jdGlvbiB3ZSBuZWVkIHRvIGV4YW1pbmUsIGFzIGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgZXhhY3RseSB3aGF0IHRoaXMgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGZ1bmN0aW9uICpkb2VzKi4mIzM0OyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHF1b3RhIHNjb3JlcyB3aXRoaW4gdGhlIERBTU9OIHN5c3RlbSBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4OTA6XHRcdFx0ZGVmYXVsdDpcbjI4OTE6XHRcdFx0XHRicmVhaztcbjI4OTI6XHRcdFx0fVxuMjg5MzpcdFx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChxdW90YSwgZ29hbCk7XG4yODk0Olx0XHR9XG4yODk1Olx0XHRyZXR1cm4gMDtcbjI4OTY6XHR9XG4yODk3Olx0XG4yODk4Olx0aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4yODk5Olx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbjI5MDA6XHR7XG4yOTAxOlx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbjI5MDI6XHRcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHt9O1xuMjkwMzpcdFx0aW50IGkgPSAwO1xuMjkwNDpcdFxuMjkwNTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cXVvdGEuZ29hbHMpO1xuMjkwNjpcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7XG4yOTA3Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnN5c2ZzX3NjaGVtZTtcbjI5MDg6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcsICpnX25leHQ7XG4yOTA5Olx0XHRcdGludCBlcnI7XG4yOTEwOlx0XG4yOTExOlx0XHRcdC8qIHVzZXIgY291bGQgaGF2ZSByZW1vdmVkIHRoZSBzY2hlbWUgc3lzZnMgZGlyICovXG4yOTEyOlx0XHRcdGlmIChpIFx1MDAzZT0gc3lzZnNfc2NoZW1lcy1cdTAwM2VucilcbjI5MTM6XHRcdFx0XHRicmVhaztcbjI5MTQ6XHRcbjI5MTU6XHRcdFx0c3lzZnNfc2NoZW1lID0gc3lzZnNfc2NoZW1lcy1cdTAwM2VzY2hlbWVzX2FycltpXTtcbjI5MTY6XHRcdFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3NjaGVtZS1cdTAwM2VxdW90YXMtXHUwMDNlZ29hbHMsXG4yOTE3Olx0XHRcdFx0XHRcdTAwMjZxdW90YSk7XG4yOTE4Olx0XHRcdGlmIChlcnIpIHtcbjI5MTk6XHRcdFx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcdTAwMjZxdW90YSlcbjI5MjA6XHRcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChnKTtcbjI5MjE6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjkyMjpcdFx0XHR9XG4yOTIzOlx0XHRcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcdTAwMjZzY2hlbWUtXHUwMDNlcXVvdGEsIFx1MDAyNnF1b3RhKTtcbjI5MjQ6XHRcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXHUwMDI2cXVvdGEpXG4yOTI1Olx0XHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xuMjkyNjpcdFx0XHRpZiAoZXJyKVxuMjkyNzpcdFx0XHRcdHJldHVybiBlcnI7XG4yOTI4Olx0XHRcdGkmIzQzOyYjNDM7O1xuMjkyOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk4MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYC4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBkYW1vc19xdW90YV9zY29yZWAsIHdoaWNoIGlzIGl0c2VsZiBpbnZva2VkIGR1cmluZyBEQU1PTiBydW50aW1lLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZGFtb25kYC4gVGhhdCYjMzk7cyB0aHJvdWdoIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIC0mZ3Q7IGBkYW1vc19hZGp1c3RfcXVvdGFgIC0mZ3Q7IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCAtJmd0OyBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAgLyBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0YCAtJmd0OyBgZGFtb3NfcXVvdGFfc2NvcmVgIC0mZ3Q7IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYC4gVGhpcyBmdW5jdGlvbiBpcyBhbHNvIHJlYWNoZWQgd2hlbiBzeXNmcyBpcyB3cml0dGVuIHRvIGFkanVzdCBEQU1PUyBzZXR0aW5ncy4gYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgIGRpcmVjdGx5IHNldHMgdGhlIGVmZmVjdGl2ZSBxdW90YS4KCk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0eXBpY2FsIGVudmlyb25tZW50cy4gQWgsIGl0IHNlZW1zIERBTU9OIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBubyBleG90aWMgaGFyZHdhcmUgaXMgbmVlZGVkLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgYWNjZXNzaWJsZSBmb3IgdGVzdGluZy4KCk5vdywgZG9lcyBpdCB0b3VjaCBjb3JlIHN1YnN5c3RlbXM/IFllcywgYG1tL2RhbW9uL2AgbGl2ZXMgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vYCksIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBxdW90YSBjYWxjdWxhdGlvbnMgd2hlbiB0aGUgbWV0cmljIGlzIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLiBUaGlzIGFsaWducyB3aXRoIHRoZSAmIzM0O0NvcmUgU3Vic3lzdGVtcyYjMzQ7IGNyaXRlcmlhLCBhbmQgdGhlcmVmb3JlLCBXb3J0aEZ1enppbmc9dHJ1ZS4KCkxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbjoKKiAgIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYAoqICAgYGRhbW9zX3F1b3RhX3Njb3JlYAoqICAgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgCiogICBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAKKiAgIGBkYW1vc19hZGp1c3RfcXVvdGFgCgpBcmUgdGhlc2UgZnVuY3Rpb25zIGxpa2VseSB0byBiZSBldmVyeXdoZXJlPyBObywgdGhlc2Ugc2VlbSBzcGVjaWZpYyB0byBEQU1PTiBhbmQgREFNT1MsIG5vdCB1YmlxdWl0b3VzIG1lbW9yeSBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuCgpOb3csIHRoZSBlbmFibGVtZW50IGNvbmZpZ3MuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBjb25maWdzIGFyZSBlbmFibGVkOgoKKiAgIGBEQU1PTmAgKHRoZSBiYXNlKQoqICAgYERBTU9OX1NZU0ZTYCAodXNlci1zcGFjZSBjb250cm9sIHRocm91Z2ggc3lzZnMpCiogICBgUFNJYCAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24gYmVjYXVzZSBvZiBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCkKCkhtbSwgYSBxdWljayBub3RlLCBJIHdvbmRlciBpZiBgREFNT05fUEFERFJgIG9yIGBEQU1PTl9WQUREUmAgYXJlIHByZXJlcXVpc2l0ZXM/IEkgc2hvdWxkIGNoZWNrIGBrZGFtb25kX2ZuYCBpbiBgbW0vZGFtb24vY29yZS5jYCB0byBzZWUgaG93IERBTU9OIHNjaGVtZXMgd29yayB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTEwODM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEwNS0gKiBiZSBjYWxsZWQgZnJvbSBhIHNhZmUgY29udGV4dHMuICBTdWNoIGNvbnRleHRzIGluY2x1ZGUgZGFtb25fY3R4IHNldHVwIHRpbWVcbm1tL2RhbW9uL2NvcmUuYzoxMTA2OiAqIHdoaWxlIHRoZSBrZGFtb25kIGlzIG5vdCB5ZXQgc3RhcnRlZCwgYW5kIGluc2lkZSBvZiBrZGFtb25kX2ZuKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTEwNy0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTEwLSAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxubW0vZGFtb24vY29yZS5jOjExMTE6ICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXG5tbS9kYW1vbi9jb3JlLmMtMTExMi0gKiBhcHBseWluZyBhdXRvLXR1bmVkIG1vbml0b3JpbmcgaW50ZXJ2YWxzLlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTE4PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTQ0LVx0Lypcbm1tL2RhbW9uL2NvcmUuYzoxMTQ1Olx0ICogbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXMgd2lsbCBiZSB1cGRhdGVkIGluc2lkZSBrZGFtb25kX2ZuKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cdCAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAzOC1cbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDQwLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNTYtXHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xubW0vZGFtb24vY29yZS5jOjIwNTc6XHRcdGN0eC1cdTAwM2VrZGFtb25kID0ga3RocmVhZF9ydW4oa2RhbW9uZF9mbiwgY3R4LCBcJiMzNDtrZGFtb25kLiVkXCYjMzQ7LFxubW0vZGFtb24vY29yZS5jLTIwNTgtXHRcdFx0XHRucl9ydW5uaW5nX2N0eHMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTUxPXZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNTUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jdHhzOyBpJiM0MzsmIzQzOylcbm1tL2RhbW9uL2NvcmUuYzoyMTU2Olx0XHQvKiBucl9ydW5uaW5nX2N0eHMgaXMgZGVjcmVtZW50ZWQgaW4ga2RhbW9uZF9mbiAqL1xubW0vZGFtb24vY29yZS5jLTIxNTctXHRcdF9fZGFtb25fc3RvcChjdHhzW2ldKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzg4OD1zdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkwOS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozOTEwOnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxubW0vZGFtb24vY29yZS5jLTM5MTEte1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xODc2PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xOTAyLSAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE5MDM6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXCYjMzQ7bW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlXCYjMzQ7KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5MDQtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTIwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIFN5c2ZzIEludGVyZmFjZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBEQU1PTiBpbml0aWFsaXphdGlvbiBmcm9tIHRoZSBzeXNmcyBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgREFNT04gbW9uaXRvciBpcyB0cmlnZ2VyZWQsIGNvbmZpZ3VyZWQsIGFuZCBjb250cm9sbGVkIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRocyBhbmQgZmluZCBvdXQgZXhhY3RseSBob3cgdGhlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIEkgd2FudCB0byBzZWUgaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHRyYW5zbGF0ZXMgaW50byBrZXJuZWwtc3BhY2UgYWN0aW9ucy4gV2hhdCBzeXNmcyBhdHRyaWJ1dGVzIGFyZSBpbnZvbHZlZCwgYW5kIGhvdyBkbyB0aGV5IGltcGFjdCB0aGUgREFNT04gc3RhcnR1cCBzZXF1ZW5jZT8gVGltZSB0byBnZXQgaW50byB0aGUgY29kZSBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTEwODM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEwOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcbm1tL2RhbW9uL2NvcmUuYzoxMTA5OiAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcbm1tL2RhbW9uL2NvcmUuYy0xMTEwLSAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDM5PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA0MS0vKlxubW0vZGFtb24vY29yZS5jOjIwNDI6ICogX19kYW1vbl9zdGFydCgpIC0gU3RhcnRzIG1vbml0b3Jpbmcgd2l0aCBnaXZlbiBjb250ZXh0LlxubW0vZGFtb24vY29yZS5jLTIwNDMtICogQGN0eDpcdG1vbml0b3JpbmcgY29udGV4dFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQ4LSAqL1xubW0vZGFtb24vY29yZS5jOjIwNDk6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0yMDUwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA3MS0vKipcbm1tL2RhbW9uL2NvcmUuYzoyMDcyOiAqIGRhbW9uX3N0YXJ0KCkgLSBTdGFydHMgdGhlIG1vbml0b3JpbmdzIGZvciBhIGdpdmVuIGdyb3VwIG9mIGNvbnRleHRzLlxubW0vZGFtb24vY29yZS5jLTIwNzMtICogQGN0eHM6XHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3Jpbmdcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA4MC0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcbm1tL2RhbW9uL2NvcmUuYzoyMDgxOiAqICYjMzk7ZGFtb25fc3RhcnQoKSYjMzk7IGNhbGwgaXMgY3VycmVudGx5IHJ1bm5pbmcsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGJ1dFxubW0vZGFtb24vY29yZS5jLTIwODItICogcmV0dXJucyAtRUJVU1kuXG4tLVxubW0vZGFtb24vY29yZS5jLTIwODUtICovXG5tbS9kYW1vbi9jb3JlLmM6MjA4NjppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbm1tL2RhbW9uL2NvcmUuYy0yMDg3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjExMS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2N0eHM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6MjExMjpcdFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTEzLVx0XHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjE0PWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI2Mi0gKlxubW0vZGFtb24vY29yZS5jOjIyNjM6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMjY0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDAxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDEzLVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTQ6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy00MTUtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMjQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzM2LVxubW0vZGFtb24vcmVjbGFpbS5jOjMzNzpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzM4LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9zdGF0LmM9MjAwPXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zdGFydCh2b2lkKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yMTItXHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vc3RhdC5jOjIxMzpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9zdGF0LmMtMjE0LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjUxNT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNTM5LVx0fVxubW0vZGFtb24vc3lzZnMuYzoyNTQwOlx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XG5tbS9kYW1vbi9zeXNmcy5jLTI1NDEtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTExCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIEFjdGl2YXRpb24gYW5kIE1vbml0b3JpbmcgT3B0aW9ucyoqCgpPa2F5LCBzbyBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgIGlzIHRoZSBrZXkgdG8gYWN0dWFsbHkgZW5hYmxpbmcgREFNT04uIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAuIE5vdywgSSBzZWUgdGhhdCB3ZSBoYXZlIHRoZXNlIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9WQUREUmAgbWFjcm9zIHRoYXQgZGVmaW5lIGhvdyB0aGUgbW9uaXRvcmluZyBvcGVyYXRpb25zIGFyZSBjb25maWd1cmVkLiBJdCYjMzk7cyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHR5cGljYWxseSB1c2VkIGZvciBzcGVjaWZpYyB0aGluZ3MsIGJ1dCBJIHRoaW5rIGZvciBteSB0ZXN0aW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIERBTU9TIHF1b3RhIHN0dWZmIG9yIG15IG93biBjdXN0b20gc2NoZW1lcywgSSYjMzk7ZCBiZSBzZXR0aW5nIHRoZSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgdmlhIHN5c2ZzLCBlaXRoZXIgdGhyb3VnaCB0aGUgYHN0YXRlYCBmaWxlIG9yIHRoZSBgb3BzYCBmaWxlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBkYW1vbl9zeXNmc19zZXRfdGFyZ2V0c2AgZnVuY3Rpb24gb3IgdGhlIGBvcHNgIHNwZWNpZmljYWxseSB0byBjb25maXJtIHRoYXQgYmVoYXZpb3IgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfREFNT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3Q9NTE9VG8gdXNlIHRoaXMgZmVhdHVyZSwgeW91IHNob3VsZCBmaXJzdCBlbnN1cmUgeW91ciBzeXN0ZW0gaXMgcnVubmluZyBvbiBhIGtlcm5lbFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3Q6NTI6dGhhdCBpcyBidWlsdCB3aXRoIGBgQ09ORklHX0RBTU9OX0xSVV9TT1JUPXlgYC5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTUzLVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q9NDM9VG8gdXNlIHRoaXMgZmVhdHVyZSwgeW91IHNob3VsZCBmaXJzdCBlbnN1cmUgeW91ciBzeXN0ZW0gaXMgcnVubmluZyBvbiBhIGtlcm5lbFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdDo0NDp0aGF0IGlzIGJ1aWx0IHdpdGggYGBDT05GSUdfREFNT05fUkVDTEFJTT15YGAuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW0ucnN0LTQ1LVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0PTIwPVlvdSBzaG91bGQgZmlyc3QgZW5zdXJlIHlvdXIgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYSBrZXJuZWwgYnVpbHQgd2l0aFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGFydC5yc3Q6MjE6YGBDT05GSUdfREFNT05fKj15YGAuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXJ0LnJzdC0yMi1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXQucnN0PTMxPVRvIHVzZSB0aGlzIGZlYXR1cmUsIHlvdSBzaG91bGQgZmlyc3QgZW5zdXJlIHlvdXIgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYSBrZXJuZWxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdC5yc3Q6MzI6dGhhdCBpcyBidWlsdCB3aXRoIGBgQ09ORklHX0RBTU9OX1NUQVQ9eWBgLiAgVGhlIGZlYXR1cmUgY2FuIGJlIGVuYWJsZWQgYnlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdC5yc3Q6MzM6ZGVmYXVsdCBhdCBidWlsZCB0aW1lLCBieSBzZXR0aW5nIGBgQ09ORklHX0RBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUYGAgdHJ1ZS5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdC5yc3QtMzQtXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0LnJzdD00NT1TZXR0aW5nIGl0IGFzIGBgTmBgIGRpc2FibGVzIERBTU9OX1NUQVQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgYnlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdC5yc3Q6NDY6YGBDT05GSUdfREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRgYCBidWlsZCBjb25maWcgb3B0aW9uLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0LnJzdC00Ny1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdD0zNz1zeXNmcyBJbnRlcmZhY2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdC0zOS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0OjQwOkRBTU9OIHN5c2ZzIGludGVyZmFjZSBpcyBidWlsdCB3aGVuIGBgQ09ORklHX0RBTU9OX1NZU0ZTYGAgaXMgZGVmaW5lZC4gIEl0XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdC00MS1jcmVhdGVzIG11bHRpcGxlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyB1bmRlciBpdHMgc3lzZnMgZGlyZWN0b3J5LFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdD0zMz1EQU1PTl9MUlVfU09SVOS9v+eUqERBTU9O5a+75om+54Ot6aG177yI6IyD5Zu05YaF55qE6aG16Z2i6K6/6Zeu6aKR546H6auY5LqO55So5oi35oyH5a6a55qE6ZiI5YC877yJ5ZKM5Ya36aG1XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTQ2LeS9v+eUqOatpOeJueaAp++8jOS9oOmmluWFiOmcgOimgeehruiupOS9oOeahOezu+e7n+S4rei/kOihjOeahOWGheaguOWcqOe8luivkeaXtuWQr+eUqOS6hlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0OjQ3OmBgQ09ORklHX0RBTU9OX0xSVV9TT1JUPXlgYC5cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdC00OC1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdD0zNj1EQU1PTl9SRUNMQUlN5om+5Yiw5Zyo54m55a6a5pe26Ze05YaF5rKh5pyJ6KKr6K6/6Zeu55qE5YaF5a2Y5Yy65Z+f5bm25YiG6aG144CC5Li65LqG6YG/5YWN5a6D5Zyo5YiG6aG15pON5L2c5Lit5raI6ICX6L+H5aSaXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3QtNDItXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdDo0MzropoHkvb/nlKjov5nkuKrlip/og73vvIzkvaDpppblhYjopoHnoa7kv53kvaDnmoTns7vnu5/ov5DooYzlnKjkuIDkuKrku6UgYGBDT05GSUdfREFNT05fUkVDTEFJTT15YGAg5p6E5bu655qE5YaFXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdC00NC3moLjkuIrjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGFydC5yc3QtMjYtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGFydC5yc3Q6Mjc66aaW5YWI77yM5L2g6KaB56Gu5L+d5L2g5b2T5YmN57O757uf5Lit6LeR55qE5YaF5qC45p6E5bu65pe26YCJ5a6a5LqG6L+Z5Liq5Yqf6IO96YCJ6aG5IGBgQ09ORklHX0RBTU9OXyo9eWBgLlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI4LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdD0zNT1zeXNmc+aOpeWPo1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0LTM2LT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0OjM3OkRBTU9O55qEc3lzZnPmjqXlj6PmmK/lnKjlrprkuYkgYGBDT05GSUdfREFNT05fU1lTRlNgYCDml7blu7rnq4vnmoTjgILlroPlnKjlhbZzeXNmc+ebruW9leS4i+WIm+W7uuWkmlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0LTM4LeS4quebruW9leWSjOaWh+S7tu+8jCBgYFx1MDAzY3N5c2ZzXHUwMDNlL2tlcm5lbC9tbS9kYW1vbi9gYCDjgILkvaDlj6/ku6XpgJrov4flr7nor6Xnm67lvZXkuIvnmoTmlofku7bov5vooYzlhpnlhaXlkoxcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3Q9MzM9REFNT05fTFJVX1NPUlTkvb/nlKhEQU1PTuWwi+aJvueGsemgge+8iOevhOWcjeWFp+eahOmggemdouioquWVj+mgu+eOh+mrmOaWvOeUqOaItuaMh+WumueahOmWvuWAvO+8ieWSjOWGt+mggVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdC00Ni3kvb/nlKjmraTnibnmgKfvvIzkvaDpppblhYjpnIDopoHnorroqo3kvaDnmoTns7vntbHkuK3pgYvooYznmoTlhafmoLjlnKjnt6jora/mmYLllZPnlKjkuoZcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdDo0NzpgYENPTkZJR19EQU1PTl9MUlVfU09SVD15YGAuXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3QtNDgtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q9MzY9REFNT05fUkVDTEFJTeaJvuWIsOWcqOeJueWumuaZgumWk+WFp+aykuacieiiq+ioquWVj+eahOWFp+WtmOWNgOWfn+S4puWIhumggeOAgueIsuS6humBv+WFjeWug+WcqOWIhumggeaTjeS9nOS4rea2iOiAl+mBjuWkmlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW0ucnN0LTQyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q6NDM66KaB5L2/55So6YCZ5YCL5Yqf6IO977yM5L2g6aaW5YWI6KaB56K65L+d5L2g55qE57O757Wx6YGL6KGM5Zyo5LiA5YCL5LulIGBgQ09ORklHX0RBTU9OX1JFQ0xBSU09eWBgIOani+W7uueahOWFp1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3QtNDQt5qC45LiK44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI2LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0OjI3OummluWFiO+8jOS9oOimgeeiuuS/neS9oOeVtuWJjeezu+e1seS4rei3keeahOWFp+aguOani+W7uuaZgumBuOWumuS6humAmeWAi+WKn+iDvemBuOmghSBgYENPTkZJR19EQU1PTl8qPXlgYC5cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXJ0LnJzdC0yOC1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3Q9MzU9c3lzZnPmjqXlj6NcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdC0zNi09PT09PT09PT1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdDozNzpEQU1PTueahHN5c2Zz5o6l5Y+j5piv5Zyo5a6a576pIGBgQ09ORklHX0RBTU9OX1NZU0ZTYGAg5pmC5bu656uL55qE44CC5a6D5Zyo5YW2c3lzZnPnm67pjITkuIvlibXlu7rlpJpcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdC0zOC3lgIvnm67pjITlkozmlofku7bvvIwgYGBcdTAwM2NzeXNmc1x1MDAzZS9rZXJuZWwvbW0vZGFtb24vYGAg44CC5L2g5Y+v5Lul6YCa6YGO5bCN6Kmy55uu6YyE5LiL55qE5paH5Lu26YCy6KGM5a+r5YWl5ZKMXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTk5OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGFtb25fc3pfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTktXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA2MDojaWZkZWYgQ09ORklHX0RBTU9OXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA2MS1cbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTE1Mj1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTExNTYtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTE1NzojZW5kaWZcdC8qIENPTkZJR19EQU1PTiAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTExNTgtXG4tLVxubW0vTWFrZWZpbGU9MTM2PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgJiM0Mzs9IGRlYnVnX3BhZ2VfcmVmLm9cbm1tL01ha2VmaWxlOjEzNzpvYmotJChDT05GSUdfREFNT04pICYjNDM7PSBkYW1vbi9cbm1tL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vXG4tLVxubW0vZGFtb24vTWFrZWZpbGU9Mz1vYmoteVx0XHRcdFx0Oj0gY29yZS5vXG5tbS9kYW1vbi9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xubW0vZGFtb24vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbm1tL2RhbW9uL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG5tbS9kYW1vbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG5tbS9kYW1vbi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbm1tL2RhbW9uL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQ5PXVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzItXG5tbS9kYW1vbi9jb3JlLmM6MzczOiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9jb3JlLmMtMzc0LXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00MjM9c3RhdGljIGlubGluZSB2b2lkIGRhbW9uX2luc2VydF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDMwLVxubW0vZGFtb24vY29yZS5jOjQzMTojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jLTQzMi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yOTQ2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4tLVxubW0vZGFtb24vY29yZS5jLTI5OTEtXG5tbS9kYW1vbi9jb3JlLmM6Mjk5MjojaWZkZWYgQ09ORklHX0RBTU9OX1BBRERSXG5tbS9kYW1vbi9jb3JlLmMtMjk5My0vKlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDA0LSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgZGFtb25fZ2V0X2ZvbGlvKCkgZnJvbSBvcHMtY29tbW9uLmMsIHdoaWNoIGlzXG5tbS9kYW1vbi9jb3JlLmM6MzAwNTogKiBvbmx5IGF2YWlsYWJsZSB3aGVuIENPTkZJR19EQU1PTl9QQUREUiBpcyBlbmFibGVkLiBJdCBhbHNvIHJlcXVpcmVzIHRoZVxubW0vZGFtb24vY29yZS5jLTMwMDYtICogY29udGV4dCB0byBiZSB1c2luZyBQQUREUiBvcGVyYXRpb25zIGZvciBtZWFuaW5nZnVsIHJlc3VsdHMuXG4tLVxubW0vZGFtb24vY29yZS5jPTMwNzI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwOTEtfVxubW0vZGFtb24vY29yZS5jOjMwOTI6I2Vsc2UgLyogQ09ORklHX0RBTU9OX1BBRERSICovXG5tbS9kYW1vbi9jb3JlLmMtMzA5My1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA5Ny19XG5tbS9kYW1vbi9jb3JlLmM6MzA5ODojZW5kaWYgLyogQ09ORklHX0RBTU9OX1BBRERSICovXG5tbS9kYW1vbi9jb3JlLmMtMzA5OS0jZWxzZSAvKiBDT05GSUdfTlVNQSAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzc3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDI0LVxubW0vZGFtb24vY29yZS5jOjM0MjU6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL2NvcmUuYy0zNDI2LXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzUzMz1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzU1OS1cbm1tL2RhbW9uL2NvcmUuYzozNTYwOiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9jb3JlLmMtMzU2MS1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfc3BsaXRfcmVnaW9uX2F0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jPTM3Nzc9c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2Vjcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc4NC1cbm1tL2RhbW9uL2NvcmUuYzozNzg1OiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9jb3JlLmMtMzc4Ni1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vc3RhdC5jPTMwPXN0YXRpYyBib29sIGVuYWJsZWQgX19yZWFkX21vc3RseSA9IElTX0VOQUJMRUQoXG5tbS9kYW1vbi9zdGF0LmM6MzE6XHRDT05GSUdfREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFQpO1xubW0vZGFtb24vc3RhdC5jLTMyLW1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcdTAwMjZlbmFibGVkX3BhcmFtX29wcywgTlVMTCwgMDYwMCk7XG4tLVxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnPTI9Q09ORklHX0tVTklUPXlcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzozOkNPTkZJR19EQU1PTj15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6NDpDT05GSUdfREFNT05fS1VOSVRfVEVTVD15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWctNS1cbi0tXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc9OD1DT05GSUdfUEFHRV9JRExFX0ZMQUc9eVxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnOjk6Q09ORklHX0RBTU9OX1ZBRERSPXlcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxMDpDT05GSUdfREFNT05fVkFERFJfS1VOSVRfVEVTVD15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWctMTEtXG4tLVxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnPTEzPUNPTkZJR19TWVNGUz15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6MTQ6Q09ORklHX0RBTU9OX1NZU0ZTPXlcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxNTpDT05GSUdfREFNT05fU1lTRlNfS1VOSVRfVEVTVD15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWctMTYtXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWctMTctIyBlbmFibGUgREFNT05fREVCVUdfU0FOSVRZIHRvIGNhdGNoIGFueSBidWdcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxODpDT05GSUdfREFNT05fREVCVUdfU0FOSVRZPXlcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2OiNpZmRlZiBDT05GSUdfREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTctXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTQxOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MjYtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NDI3Olx0LyogREFNT05fT1BTX1ZBRERSIGlzIHJlZ2lzdGVyZWQgb25seSBpZiBDT05GSUdfREFNT05fVkFERFIgaXMgc2V0ICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDI4LVx0aWYgKCFkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhEQU1PTl9PUFNfVkFERFIpKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE5ODM9a3VuaXRfdGVzdF9zdWl0ZShkYW1vbl90ZXN0X3N1aXRlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTk4Ni1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxOTg3OiNlbmRpZlx0LyogQ09ORklHX0RBTU9OX0tVTklUX1RFU1QgKi9cbi0tXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTUtXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oOjY6I2lmZGVmIENPTkZJR19EQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTctXG4tLVxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaD0xMDY9a3VuaXRfdGVzdF9zdWl0ZShkYW1vbl9zeXNmc190ZXN0X3N1aXRlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTEwOS1cbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg6MTEwOiNlbmRpZiAvKiBDT05GSUdfREFNT05fU1lTRlNfS1VOSVRfVEVTVCAqL1xuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtNS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NjojaWZkZWYgQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtNy1cbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTI4Mj1rdW5pdF90ZXN0X3N1aXRlKGRhbW9uX3Rlc3Rfc3VpdGUpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMjg1LVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoyODY6I2VuZGlmXHQvKiBDT05GSUdfREFNT05fVkFERFJfS1VOSVRfVEVTVCAqL1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMTktXG5tbS9kYW1vbi92YWRkci5jOjIwOiNpZmRlZiBDT05GSUdfREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vdmFkZHIuYy0yMS0jdW5kZWYgREFNT05fTUlOX1JFR0lPTl9TWlxuLS1cbnRvb2xzL3Rlc3Rpbmcva3VuaXQvY29uZmlncy9hbGxfdGVzdHMuY29uZmlnPTM5PUNPTkZJR19JV0xXSUZJPXlcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvY29uZmlncy9hbGxfdGVzdHMuY29uZmlnLTQwLVxudG9vbHMvdGVzdGluZy9rdW5pdC9jb25maWdzL2FsbF90ZXN0cy5jb25maWc6NDE6Q09ORklHX0RBTU9OPXlcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvY29uZmlncy9hbGxfdGVzdHMuY29uZmlnOjQyOkNPTkZJR19EQU1PTl9WQUREUj15XG50b29scy90ZXN0aW5nL2t1bml0L2NvbmZpZ3MvYWxsX3Rlc3RzLmNvbmZpZzo0MzpDT05GSUdfREFNT05fUEFERFI9eVxudG9vbHMvdGVzdGluZy9rdW5pdC9jb25maWdzL2FsbF90ZXN0cy5jb25maWctNDQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vY29uZmlnOjE6Q09ORklHX0RBTU9OPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzoyOkNPTkZJR19EQU1PTl9TWVNGUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9jb25maWc6MzpDT05GSUdfREFNT05fUEFERFI9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vY29uZmlnOjQ6Q09ORklHX0RBTU9OX1ZBRERSPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzo1OkNPTkZJR19EQU1PTl9SRUNMQUlNPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzo2OkNPTkZJR19EQU1PTl9MUlVfU09SVD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9jb25maWc6NzpDT05GSUdfREFNT05fREVCVUdfU0FOSVRZPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1MjYKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogNDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVmVyZGljdDogREFNT04gUXVvdGEgR29hbCBFdmFsdWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIHdlIG5lZWQgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBQU0lgIGNvbmZpZ3VyZWQuIFRob3NlIGFyZSBzdHJhaWdodGZvcndhcmQuCgpOZXh0LCB0aGUgZm9jdXMgc3ltYm9scy4gV2UgaGF2ZSBhIGxpc3Q6IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCwgYGRhbW9zX3F1b3RhX3Njb3JlYCwgYGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWxgLCBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAsIGFuZCBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gVGhlc2UgbG9vayBjb3JyZWN0IGdpdmVuIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UuCgpSaWdodCwgdGhlIGRpZmYgY29uZmlybXMgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBtb2RpZmllZC4gTG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIHdlIHNlZSB0aG9zZSBmdW5jdGlvbnMgYXJlIHRvdWNoZWQuIE5vdGhpbmcgZWxzZSBqdW1wcyBvdXQgdGhhdCYjMzk7cyBkaXJlY3RseSByZWxldmFudCB0byBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgZW5zdXJlIHdlJiMzOTtyZSBjbGVhciBvbiB0aGUgaW5zdHJ1Y3Rpb25zLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYHRydWVgIGJlY2F1c2UgdGhlIGNoYW5nZSBtb2RpZmllcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCB0aGUgZWRpdCB0byBgbW0vZGFtb24vY29yZS5jYCBtYWtlcyB0aGlzIGEgZGVmaW5pdGUgeWVzLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgYXMgZXhwZWN0ZWQ6IHRob3NlIHNhbWUgZnVuY3Rpb25zIHdlIGlkZW50aWZpZWQgYmVmb3JlLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbHJlYWR5IGNvbmZpcm1lZC4KCkZpbmFsbHksIHRoZSByZWFzb25pbmcuIFdlIG5lZWQgYSBjb25jaXNlIGV4cGxhbmF0aW9uLiBCYXNlZCBvbiB0aGUgY29kZSBpbnNwZWN0aW9uLCB0aGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgcXVvdGEgZ29hbCBldmFsdWF0aW9uIGxvZ2ljLiBUaGlzIGlzIGZvciBEQU1PUyBQU0kgZ29hbHMgKnNwZWNpZmljYWxseSogYW5kIGludm9sdmVzIHRoZSB0ZW1wb3JhbCB0dW5lci4gQW5kLCBjcnVjaWFsbHksIGl0JiMzOTtzIGFsbCBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgZGFlbW9uIHNjaGVtZXMuCgpZZXAsIGl0JiMzOTtzIGFsbCBjb25zaXN0ZW50OiB0aGUgY29kZSBjaGFuZ2VzLCB0aGUgY29uZmlndXJhdGlvbnMsIHRoZSBmb2N1cyBzeW1ib2xzLCBhbmQgdGhlIHJlYXNvbmluZy4gV2UmIzM5O3JlIHJlYWR5IHRvIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUmIzM0OywKICAgICYjMzQ7ZGFtb3NfcXVvdGFfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbCYjMzQ7LAogICAgJiMzNDtkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTi9EQU1PUyBxdW90YSBnb2FsIGV2YWx1YXRpb24gaW4gbW0vZGFtb24vY29yZS5jLCBlbnN1cmluZyB0aGF0IHVubWVhc3VyZWQgUFNJIGdvYWxzIHVuZGVyIGEgdGVtcG9yYWwgZ29hbCB0dW5lciBkbyBub3QgcHJlbWF0dXJlbHkgemVybyB0aGUgZWZmZWN0aXZlIHF1b3RhIGR1cmluZyBpbml0aWFsIHR1bmluZyByb3VuZHMuIFRoaXMgYWx0ZXJzIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBleGVjdXRpb24gYW5kIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUmIzM0OywKICAgICYjMzQ7ZGFtb3NfcXVvdGFfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbCYjMzQ7LAogICAgJiMzNDtkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTi9EQU1PUyBxdW90YSBnb2FsIGV2YWx1YXRpb24gaW4gbW0vZGFtb24vY29yZS5jLCBlbnN1cmluZyB0aGF0IHVubWVhc3VyZWQgUFNJIGdvYWxzIHVuZGVyIGEgdGVtcG9yYWwgZ29hbCB0dW5lciBkbyBub3QgcHJlbWF0dXJlbHkgemVybyB0aGUgZWZmZWN0aXZlIHF1b3RhIGR1cmluZyBpbml0aWFsIHR1bmluZyByb3VuZHMuIFRoaXMgYWx0ZXJzIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBleGVjdXRpb24gYW5kIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiYjMzk7cyBxdW90YSBnb2FsIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBtZXRyaWNzIGFuZCBhZGRzIGEgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0LiBTcGVjaWZpY2FsbHksIHdoZW4gYGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWGAgKGEgZG9tYWluLWxldmVsIHNlbnRpbmVsIHZhbHVlIGluZGljYXRpbmcgdGhhdCBubyBQU0kgc2FtcGxlIGhhcyB5ZXQgYmVlbiByZWNvcmRlZCksIGl0IHNldHMgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IDBgIGluc3RlYWQgb2YgYGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlYCBpZiB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLlxuXG5EZXNwaXRlIHRoZSBjb2RlIGNvbW1lbnQgcmVmZXJyaW5nIHRvIFwmIzM0O3VuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWxcJiMzNDssIHRoaXMgaXMgcHVyZWx5IGEgc2VtYW50aWMgc2VudGluZWwgdmFsdWU6IGBsYXN0X3BzaV90b3RhbGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVTY0X01BWGAgdXBvbiBhbGxvY2F0aW9uIG9yIGNvbW1pdCAoYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGFjY2Vzc2VkIG9yIGV4cG9zZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1NDI1NTQ1YmRiOGMzYmM0NGViY2ViNmNhMDU0MjYzOTA2NjRlMzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwNzowMToyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAwNmNmMmFiN2U5N2Q3Li5lNmQ4N2ZkMzk5MmVlIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMTYxLDEyICYjNDM7MzE2MSwxOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsCiAJCWJyZWFrOwogCWNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOgogCQlub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpOwotCQkvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovCi0JCWlmIChnb2FsLSZndDtsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKQotCQkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IGdvYWwtJmd0O3RhcmdldF92YWx1ZTsKLQkJZWxzZQomIzQzOwkJaWYgKGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpIHsKJiM0MzsJCQkvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovCiYjNDM7CQkJaWYgKHMtJmd0O3F1b3RhLmdvYWxfdHVuZXIgPT0KJiM0MzsJCQkJCURBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpCiYjNDM7CQkJCS8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovCiYjNDM7CQkJCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSAwOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IGdvYWwtJmd0O3RhcmdldF92YWx1ZTsKJiM0MzsJCX0gZWxzZSB7CiAJCQlnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtCiAJCQkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWw7CiYjNDM7CQl9CiAJCWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDsKIAkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCmluZGV4IGMwMWU2YTc1Y2FkYzEuLjJiOWIyNGNlN2RhZDMgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKQEAgLTg4OSw2ICYjNDM7ODg5LDc0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJfSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVubWVhc3VyZWQgUFNJIGdvYWxzIG11c3Qgbm90IGRpc2FibGUgdGhlIHRlbXBvcmFsIHF1b3RhLgomIzQzOyAqIEtlZXAgc3ogKiAxMDAwMCB3aXRoaW4gYSAzMi1iaXQgdW5zaWduZWQgbG9uZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CXN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge307CiYjNDM7CXN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHsKJiM0MzsJCS5zeiA9IFNaXzY0SywKJiM0MzsJCS5nb2FsX3R1bmVyID0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzID0ge307CiYjNDM7CXN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHNyYyA9IHsKJiM0MzsJCS5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsCiYjNDM7CQkudGFyZ2V0X3ZhbHVlID0gVUxPTkdfTUFYLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDsKJiM0MzsJc3RydWN0IGRhbW9zICpzOwomIzQzOwomIzQzOwlpZiAoIWMpCiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7Y3R4IGFsbG9jIGZhaWwmIzM0Oyk7CiYjNDM7CXMgPSBkYW1vbl9uZXdfc2NoZW1lKCZhbXA7cGF0dGVybiwgREFNT1NfU1RBVCwgMCwgJmFtcDtxdW90YSwgJmFtcDt3bWFya3MsCiYjNDM7CQkJTlVNQV9OT19OT0RFKTsKJiM0MzsJaWYgKCFzKSB7CiYjNDM7CQlkYW1vbl9kZXN0cm95X2N0eChjKTsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtzY2hlbWUgYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJfQomIzQzOwlkYW1vbl9hZGRfc2NoZW1lKGMsIHMpOwomIzQzOwlnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLCBVTE9OR19NQVgpOwomIzQzOwlpZiAoIWdvYWwpIHsKJiM0MzsJCWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwomIzQzOwkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O2dvYWwgYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJfQomIzQzOwlkYW1vc19hZGRfcXVvdGFfZ29hbCgmYW1wO3MtJmd0O3F1b3RhLCBnb2FsKTsKJiM0MzsKJiM0MzsJLyogZnJlc2ggZ29hbCwgZmlyc3QgdHVuaW5nIHJvdW5kICovCiYjNDM7CWRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLSZndDtxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7CiYjNDM7CiYjNDM7CS8qIHNlY29uZCByb3VuZDogbGFzdF9wc2lfdG90YWwgaXMgaW5pdGlhbGlzZWQgbm93ICovCiYjNDM7CWRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLSZndDtxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7CiYjNDM7CiYjNDM7CS8qIGNvbW1pdCBhIFBTSSBnb2FsIG9udG8gdGhlIGluaXRpYWxpc2VkIFBTSSBnb2FsICovCiYjNDM7CWRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGdvYWwsICZhbXA7c3JjKTsKJiM0MzsJZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtJmd0O3F1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTsKJiM0MzsKJiM0MzsJLyogYSBtZWFzdXJlZCByb3VuZCB0aGF0IHJlYWNoZXMgdGhlIHRhcmdldCBkaXNhYmxlcyB0aGUgcXVvdGEgKi8KJiM0MzsJZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlID0gMTA7CiYjNDM7CWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpIC0gMTA7CiYjNDM7CS8qIFU2NF9NQVggbWFya3MgYW4gdW5tZWFzdXJlZCBnb2FsLCBrZWVwIHRoZSBzYW1wbGUgYXdheSBmcm9tIGl0ICovCiYjNDM7CWlmIChnb2FsLSZndDtsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKQomIzQzOwkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwtLTsKJiM0MzsJZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtJmd0O3F1b3RhLmVzeiwgMHVsKTsKJiM0MzsKJiM0MzsJLyogdGhlIGNvbnNpc3QgdHVuZXIga2VlcHMgaXRzIHF1b3RhIG92ZXIgYW4gdW5tZWFzdXJlZCByb3VuZCAqLwomIzQzOwlzLSZndDtxdW90YS5nb2FsX3R1bmVyID0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOwomIzQzOwlzLSZndDtxdW90YS5lc3pfYnAgPSBTWl8zMksgKiAxMDAwMDsKJiM0MzsJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgJmFtcDtzcmMpOwomIzQzOwlkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy0mZ3Q7cXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl8zMkspOwomIzQzOwomIzQzOwlkYW1vbl9kZXN0cm95X2N0eChjKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWxzLCBpbnQgbnJfZHN0X2dvYWxzLAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjX2dvYWxzLCBpbnQgbnJfc3JjX2dvYWxzKQpAQCAtMTg4Nyw2ICYjNDM7MTk1NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7CiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLAogCUtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbCksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyksCiYjNDM7CUtVTklUX0NBU0UoZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaSksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YSksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9kZXN0cyksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXIpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gUXVvdGEgR29hbCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGEgcmVsYXRlZCBLVW5pdCBoZWFkZXIsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgZGlmZiBpcyBmb2N1c2VkIG9uIGhvdyB3ZSBjYWxjdWxhdGUgdGhlIGBjdXJyZW50X3ZhbHVlYCBmb3IgYSBxdW90YSBnb2FsLCBzcGVjaWZpY2FsbHkgd2hlbiB1c2luZyBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYC4KClRoZSBrZXkgc2VjdGlvbiBpcyB0aGUgYGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOmAgYmxvY2suIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHN1YnRyYWN0aW5nIHRoZSBwcmV2aW91cyBQU0kgdG90YWwgZnJvbSB0aGUgY3VycmVudCBQU0kgdG90YWwgdG8gZGVyaXZlIHRoZSAmIzM0O3VzYWdlJiMzNDsgb3ZlciB0aGUgbGFzdCBpdGVyYXRpb24uIFRoZXJlJiMzOTtzIGEgY2hlY2s6IGBpZiAoZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClgLiBUaGUgY29tbWVudCBzYXlzICYjMzQ7dW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCYjMzQ7LiBUaGlzIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0LiBJcyBgVTY0X01BWGAgKmFjdHVhbGx5KiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgaXMgaXQgYmVpbmcgdXNlZCBhcyBhIHNlbnRpbmVsIHZhbHVlIGhlcmU/IEEgZmxhZyB0byBkZW5vdGUgJiMzNDtubyBwcmV2aW91cyBtZWFzdXJlbWVudCBhdmFpbGFibGUmIzM0Oz8gVGhlIGNvZGUmIzM5O3MgY29tbWVudCBtZW50aW9ucyBpdCYjMzk7cyAmIzM0O3VuaW5pdGlhbGl6ZWQsJiMzNDsgaW1wbHlpbmcgdGhlIGZvcm1lciwgaG93ZXZlciwgdGhlIGltcGxlbWVudGF0aW9uIGlzIGludGVyZXN0aW5nLiBUaGUgYWRkaXRpb24gb2YgdGVtcG9yYWwgcXVvdGEgbWF5IGhhdmUgZGlmZmVyZW50IHJhbWlmaWNhdGlvbnMuCgpUaGUgYGlmYCBjb25kaXRpb24gdGhlbiBicmFuY2hlcy4gSWYgYGxhc3RfcHNpX3RvdGFsYCBpcyBgVTY0X01BWGAsIGl0IHNldHMgYGN1cnJlbnRfdmFsdWVgIHRvIGBnb2FsLSZndDt0YXJnZXRfdmFsdWVgIG9yIDAgZm9yIHRoZSB0ZW1wb3JhbCBxdW90YS4gT3RoZXJ3aXNlLCBpdCBjYWxjdWxhdGVzIGBjdXJyZW50X3ZhbHVlYCBhcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGN1cnJlbnQgYW5kIGxhc3QgUFNJIHRvdGFsLCBhbmQgdXBkYXRlcyBgbGFzdF9wc2lfdG90YWxgLgoKVG8gYmUgc3VyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBnb2FsLSZndDtsYXN0X3BzaV90b3RhbGAgaXMgKmluaXRpYWxpemVkKi4gSSBuZWVkIHRvIGxvb2sgYXQgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBgbGFzdF9wc2lfdG90YWxgIGlzIHNldCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IGBVNjRfTUFYYCBpcyBiZWluZyB1c2VkIGFzIGEgc2VudGluZWwgZm9yIGluaXRpYWxpemF0aW9uLCB0byBpbmRpY2F0ZSB0aGF0IG5vIHByZXZpb3VzIFBTSSBtZWFzdXJlbWVudCBpcyBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xhc3RfcHNpX3RvdGFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz02ODg9c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy02OTktXHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbm1tL2RhbW9uL2NvcmUuYzo3MDA6XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xubW0vZGFtb24vY29yZS5jLTcwMS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmdvYWwtXHUwMDNlbGlzdCk7XG4tLVxubW0vZGFtb24vY29yZS5jPTExOTE9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXG4tLVxubW0vZGFtb24vY29yZS5jLTExOTUtXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbm1tL2RhbW9uL2NvcmUuYzoxMTk2Olx0XHRkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xubW0vZGFtb24vY29yZS5jLTExOTctXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTUzPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE2My1cdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbm1tL2RhbW9uL2NvcmUuYzozMTY0Olx0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzE2NTpcdFx0XHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXG5tbS9kYW1vbi9jb3JlLmMtMzE2Ni1cdFx0XHRpZiAocy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyID09XG4tLVxubW0vZGFtb24vY29yZS5jLTMxNzMtXHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtXG5tbS9kYW1vbi9jb3JlLmM6MzE3NDpcdFx0XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG5tbS9kYW1vbi9jb3JlLmMtMzE3NS1cdFx0fVxubW0vZGFtb24vY29yZS5jOjMxNzY6XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsO1xubW0vZGFtb24vY29yZS5jLTMxNzctXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTUtXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MTY6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIFU2NF9NQVgpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxNy1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzMj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM3LVx0XHQuY3VycmVudF92YWx1ZSA9IDEyMyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Mzg6XHRcdC5sYXN0X3BzaV90b3RhbCA9IDQ1Nixcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzktXHR9O1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDUtXHRcdFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODQ2Olx0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDU2Nyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDctXHRcdFx0fSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4Ny1cdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4ODg6XHRcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4OS1cdFx0XHR9KTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODk2PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MzEtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTMyOlx0Lyogc2Vjb25kIHJvdW5kOiBsYXN0X3BzaV90b3RhbCBpcyBpbml0aWFsaXNlZCBub3cgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MzMtXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDItXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IDEwO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk0MzpcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCkgLSAxMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDQtXHQvKiBVNjRfTUFYIG1hcmtzIGFuIHVubWVhc3VyZWQgZ29hbCwga2VlcCB0aGUgc2FtcGxlIGF3YXkgZnJvbSBpdCAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk0NTpcdGlmIChnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTQ2Olx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsLS07XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQ3LVx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGNvcmUuY2AgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiwgc28gbGV0JiMzOTtzIGp1bXAgcmlnaHQgaW50byB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzE2MC4gSSBmaWd1cmUgdGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIHdoZXJlIHRoZSBpc3N1ZSBpcyBvY2N1cnJpbmcsIG9yIGF0IGxlYXN0LCB0aGUgY3JpdGljYWwgbG9naWMgSSBuZWVkIHRvIHJldmlldyB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuIEkgbmVlZCB0byBkaXNzZWN0IHRoaXMgc2VjdGlvbiBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcsIGhvdyBpdCYjMzk7cyBiZWhhdmluZywgYW5kIGhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTQ1Olx0XHRcdHJldHVybiAxMDAwMDtcbjMxNDY6XHRcbjMxNDc6XHRcdHRocCA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfQU5PTl9USFBTKSAmIzQzO1xuMzE0ODpcdFx0XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9TSE1FTV9USFBTKSAmIzQzO1xuMzE0OTpcdFx0XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9GSUxFX1RIUFMpO1xuMzE1MDpcdFx0cmV0dXJuIG11bHRfZnJhYyh0aHAsIDEwMDAwLCB0b3RhbF9wYWdlcyAtIGZyZWVfcGFnZXMpO1xuMzE1MTpcdH1cbjMxNTI6XHRcbjMxNTM6XHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4zMTU0Olx0XHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4zMTU1Olx0e1xuMzE1NjpcdFx0dTY0IG5vd19wc2lfdG90YWw7XG4zMTU3Olx0XG4zMTU4Olx0XHRzd2l0Y2ggKGdvYWwtXHUwMDNlbWV0cmljKSB7XG4zMTU5Olx0XHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XG4zMTYwOlx0XHRcdC8qIFVzZXIgc2hvdWxkIGFscmVhZHkgc2V0IGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSAqL1xuMzE2MTpcdFx0XHRicmVhaztcbjMxNjI6XHRcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxuMzE2MzpcdFx0XHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuMzE2NDpcdFx0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XG4zMTY1Olx0XHRcdFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xuMzE2NjpcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPT1cbjMxNjc6XHRcdFx0XHRcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbjMxNjg6XHRcdFx0XHRcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXG4zMTY5Olx0XHRcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xuMzE3MDpcdFx0XHRcdGVsc2VcbjMxNzE6XHRcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuMzE3MjpcdFx0XHR9IGVsc2Uge1xuMzE3MzpcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxuMzE3NDpcdFx0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbjMxNzU6XHRcdFx0fVxuMzE3NjpcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcbjMxNzc6XHRcdFx0YnJlYWs7XG4zMTc4Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4zMTc5Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4zMTgwOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbV9icChnb2FsKTtcbjMxODE6XHRcdFx0YnJlYWs7XG4zMTgyOlx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbjMxODM6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxuMzE4NDpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xuMzE4NTpcdFx0XHRicmVhaztcbjMxODY6XHRcdGNhc2UgREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUDpcbjMxODc6XHRcdGNhc2UgREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxuMzE4ODpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcbjMxODk6XHRcdFx0XHRcdGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xuMzE5MDpcdFx0XHRicmVhaztcbjMxOTE6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XG4zMTkyOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLFxuMzE5MzpcdFx0XHRcdFx0Z29hbC1cdTAwM2VuaWQpO1xuMzE5NDpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAwOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFF1b3RhIEdvYWwgQWRqdXN0bWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCwgSSBzZWUgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgIGlzIGBVNjRfTUFYYC4gRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgd2UgaGF2ZW4mIzM5O3QgcmVjb3JkZWQgYSBwcmV2aW91cyBQU0kgbWVhc3VyZW1lbnQgZm9yIHRoaXMgZ29hbCwgYSBzZW50aW5lbCB2YWx1ZSBkZW5vdGluZyB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byByZW1lbWJlciB0aGF0IHRoaXMgKmlzbiYjMzk7dCogdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZGVmaW5lZCBzdGF0ZS4KClByZXZpb3VzbHksIHdoZW4gZW5jb3VudGVyaW5nIHRoaXMgJiMzNDt1bmluaXRpYWxpemVkJiMzNDsgc3RhdGUsIHdlIHNpbXBseSBzZXQgYGdvYWwtJmd0O2N1cnJlbnRfdmFsdWVgIHRvIGBnb2FsLSZndDt0YXJnZXRfdmFsdWVgLiBOb3csIHdlIGhhdmUgYSBjb25kaXRpb25hbDoKCmBgYGMKaWYgKHMtJmd0O3F1b3RhLmdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCkKICAgIGdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSAwOwplbHNlCiAgICBnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlOwpgYGAKClNvLCB0aGUga2V5IGRpZmZlcmVuY2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIHRlbXBvcmFsIHR1bmVyLiBJZiBgcy0mZ3Q7cXVvdGEuZ29hbF90dW5lcmAgaXMgc2V0IHRvIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYCwgd2UgaW5pdGlhbGl6ZSBgZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgdG8gMC4gT3RoZXJ3aXNlLCB3ZSBrZWVwIHRoZSBwcmV2aW91cyBiZWhhdmlvciBvZiBzZXR0aW5nIGl0IHRvIHRoZSB0YXJnZXQuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvciBhZGp1c3RtZW50IHN0cmF0ZWd5IGJhc2VkIG9uIHRoZSB0eXBlIG9mIHR1bmVyIGluIHVzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0ZW1wb3JhbCB0dW5pbmcgZW50YWlscy4gSXMgaXQgc3RhcnRpbmcgZnJlc2gsIG9yIGludHJvZHVjaW5nIGEgYmlhcz8KClNpbmNlIGBnb2FsYCBpcyBhbGxvY2F0ZWQgdmlhIGBkYW1vc19uZXdfcXVvdGFfZ29hbCgpYCwgcHJvYmFibHkgdXNpbmcgYGttYWxsb2MoKWAsIEkgd2FudCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBkYW1vc19uZXdfcXVvdGFfZ29hbCgpYCB0byBzZWUgaG93IGl0JiMzOTtzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoaXMgY29udGV4dCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYGdvYWxgIGlzIGJlaW5nIG1hbmFnZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgbHVya2luZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjg1Olx0XHRkYW1vc19mcmVlX2ZpbHRlcihmKTtcbiA2ODY6XHR9XG4gNjg3Olx0XG4gNjg4Olx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuIDY4OTpcdFx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbiA2OTA6XHRcdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXG4gNjkxOlx0e1xuIDY5MjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4gNjkzOlx0XG4gNjk0Olx0XHRnb2FsID0ga21hbGxvY19vYmooKmdvYWwpO1xuIDY5NTpcdFx0aWYgKCFnb2FsKVxuIDY5NjpcdFx0XHRyZXR1cm4gTlVMTDtcbiA2OTc6XHRcdGdvYWwtXHUwMDNlbWV0cmljID0gbWV0cmljO1xuIDY5ODpcdFx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7XG4gNjk5Olx0XHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbiA3MDA6XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XG4gNzAxOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZnb2FsLVx1MDAzZWxpc3QpO1xuIDcwMjpcdFx0cmV0dXJuIGdvYWw7XG4gNzAzOlx0fVxuIDcwNDpcdFxuIDcwNTpcdHZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbiA3MDY6XHR7XG4gNzA3Olx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmctXHUwMDNlbGlzdCwgXHUwMDI2cS1cdTAwM2Vnb2Fscyk7XG4gNzA4Olx0fVxuIDcwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZGFtb3NfcXVvdGFfZ29hbGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0IGZpZWxkcyBpdCYjMzk7cyBwYWNraW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUuIFdoYXQgZG9lcyBpdCBjb250YWluLCBhbmQgaG93IGlzIGl0IG9yZ2FuaXplZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIHNpemUsIHRpbWVzdGFtcHMsIHVzYWdlIGluZGljYXRvcnMsIG9yIG1heWJlIHNvbWUgZmxhZ3M/IEJhc2VkIG9uIGl0cyBuYW1lIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiB0YXJnZXQgcXVvdGEsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBEQU1PUyBjb250ZXh0OyBzbyBJIGltYWdpbmUgSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGF0IHJlc291cmNlIHVzYWdlIHRhcmdldHMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgZGF0YSB0eXBlcywgdGhlaXIgbGF5b3V0LCBhbmQgYW55IHBvdGVudGlhbCBhbGlnbm1lbnQgY29uY2VybnMuIEtub3dpbmcgdGhlIGZpZWxkcyYjMzk7IHNlbWFudGljcyB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVuZGVkIHVzZSBhbmQgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBEQU1PUyBzdWJzeXN0ZW1zLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTE2MT1lbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk3LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE5ODpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk5LVx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBIZWFkZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIERhdGEgQWNjZXNzIE1PTml0b3IgKERBTU9OKSBmcmFtZXdvcmsgd29ya3MsIGFuZCBJIHRoaW5rIHN0YXJ0aW5nIHdpdGggdGhlIGNvcmUgaGVhZGVyIGZpbGUgaXMgdGhlIHJpZ2h0IG1vdmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIG92ZXIgdG8gYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGFuZCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIG5laWdoYm9yaG9vZCBhcm91bmQgbGluZSAxOTguIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbW9zdCBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhIG1vZHVsZSBiZWdpbiB0byBzdXJmYWNlLiBJJiMzOTttIGhvcGluZyB0byBmaW5kIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgb2YgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgYW5kIGhvdyBpdCB0cmFja3MgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucy4gVGhpcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBwb2ludHMgb2YgaXRzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk1Olx0ICogSWYgQG1ldHJpYyBpcyBEQU1PU19RVU9UQV9OT0RFX01FTUNHX3tVU0VELEZSRUV9X0JQLCBAbmlkIGFuZCBAbWVtY2dfaWRcbiAxOTY6XHQgKiByZXByZXNlbnRzIHRoZSBub2RlIGlkIGFuZCB0aGUgY2dyb3VwIHRvIGFjY291bnQgdGhlIHVzZWQgbWVtb3J5IGZvci5cbiAxOTc6XHQgKi9cbiAxOTg6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XG4gMTk5Olx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbiAyMDA6XHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlO1xuIDIwMTpcdFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xuIDIwMjpcdFx0LyogbWV0cmljLWRlcGVuZGVudCBmaWVsZHMgKi9cbiAyMDM6XHRcdHVuaW9uIHtcbiAyMDQ6XHRcdFx0c3RydWN0IHtcbiAyMDU6XHRcdFx0XHRpbnQgbmlkO1xuIDIwNjpcdFx0XHRcdHU2NCBtZW1jZ19pZDtcbiAyMDc6XHRcdFx0fTtcbiAyMDg6XHQvKiBwcml2YXRlOiAqL1xuIDIwOTpcdFx0XHQvKiBMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSSAqL1xuIDIxMDpcdFx0XHR1NjQgbGFzdF9wc2lfdG90YWw7XG4gMjExOlx0XG4gMjEyOlx0XHR9O1xuIDIxMzpcdC8qIHByaXZhdGU6ICovXG4gMjE0Olx0XHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIDIxNTpcdFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIDIxNjpcdH07XG4gMjE3Olx0XG4gMjE4Olx0LyoqXG4gMjE5Olx0ICogZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIC0gR29hbC1iYXNlZCBxdW90YSB0dW5pbmcgbG9naWMuXG4gMjIwOlx0ICogQERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVDpcdEFpbSBsb25nIHRlcm0gY29uc2lzdGVudCBxdW90YS5cbiAyMjE6XHQgKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTDpcdEFpbSB6ZXJvIHF1b3RhIGFzYXAuXG4gMjIyOlx0ICovXG4gMjIzOlx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbiAyMjQ6XHRcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVCxcbiAyMjU6XHRcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXG4gMjI2Olx0fTtcbiAyMjc6XHRcbiAyMjg6XHQvKipcbiAyMjk6XHQgKiBzdHJ1Y3QgZGFtb3NfcXVvdGEgLSBDb250cm9scyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgREFNT04gUXVvdGEgR29hbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHN1YnRseSB0d2Vha3MgaG93IHRoZSBgY3VycmVudF92YWx1ZWAgaXMgY29tcHV0ZWQgd2l0aGluIHRoZSBEQU1PTiBxdW90YSBzeXN0ZW0uIEl0JiMzOTtzIGZvY3VzZWQgb24gdGhlIGBnb2FsLSZndDtsYXN0X3BzaV90b3RhbGAgZmllbGQsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgcGFydCBvZiBhIHVuaW9uIHdpdGggYG5pZGAgYW5kIGBtZW1jZ19pZGAuIEl0JiMzOTtzIGEga2V5IHZhbHVlIGZvciB0cmFja2luZyBtZW1vcnkgUFNJLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IHRoZSBjYXNlIHdoZXJlIGBtZXRyaWNgIGlzIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCB0aGUgYGxhc3RfcHNpX3RvdGFsYCBoYXMgdGhlIHNlbnRpbmVsIHZhbHVlIGBVNjRfTUFYYCwgbWVhbmluZyBpdCBoYXNuJiMzOTt0IGJlZW4gbWVhc3VyZWQgeWV0LiBUaGF0IGlzIGluaXRpYWxpemVkIGluIGBkYW1vc19uZXdfcXVvdGFfZ29hbCgpYC4KCkluIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgLCB0aGUgZXhpc3RpbmcgY29kZSBjaGVja3MgaWYgYGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsYCAqaXMqIHRoaXMgc2VudGluZWwgdmFsdWUuIElmIGl0ICppcyosIHRoZW4gYGN1cnJlbnRfdmFsdWVgIGlzIHNldCB0byBlaXRoZXIgMCAoaWYgdXNpbmcgdGhlIHRlbXBvcmFsIHR1bmVyKSBvciBgdGFyZ2V0X3ZhbHVlYCAob3RoZXJ3aXNlKS4gVGhlIHVwZGF0ZWQgcGF0Y2ggc2VlbXMgdG8gYmUgYWx0ZXJpbmcgdGhlIGxvZ2ljIGZvciBjYWxjdWxhdGluZyBjdXJyZW50X3ZhbHVlIG9ubHkgd2hlbiB0aGUgc2VudGluZWwgaXMgcHJlc2VudC4gQWZ0ZXIgdGhhdCwgaXQgdXBkYXRlcyBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgIHRvIHRoZSBgbm93X3BzaV90b3RhbGAuCgpNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IGlzc3VlcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSBvciBleHBvc2VzIGludGVybmFsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSBpbiBhIHdheSB0aGF0IGNyZWF0ZXMgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY29kZSBJ4oCZbSBmYW1pbGlhciB3aXRoIHN1Z2dlc3RzIHRoYXQgdGhlIHBhdGNoICpzaG91bGRuJiMzOTt0KiBkbyB0aGF0LiBUaGUgYWZmZWN0ZWQgdmFsdWVzIOKAkyBgcy0mZ3Q7cXVvdGEuZ29hbF90dW5lcmAgYW5kIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCDigJMgYXJlIGludGVybmFsIHRvIERBTU9OJiMzOTtzIGFjY291bnRpbmcgYW5kIHRoZSBxdW90YSBzeXN0ZW0uIEV2ZW4gaWYgdGhlc2UgYXJlIHJlYWQgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGhvdyBgY3VycmVudF92YWx1ZWAgaXMgZXhwb3NlZC4gVGhpcyB3aWxsIG5lZWQgZnVydGhlciByZXZpZXcgb2YgaG93IHN5c2ZzIGhhbmRsZXMgdGhlc2UgdmFsdWVzLiBUaGUgZ29vZCBuZXdzIGlzLCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBwYXNzZWQgdG8gdXNlciBzcGFjZS4KClRoZSBpbmNsdXNpb24gb2YgdGhlIEtVbml0IHRlc3QgYGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2lgIGlzIGV4Y2VsbGVudDsgaXQmIzM5O3MgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0byBjb3ZlciB0aGUgY2hhbmdlZCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3VycmVudF92YWx1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTIxNT1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjIyLVx0aWYgKGRzdC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcbm1tL2RhbW9uL2NvcmUuYzoxMjIzOlx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vY29yZS5jLTEyMjQtXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTMxMzc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19odWdlcGFnZV9tZW1fYnAodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE1Mi1cbm1tL2RhbW9uL2NvcmUuYzozMTUzOnN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0zMTU0LVx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTU5LVx0Y2FzZSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUOlxubW0vZGFtb24vY29yZS5jOjMxNjA6XHRcdC8qIFVzZXIgc2hvdWxkIGFscmVhZHkgc2V0IGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSAqL1xubW0vZGFtb24vY29yZS5jLTMxNjEtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTY4LVx0XHRcdFx0LyogYW4gYWNoaWV2ZWQgc2NvcmUgd291bGQgemVybyB0aGUgdGVtcG9yYWwgcXVvdGEgKi9cbm1tL2RhbW9uL2NvcmUuYzozMTY5Olx0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0zMTcwLVx0XHRcdGVsc2Vcbm1tL2RhbW9uL2NvcmUuYzozMTcxOlx0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWU7XG5tbS9kYW1vbi9jb3JlLmMtMzE3Mi1cdFx0fSBlbHNlIHtcbm1tL2RhbW9uL2NvcmUuYzozMTczOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxubW0vZGFtb24vY29yZS5jLTMxNzQtXHRcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTc5LVx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxubW0vZGFtb24vY29yZS5jOjMxODA6XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbV9icChnb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0zMTgxLVx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE4My1cdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxubW0vZGFtb24vY29yZS5jOjMxODQ6XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzE4NS1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vY29yZS5jLTMxODctXHRjYXNlIERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMTg4Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcbm1tL2RhbW9uL2NvcmUuYy0zMTg5LVx0XHRcdFx0Z29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XG4tLVxubW0vZGFtb24vY29yZS5jLTMxOTEtXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxubW0vZGFtb24vY29yZS5jOjMxOTI6XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLFxubW0vZGFtb24vY29yZS5jLTMxOTMtXHRcdFx0XHRnb2FsLVx1MDAzZW5pZCk7XG4tLVxubW0vZGFtb24vY29yZS5jLTMxOTUtXHRjYXNlIERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMTk2Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcbm1tL2RhbW9uL2NvcmUuYy0zMTk3LVx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzIwND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyMTAtXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzIxMTpcdFx0ZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShjLCBzLCBnb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0zMjEyLVx0XHRoaWdoZXN0X3Njb3JlID0gbWF4KGhpZ2hlc3Rfc2NvcmUsXG5tbS9kYW1vbi9jb3JlLmM6MzIxMzpcdFx0XHRcdG11bHRfZnJhYyhnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUsIDEwMDAwLFxubW0vZGFtb24vY29yZS5jLTMyMTQtXHRcdFx0XHRcdGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKSk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDYtXHRcdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjQ3Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBxdW90YV9hdXRvdHVuZV9mZWVkYmFjaztcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDgtXHRcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgZ29hbCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE4LVx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxOTpcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVx0aW50IG5pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMyMz1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzMzpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzOTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDAtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MjpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDMtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDYtXHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0NzpcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0OC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQyMj1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDI0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyNjpcdFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyNy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzND1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDM2LVx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0Mzc6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzgtXHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX25pZF9hdHRyLmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NzAtXHRcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODcxOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXHUwMDNlY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODcyLVx0XHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTItXHRpZiAoc3JjLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxMzpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlLCBzcmMtXHUwMDNlY3VycmVudF92YWx1ZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE0LVx0c3dpdGNoIChkc3QtXHUwMDNlbWV0cmljKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzMj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM2LVx0XHQudGFyZ2V0X3ZhbHVlID0gMTAwMCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Mzc6XHRcdC5jdXJyZW50X3ZhbHVlID0gMTIzLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgzOC1cdFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDQtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NDU6XHRcdFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODQ2LVx0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDU2Nyxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODUxLVx0XHRcdC50YXJnZXRfdmFsdWUgPSA3ODksXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUyOlx0XHRcdC5jdXJyZW50X3ZhbHVlID0gMTJ9KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTMtXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1Ni1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gMzQ1LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg1NzpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDY3OCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTgtXHRcdFx0Lm5pZCA9IDksXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2My1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gMTIsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODY0Olx0XHRcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2NS1cdFx0XHQubmlkID0gNixcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODcwLVx0XHRcdC50YXJnZXRfdmFsdWUgPSA0NTYsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODcxOlx0XHRcdC5jdXJyZW50X3ZhbHVlID0gNTY3LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3Mi1cdFx0XHQubmlkID0gNixcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODc4LVx0XHRcdC50YXJnZXRfdmFsdWUgPSA4OTAsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODc5Olx0XHRcdC5jdXJyZW50X3ZhbHVlID0gOTAxLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4MC1cdFx0XHQubmlkID0gMTAsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4Ni1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4NzpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04ODgtXHRcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA3MQoJCQkJCQkJb3V0cHV0OiAyNjAKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IEZpeCBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIGNoYW5nZSBpcyBhbGwgYWJvdXQga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBhbmQgdGhhdCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgZnVuY3Rpb24uIFdoYXQmIzM5O3MgaGFwcGVuaW5nIGlzIHRoYXQgd2hlbiBjYWxjdWxhdGluZyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AsIGFuZCBjcnVjaWFsbHksIGJlZm9yZSB0aGUgZmlyc3QgUFNJIHNhbXBsZSBpcyBldmVuIHJlY29yZGVkIChtZWFuaW5nIGBnb2FsLSZndDtsYXN0X3BzaV90b3RhbGAgaXMgc3RpbGwgYXQgaXRzIGluaXRpYWwgYFU2NF9NQVhgIHZhbHVlKSwgdGhlIGNvZGUgY2hlY2tzIGlmIHRoZSBnb2FsIHR1bmVyIGlzIHNldCB0byBgREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTGAuIElmIGl0IGlzLCB0aGVuIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCBnZXRzIHNldCB0byBgMGAgaW5zdGVhZCBvZiBgZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlYC4gQSBLVW5pdCB0ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIHZlcmlmeSB0aGlzIHNwZWNpZmljIGJlaGF2aW9yLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uLCBhcyBhbHdheXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzPyBVbmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd3JpdGVzLCBpbmZvcm1hdGlvbiBsZWFrcz8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgRmlyc3QsIGBsYXN0X3BzaV90b3RhbGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVTY0X01BWGAgd2hlbiBhIGdvYWwgaXMgY3JlYXRlZCBvciBjb21taXR0ZWQsIHdoaWNoIGlzIHRoZSBzZW50aW5lbCB2YWx1ZSB3ZSBhcmUgdGFsa2luZyBhYm91dC4KKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgaW50cm9kdWNlZCwgc28gdGhhdCYjMzk7cyBhIGNoZWNrLgoqICAgVGhlcmUmIzM5O3Mgbm8gY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UgaGFwcGVuaW5nIGhlcmUuCiogICBObyBwb2ludGVycyBvciBidWZmZXIgYWNjZXNzZXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBieXRlcyBlaXRoZXIuCiogICBLTVNBTiBzaG91bGRuJiMzOTt0IGJlIGNvbmNlcm5lZCwgYmVjYXVzZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgYWZmZWN0IGFueSBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHN0YW5kYXJkIHNhbml0aXplcnMgKGxpa2UgS0FTQU4pIGFuZCB0aGUgS1VuaXQgdGVzdHMgYXJlIHN1ZmZpY2llbnQgaGVyZS4KClRvIHJlY2FwIGFuZCBtYWtlIHN1cmUgSSYjMzk7dmUgY292ZXJlZCBldmVyeXRoaW5nLCB0aGlzIHBhdGNoIGZpeGVzIHRoZSBpbml0aWFsIGNhbGN1bGF0aW9uIG9mIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCB3aGVuIHVzaW5nIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYCAqYmVmb3JlKiB0aGUgZmlyc3QgUFNJIG1lYXN1cmVtZW50IGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBpcyB0YWtlbi4gVGhhdCBgVTY0X01BWGAgdmFsdWUgaXMgYSBkZWxpYmVyYXRlIHNlbnRpbmVsLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkLiBObyB1c2VyIHNwYWNlIGludGVyYWN0aW9uIGlzIGFmZmVjdGVkLCBhbmQgbm90aGluZyByZWxhdGVkIHRvIGJ1ZmZlciBib3VuZHMgb3IgYWxsb2NhdGlvbiBsb2dpYyBjaGFuZ2VzLiBPa2F5LCB0aW1lIHRvIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nIG9uZSBsYXN0IHRpbWUuIE5vdyBJIGNhbiBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04mIzM5O3MgcXVvdGEgZ29hbCBsb2dpYyBpbiBgbW0vZGFtb24vY29yZS5jYCBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgbWV0cmljcyBhbmQgYWRkcyBhIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVhgIChhIGRvbWFpbi1sZXZlbCBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gUFNJIHNhbXBsZSBoYXMgeWV0IGJlZW4gcmVjb3JkZWQpLCBpdCBzZXRzIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwYCBpbnN0ZWFkIG9mIGBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZWAgaWYgdGhlIHR1bmVyIGlzIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYC5cblxuRGVzcGl0ZSB0aGUgY29kZSBjb21tZW50IHJlZmVycmluZyB0byBcJiMzNDt1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsXCYjMzQ7LCB0aGlzIGlzIHB1cmVseSBhIHNlbWFudGljIHNlbnRpbmVsIHZhbHVlOiBgbGFzdF9wc2lfdG90YWxgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFU2NF9NQVhgIHVwb24gYWxsb2NhdGlvbiBvciBjb21taXQgKGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmApLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBhY2Nlc3NlZCBvciBleHBvc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiYjMzk7cyBxdW90YSBnb2FsIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBtZXRyaWNzIGFuZCBhZGRzIGEgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0LiBTcGVjaWZpY2FsbHksIHdoZW4gYGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWGAgKGEgZG9tYWluLWxldmVsIHNlbnRpbmVsIHZhbHVlIGluZGljYXRpbmcgdGhhdCBubyBQU0kgc2FtcGxlIGhhcyB5ZXQgYmVlbiByZWNvcmRlZCksIGl0IHNldHMgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IDBgIGluc3RlYWQgb2YgYGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlYCBpZiB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLlxuXG5EZXNwaXRlIHRoZSBjb2RlIGNvbW1lbnQgcmVmZXJyaW5nIHRvIFwmIzM0O3VuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWxcJiMzNDssIHRoaXMgaXMgcHVyZWx5IGEgc2VtYW50aWMgc2VudGluZWwgdmFsdWU6IGBsYXN0X3BzaV90b3RhbGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVTY0X01BWGAgdXBvbiBhbGxvY2F0aW9uIG9yIGNvbW1pdCAoYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGFjY2Vzc2VkIG9yIGV4cG9zZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDE6MzEuNTIzMTc5MTg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwMTUzODMxNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiUFNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZVwiLFxuICAgIFwiZGFtb3NfcXVvdGFfc2NvcmVcIixcbiAgICBcImRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWxcIixcbiAgICBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04ncyBxdW90YSBnb2FsIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBtZXRyaWNzIGFuZCBhZGRzIGEgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0LiBTcGVjaWZpY2FsbHksIHdoZW4gYGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVhgIChhIGRvbWFpbi1sZXZlbCBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gUFNJIHNhbXBsZSBoYXMgeWV0IGJlZW4gcmVjb3JkZWQpLCBpdCBzZXRzIGBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMGAgaW5zdGVhZCBvZiBgZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlYCBpZiB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLlxcblxcbkRlc3BpdGUgdGhlIGNvZGUgY29tbWVudCByZWZlcnJpbmcgdG8gXFxcInVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWxcXFwiLCB0aGlzIGlzIHB1cmVseSBhIHNlbWFudGljIHNlbnRpbmVsIHZhbHVlOiBgbGFzdF9wc2lfdG90YWxgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFU2NF9NQVhgIHVwb24gYWxsb2NhdGlvbiBvciBjb21taXQgKGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmApLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBhY2Nlc3NlZCBvciBleHBvc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04vREFNT1MgcXVvdGEgZ29hbCBldmFsdWF0aW9uIGluIG1tL2RhbW9uL2NvcmUuYywgZW5zdXJpbmcgdGhhdCB1bm1lYXN1cmVkIFBTSSBnb2FscyB1bmRlciBhIHRlbXBvcmFsIGdvYWwgdHVuZXIgZG8gbm90IHByZW1hdHVyZWx5IHplcm8gdGhlIGVmZmVjdGl2ZSBxdW90YSBkdXJpbmcgaW5pdGlhbCB0dW5pbmcgcm91bmRzLiBUaGlzIGFsdGVycyBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgZXhlY3V0aW9uIGFuZCBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04ncyBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAxOjMxLjUyMzE4MzU2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NzYwNTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg1NDI1NTQ1YmRiOGMzYmM0NGViY2ViNmNhMDU0MjYzOTA2NjRlMzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDE6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggMDZjZjJhYjdlOTdkNy4uZTZkODdmZDM5OTJlZSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMzE2MSwxMiArMzE2MSwxOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcXG4gXFx0XFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG4tXFx0XFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xcbi1cXHRcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcXG4tXFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZTtcXG4tXFx0XFx0ZWxzZVxcbitcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkge1xcbitcXHRcXHRcXHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXFxuK1xcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5nb2FsX3R1bmVyID09XFxuK1xcdFxcdFxcdFxcdFxcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXFxuK1xcdFxcdFxcdFxcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXFxuK1xcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuK1xcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC1cXG4gXFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxuK1xcdFxcdH1cXG4gXFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5pbmRleCBjMDFlNmE3NWNhZGMxLi4yYjliMjRjZTdkYWQzIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbkBAIC04ODksNiArODg5LDc0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRcXHR9KTtcXG4gfVxcbiBcXG4rLypcXG4rICogVW5tZWFzdXJlZCBQU0kgZ29hbHMgbXVzdCBub3QgZGlzYWJsZSB0aGUgdGVtcG9yYWwgcXVvdGEuXFxuKyAqIEtlZXAgc3ogKiAxMDAwMCB3aXRoaW4gYSAzMi1iaXQgdW5zaWduZWQgbG9uZy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XFxuK1xcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge307XFxuK1xcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHtcXG4rXFx0XFx0LnN6ID0gU1pfNjRLLFxcbitcXHRcXHQuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcyA9IHt9O1xcbitcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBzcmMgPSB7XFxuK1xcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxuK1xcdFxcdC50YXJnZXRfdmFsdWUgPSBVTE9OR19NQVgsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbitcXHRzdHJ1Y3QgZGFtb3MgKnM7XFxuK1xcbitcXHRpZiAoIWMpXFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcIik7XFxuK1xcdHMgPSBkYW1vbl9uZXdfc2NoZW1lKFxcdTAwMjZwYXR0ZXJuLCBEQU1PU19TVEFULCAwLCBcXHUwMDI2cXVvdGEsIFxcdTAwMjZ3bWFya3MsXFxuK1xcdFxcdFxcdE5VTUFfTk9fTk9ERSk7XFxuK1xcdGlmICghcykge1xcbitcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic2NoZW1lIGFsbG9jIGZhaWxcXFwiKTtcXG4rXFx0fVxcbitcXHRkYW1vbl9hZGRfc2NoZW1lKGMsIHMpO1xcbitcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLCBVTE9OR19NQVgpO1xcbitcXHRpZiAoIWdvYWwpIHtcXG4rXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImdvYWwgYWxsb2MgZmFpbFxcXCIpO1xcbitcXHR9XFxuK1xcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFxcdTAwMjZzLVxcdTAwM2VxdW90YSwgZ29hbCk7XFxuK1xcbitcXHQvKiBmcmVzaCBnb2FsLCBmaXJzdCB0dW5pbmcgcm91bmQgKi9cXG4rXFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXFx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTtcXG4rXFxuK1xcdC8qIHNlY29uZCByb3VuZDogbGFzdF9wc2lfdG90YWwgaXMgaW5pdGlhbGlzZWQgbm93ICovXFxuK1xcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVxcdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7XFxuK1xcbitcXHQvKiBjb21taXQgYSBQU0kgZ29hbCBvbnRvIHRoZSBpbml0aWFsaXNlZCBQU0kgZ29hbCAqL1xcbitcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChnb2FsLCBcXHUwMDI2c3JjKTtcXG4rXFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXFx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTtcXG4rXFxuK1xcdC8qIGEgbWVhc3VyZWQgcm91bmQgdGhhdCByZWFjaGVzIHRoZSB0YXJnZXQgZGlzYWJsZXMgdGhlIHF1b3RhICovXFxuK1xcdGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSA9IDEwO1xcbitcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKSAtIDEwO1xcbitcXHQvKiBVNjRfTUFYIG1hcmtzIGFuIHVubWVhc3VyZWQgZ29hbCwga2VlcCB0aGUgc2FtcGxlIGF3YXkgZnJvbSBpdCAqL1xcbitcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcXG4rXFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwtLTtcXG4rXFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXFx1MDAzZXF1b3RhLmVzeiwgMHVsKTtcXG4rXFxuK1xcdC8qIHRoZSBjb25zaXN0IHR1bmVyIGtlZXBzIGl0cyBxdW90YSBvdmVyIGFuIHVubWVhc3VyZWQgcm91bmQgKi9cXG4rXFx0cy1cXHUwMDNlcXVvdGEuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVDtcXG4rXFx0cy1cXHUwMDNlcXVvdGEuZXN6X2JwID0gU1pfMzJLICogMTAwMDA7XFxuK1xcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGdvYWwsIFxcdTAwMjZzcmMpO1xcbitcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl8zMkspO1xcbitcXG4rXFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuIFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbHMsIGludCBucl9kc3RfZ29hbHMsXFxuIFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmNfZ29hbHMsIGludCBucl9zcmNfZ29hbHMpXFxuQEAgLTE4ODcsNiArMTk1NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XFxuIFxcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9uZXdfZmlsdGVyKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyksXFxuK1xcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaSksXFxuIFxcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGEpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXIpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMTozMy4yMTEzOTUyMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MTQ5ODE1NzIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIlBTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVcIixcbiAgICBcImRhbW9zX3F1b3RhX3Njb3JlXCIsXG4gICAgXCJkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsXCIsXG4gICAgXCJkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhXCIsXG4gICAgXCJkYW1vc19hZGp1c3RfcXVvdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTi9EQU1PUyBxdW90YSBnb2FsIGV2YWx1YXRpb24gaW4gbW0vZGFtb24vY29yZS5jLCBlbnN1cmluZyB0aGF0IHVubWVhc3VyZWQgUFNJIGdvYWxzIHVuZGVyIGEgdGVtcG9yYWwgZ29hbCB0dW5lciBkbyBub3QgcHJlbWF0dXJlbHkgemVybyB0aGUgZWZmZWN0aXZlIHF1b3RhIGR1cmluZyBpbml0aWFsIHR1bmluZyByb3VuZHMuIFRoaXMgYWx0ZXJzIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBleGVjdXRpb24gYW5kIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTidzIHN5c2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTQyNTU0NWJkYjhjM2JjNDRlYmNlYjZjYTA1NDI2MzkwNjY0ZTMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDE6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDA2Y2YyYWI3ZTk3ZDcuLmU2ZDg3ZmQzOTkyZWUgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMxNjEsMTIgKzMxNjEsMTggQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRicmVhaztcbiBcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxuIFx0XHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuLVx0XHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXG4tXHRcdGlmIChnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpXG4tXHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWU7XG4tXHRcdGVsc2VcbitcdFx0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkge1xuK1x0XHRcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cbitcdFx0XHRpZiAocy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyID09XG4rXHRcdFx0XHRcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXG4rXHRcdFx0XHQvKiBhbiBhY2hpZXZlZCBzY29yZSB3b3VsZCB6ZXJvIHRoZSB0ZW1wb3JhbCBxdW90YSAqL1xuK1x0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gMDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZTtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC1cbiBcdFx0XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG4rXHRcdH1cbiBcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggYzAxZTZhNzVjYWRjMS4uMmI5YjI0Y2U3ZGFkMyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtODg5LDYgKzg4OSw3NCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0XHR9KTtcbiB9XG4gXG4rLypcbisgKiBVbm1lYXN1cmVkIFBTSSBnb2FscyBtdXN0IG5vdCBkaXNhYmxlIHRoZSB0ZW1wb3JhbCBxdW90YS5cbisgKiBLZWVwIHN6ICogMTAwMDAgd2l0aGluIGEgMzItYml0IHVuc2lnbmVkIGxvbmcuXG4rICovXG4rc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcbitcdHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiBwYXR0ZXJuID0ge307XG4rXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGEgPSB7XG4rXHRcdC5zeiA9IFNaXzY0SyxcbitcdFx0LmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxuK1x0fTtcbitcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcyA9IHt9O1xuK1x0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgc3JjID0ge1xuK1x0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuK1x0XHQudGFyZ2V0X3ZhbHVlID0gVUxPTkdfTUFYLFxuK1x0fTtcbitcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xuK1x0c3RydWN0IGRhbW9zICpzO1xuK1xuK1x0aWYgKCFjKVxuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiY3R4IGFsbG9jIGZhaWxcIik7XG4rXHRzID0gZGFtb25fbmV3X3NjaGVtZShcdTAwMjZwYXR0ZXJuLCBEQU1PU19TVEFULCAwLCBcdTAwMjZxdW90YSwgXHUwMDI2d21hcmtzLFxuK1x0XHRcdE5VTUFfTk9fTk9ERSk7XG4rXHRpZiAoIXMpIHtcbitcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJzY2hlbWUgYWxsb2MgZmFpbFwiKTtcbitcdH1cbitcdGRhbW9uX2FkZF9zY2hlbWUoYywgcyk7XG4rXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLCBVTE9OR19NQVgpO1xuK1x0aWYgKCFnb2FsKSB7XG4rXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGMpO1xuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiZ29hbCBhbGxvYyBmYWlsXCIpO1xuK1x0fVxuK1x0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2cy1cdTAwM2VxdW90YSwgZ29hbCk7XG4rXG4rXHQvKiBmcmVzaCBnb2FsLCBmaXJzdCB0dW5pbmcgcm91bmQgKi9cbitcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7XG4rXG4rXHQvKiBzZWNvbmQgcm91bmQ6IGxhc3RfcHNpX3RvdGFsIGlzIGluaXRpYWxpc2VkIG5vdyAqL1xuK1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTtcbitcbitcdC8qIGNvbW1pdCBhIFBTSSBnb2FsIG9udG8gdGhlIGluaXRpYWxpc2VkIFBTSSBnb2FsICovXG4rXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChnb2FsLCBcdTAwMjZzcmMpO1xuK1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTtcbitcbitcdC8qIGEgbWVhc3VyZWQgcm91bmQgdGhhdCByZWFjaGVzIHRoZSB0YXJnZXQgZGlzYWJsZXMgdGhlIHF1b3RhICovXG4rXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IDEwO1xuK1x0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKSAtIDEwO1xuK1x0LyogVTY0X01BWCBtYXJrcyBhbiB1bm1lYXN1cmVkIGdvYWwsIGtlZXAgdGhlIHNhbXBsZSBhd2F5IGZyb20gaXQgKi9cbitcdGlmIChnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpXG4rXHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwtLTtcbitcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cdTAwM2VxdW90YS5lc3osIDB1bCk7XG4rXG4rXHQvKiB0aGUgY29uc2lzdCB0dW5lciBrZWVwcyBpdHMgcXVvdGEgb3ZlciBhbiB1bm1lYXN1cmVkIHJvdW5kICovXG4rXHRzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1Q7XG4rXHRzLVx1MDAzZXF1b3RhLmVzel9icCA9IFNaXzMySyAqIDEwMDAwO1xuK1x0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2c3JjKTtcbitcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzMySyk7XG4rXG4rXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FscywgaW50IG5yX2RzdF9nb2FscyxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyY19nb2FscywgaW50IG5yX3NyY19nb2FscylcbkBAIC0xODg3LDYgKzE5NTUsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMpLFxuK1x0S1VOSVRfQ0FTRShkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGEpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9kZXN0cyksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlciksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMTozMy4yMTEzOTY2ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDk2Njk1Mzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoOiBRdW90YSBHb2FsIEFkanVzdG1lbnQgYW5kIEtVbml0IFRlc3QqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIHBhdGNoIHN1Ym1pdHRlZCBmb3IgREFNT04sIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGEgbmV3IEtVbml0IHRlc3QgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIExldCdzIGRpdmUgaW4uIFRoZSBnb2FsIGlzIHRvIGV2YWx1YXRlIHRoaXMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuXG5cbkZpcnN0LCBJJ2xsIGZvY3VzIG9uIHRoZSBjb2RlIGRpZmYgaW4gYGNvcmUuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgbGluZSAzMTYxLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBob3cgREFNT04gc2V0cyB0aGUgYGN1cnJlbnRfdmFsdWVgIGZvciBxdW90YSBnb2Fscywgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIHF1b3RhIHRhcmdldCBpcyBiYXNlZCBvbiBzb21lIGtpbmQgb2YgUFNJIChQcmVzc3VyZSBTdGFsbCBJbmZvcm1hdGlvbikuIFRoZSBjb2RlIGFkZHJlc3NlcyB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgY2FzZS5cblxuQmVmb3JlIHRoaXMgY2hhbmdlLCBpZiBgbGFzdF9wc2lfdG90YWxgIHdhcyB1bmluaXRpYWxpemVkIChgVTY0X01BWGApLCB0aGUgYGN1cnJlbnRfdmFsdWVgIHdvdWxkIGp1c3QgYmUgc2V0IHRvIHRoZSBgdGFyZ2V0X3ZhbHVlYC4gTm93LCB0aGVyZSdzIGEgY29uZGl0aW9uYWwgY2hlY2suICBJZiB0aGUgcXVvdGEgdHVuZXIgaXMgdGVtcG9yYWwgKGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYCkgYW5kIGBsYXN0X3BzaV90b3RhbGAgaXMgdW5pbml0aWFsaXplZCwgdGhlIGBjdXJyZW50X3ZhbHVlYCBiZWNvbWVzIHplcm8uIE90aGVyd2lzZSwgaXQgYmVoYXZlcyBhcyBiZWZvcmUgKHdpdGggYW4gdW5pbml0aWFsaXplZCBgbGFzdF9wc2lfdG90YWxgKS4gSWYgYGxhc3RfcHNpX3RvdGFsYCBoYXMgYmVlbiBpbml0aWFsaXplZCwgdGhlIGBjdXJyZW50X3ZhbHVlYCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IFBTSSB0b3RhbCBhbmQgdGhlIGxhc3Qgb25lLiBUaGUgYGxhc3RfcHNpX3RvdGFsYCBpcyB1cGRhdGVkIGluIGVpdGhlciB0aGUgaW5pdGlhbGl6ZWQgb3IgdW5pbml0aWFsaXplZCBjYXNlLlxuXG5Gcm9tIG15IHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIGxpa2UgYSByZWZpbmVtZW50IGluIHRoZSB0ZW1wb3JhbCBxdW90YSBhZGp1c3RtZW50IGxvZ2ljLiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGlzIHRvIG1ha2UgdGhlIHRlbXBvcmFsIHF1b3RhIHplcm8gaWYgdW5pbml0aWFsaXplZCwgcmF0aGVyIHRoYW4gYmVpbmcgc2V0IHRvIHRoZSB0YXJnZXQgdmFsdWUuXG5cbkkgYWxzbyBzZWUgYSBuZXcgS1VuaXQgdGVzdCwgYGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2lgLiBUaGlzIGlzIGdyZWF0LiBJdCdsbCBiZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSB0ZXN0IGlzIHZlcmlmeWluZywgd2hpY2ggd2lsbCBzaGVkIG1vcmUgbGlnaHQgb24gdGhlIGludGVuZGVkIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgdGVzdCBjb2RlIGluIGBjb3JlLWt1bml0LmhgIHRvIHNlZSB0aGUgc3BlY2lmaWNzLiBNeSBndWVzcyBpcyBpdCB2ZXJpZmllcyB0aGUgbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIEkganVzdCBkZXNjcmliZWQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBQU0kgdmFsdWVzIGFyZSBzZXQgdXAgYW5kIGhvdyB0aGUgYGN1cnJlbnRfdmFsdWVgIGlzIGFzc2VydGVkIGluIHRoZSB0ZXN0LiBUaGUgdGVzdCB3aWxsIGhvcGVmdWxseSBzaG93IG1lIHRoZSBzY2VuYXJpb3MgdGhpcyBsb2dpYyBoYW5kbGVzLCB3aGljaCBpcyBrZXkuIE15IGV4cGVyaWVuY2Ugd2l0aCBEQU1PTiB0ZWxscyBtZSB0aGlzIGxpa2VseSBhaW1zIHRvIGZpbmUtdHVuZSB0aGUgcXVvdGEgYmVoYXZpb3IgaW4gZWRnZSBjYXNlcyBvciBhdCB0aGUgc3RhcnQgb2YgREFNT04ncyBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMjoyNC4xNzgzNTUzMzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNTA6XFx0XFx0cmV0dXJuIG11bHRfZnJhYyh0aHAsIDEwMDAwLCB0b3RhbF9wYWdlcyAtIGZyZWVfcGFnZXMpO1xcbjMxNTE6XFx0fVxcbjMxNTI6XFx0XFxuMzE1MzpcXHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMzE1NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjMxNTU6XFx0e1xcbjMxNTY6XFx0XFx0dTY0IG5vd19wc2lfdG90YWw7XFxuMzE1NzpcXHRcXG4zMTU4OlxcdFxcdHN3aXRjaCAoZ29hbC1cXHUwMDNlbWV0cmljKSB7XFxuMzE1OTpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxuMzE2MDpcXHRcXHRcXHQvKiBVc2VyIHNob3VsZCBhbHJlYWR5IHNldCBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlICovXFxuMzE2MTpcXHRcXHRcXHRicmVhaztcXG4zMTYyOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbjMxNjM6XFx0XFx0XFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG4zMTY0OlxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XFxuMzE2NTpcXHRcXHRcXHRcXHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXFxuMzE2NjpcXHRcXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuZ29hbF90dW5lciA9PVxcbjMxNjc6XFx0XFx0XFx0XFx0XFx0XFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcXG4zMTY4OlxcdFxcdFxcdFxcdFxcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXFxuMzE2OTpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMDtcXG4zMTcwOlxcdFxcdFxcdFxcdGVsc2VcXG4zMTcxOlxcdFxcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuMzE3MjpcXHRcXHRcXHR9IGVsc2Uge1xcbjMxNzM6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxcbjMxNzQ6XFx0XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxuMzE3NTpcXHRcXHRcXHR9XFxuMzE3NjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XFxuMzE3NzpcXHRcXHRcXHRicmVhaztcXG4zMTc4OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG4zMTc5OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcXG4zMTgwOlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XFxuMzE4MTpcXHRcXHRcXHRicmVhaztcXG4zMTgyOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbjMxODM6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxuMzE4NDpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcXG4zMTg1OlxcdFxcdFxcdGJyZWFrO1xcbjMxODY6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQOlxcbjMxODc6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlA6XFxuMzE4ODpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXFxuMzE4OTpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XFxuMzE5MDpcXHRcXHRcXHRicmVhaztcXG4zMTkxOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XFxuMzE5MjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsXFxuMzE5MzpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VuaWQpO1xcbjMxOTQ6XFx0XFx0XFx0YnJlYWs7XFxuMzE5NTpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDpcXG4zMTk2OlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcXG4zMTk3OlxcdFxcdFxcdGJyZWFrO1xcbjMxOTg6XFx0XFx0ZGVmYXVsdDpcXG4zMTk5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMjoyNC4xNzg1ODkyODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDcwNDA1OTM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIENhbGxzIHRvIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjYWxsZXJzIG9mIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGVidWdnaW5nIHRhc2ssIGJ1dCB0aGUgYXBwcm9hY2ggSSB0YWtlIHdpbGwgZGVwZW5kIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5NeSBpbml0aWFsIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHVzZSBhIHN0YXRpYyBhbmFseXNpcyB0b29sLCBsaWtlIGdyZXAgd2l0aCBzb21lIGp1ZGljaW91cyB1c2Ugb2YgcmVnZXgsIHRvIHNlYXJjaCB0aGUgZW50aXJlIHByb2plY3QgZm9yIGFsbCBpbnN0YW5jZXMgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhpcyBnaXZlcyBtZSBhIHF1aWNrIG92ZXJ2aWV3IG9mIGFsbCBwb3RlbnRpYWwgY2FsbCBzaXRlcy4gSG93ZXZlciwgc3RhdGljIGFuYWx5c2lzIGNhbiBiZSBhIGJpdCBibHVudDsgaXQgbWlnaHQgbWlzcyBjYWxscyBpZiB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluZGlyZWN0bHkgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBvciBtYWNybyBleHBhbnNpb25zLiBJJ2QgdGhlbiBoYXZlIHRvIHJlZmluZSB0aGUgc2VhcmNoLlxuXG5JZiB0aGF0IHByb3ZlcyBpbnN1ZmZpY2llbnQsIG9yIGlmIHRoZSBjb2RlIGlzIHBhcnRpY3VsYXJseSBjb21wbGV4LCBJJ2xsIG5lZWQgdG8gZW1wbG95IGEgZGVidWdnZXIuIEkgY2FuIHNldCBhIGJyZWFrcG9pbnQgb24gYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGFuZCB0aGVuIHJ1biB0aGUgYXBwbGljYXRpb24gd2l0aCBhIHRlc3QgY2FzZSB0aGF0IEkga25vdyBzaG91bGQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLiBUaGlzIGlzIHdoZXJlIGEgZ29vZCB0ZXN0IGVudmlyb25tZW50IGNvbWVzIGluIGhhbmR5LiBTdGVwcGluZyB0aHJvdWdoIHRoZSBjb2RlIHdpbGwgc2hvdyBtZSB0aGUgYWN0dWFsIGNhbGwgc3RhY2sgYW5kIGFsbG93IG1lIHRvIG9ic2VydmUgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGxlYWRpbmcgdXAgdG8gdGhlIGZ1bmN0aW9uIGNhbGwuIEkgY2FuIGFsc28gbG9vayBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY29udHJvbHMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGV2ZXIgY2FsbGVkLCBvciBpcyBjYWxsZWQgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcy5cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBpcyBhIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIFRoaXMgbWlnaHQgaW52b2x2ZSBhIGNvbWJpbmF0aW9uIG9mIHN0YXRpYyBhbmFseXNpcywgZHluYW1pYyBkZWJ1Z2dpbmcsIGFuZCBldmVuIHNvbWUgY29kZSByZXZpZXcgaWYgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzY2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMjozNC44ODI2NTEwMThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyODMxNTY3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMTM3PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzE1Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzE1MzpzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jLTMxNTQtXFx0XFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjA0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjEwLVxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzIxMTpcXHRcXHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjEyLVxcdFxcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6MzcuNTEwOTcyODYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzY4MDQyOTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIExpbmVhZ2Ugb2YgYGRhbW9zX3F1b3RhX3Njb3JlYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBcIk9rYXksIGxldCdzIGh1bnQgZG93biB3aGVyZSBgZGFtb3NfcXVvdGFfc2NvcmVgIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IHNpZ25pZmljYW50IGludmVzdGlnYXRpb24sIHJpZ2h0PyBJIHdhbnQgdG8gc2VlIGFsbCB0aGUgY2FsbGVycywgYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIGlzIGFic29sdXRlbHkgY3J1Y2lhbDsgaXQgdGVsbHMgbWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGRhbW9zX3F1b3RhX3Njb3JlYCBvcGVyYXRlcyBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0cyBvdXRwdXQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyBpdHMgcm9sZSB3aXRoaW4gdGhlIHdpZGVyIGZyYW1ld29yaywgaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvciBldmVuIGFudGljaXBhdGUgdGhlIHJpcHBsZSBlZmZlY3RzIG9mIGFueSBjaGFuZ2VzIEkgbWlnaHQgbWFrZSB0byB0aGF0IGZ1bmN0aW9uLiBTbywgc2hvdyBtZSB0aGUgY2FsbGVycyEgTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDE1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NDEuMTkxNDA2MTk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjczNjI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfc2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMDMtLyogUmV0dXJuIHRoZSBoaWdoZXN0IHNjb3JlIHNpbmNlIGl0IG1ha2VzIHNjaGVtZXMgbGVhc3QgYWdncmVzc2l2ZSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjA0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMzIwNS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIyMD1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMjItXFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG5tbS9kYW1vbi9jb3JlLmM6MzIyMzpcXHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTMyMjQtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIyOT1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzIzMi1cXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbm1tL2RhbW9uL2NvcmUuYzozMjMzOlxcdHVuc2lnbmVkIGxvbmcgc2NvcmUgPSBkYW1vc19xdW90YV9zY29yZShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzIzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NDMuNzE4Nzc0NDA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Njk3NjYyMTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBDYWxsZXJzIHRvIERBTU9TIFR1bmluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZXNlIGBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsYCBhbmQgYGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdGAgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQga25vd2luZyB0aGVpciBiYXNpYyBkZWZpbml0aW9uIOKAkyBJJ20gbG9va2luZyBmb3IgdGhlICpjb250ZXh0KiBvZiB0aGVpciBjYWxscy4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBtb2R1bGVzLCBjbGFzc2VzLCBvciBmdW5jdGlvbnMgYXJlIHJlbHlpbmcgb24gdGhlbS4gQXJlIHRoZXkgYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gdG9wLWxldmVsIHNjcmlwdHMsIG9yIGFyZSB0aGV5IGJ1cmllZCBkZWVwIHdpdGhpbiBhIGNvbXBsZXggYXJjaGl0ZWN0dXJlPyBXaGF0IGRhdGEgYXJlIHRoZXkgcmVjZWl2aW5nIGFzIGlucHV0PyBXaGF0IGlzIHRoZWlyIGV4cGVjdGVkIG91dHB1dCwgYW5kIHdoZXJlIGRvZXMgdGhhdCBvdXRwdXQgZ28/IFRoaXMgaGVscHMgcGFpbnQgYSBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSB3aG9sZSBzeXN0ZW0uIFRoaXMgYW5hbHlzaXMgc2hvdWxkIGhlbHAgbWUsIGJhc2VkIG9uIHRoZSByZXN1bHRzLCB0byBmb3JtIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHR1bmluZyBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgdG8gc3VwcG9ydCB0aGUgb3ZlcmFsbCBnb2FsIG9mIHRoZSBzeXN0ZW0uIEkgd2lsbCBuZWVkIHRvIHVzZSBjYWxsIGdyYXBoIGFuYWx5c2lzLCBjcm9zcy1yZWZlcmVuY2luZywgb3IgcGVyaGFwcyBldmVuIGR5bmFtaWMgYW5hbHlzaXMgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjIzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NTAuNjk1NDAwMTg3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ5NjEyNjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjA0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjE5LVxcbm1tL2RhbW9uL2NvcmUuYzozMjIwOnN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMyMjEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMjgtXFxubW0vZGFtb24vY29yZS5jOjMyMjk6c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0zMjMwLVxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjQ2PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI1OS1cXHRcXHRpZiAocXVvdGEtXFx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUKVxcbm1tL2RhbW9uL2NvcmUuYzozMjYwOlxcdFxcdFxcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChjdHgsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjYxLVxcdFxcdGVsc2UgaWYgKHF1b3RhLVxcdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXFxubW0vZGFtb24vY29yZS5jOjMyNjI6XFx0XFx0XFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChjdHgsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjYzLVxcdFxcdGVzeiA9IHF1b3RhLVxcdTAwM2Vlc3pfYnAgLyAxMDAwMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NTIuOTQ1MDIxMjkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0MDA1NjYyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIHBhdHRlcm5zIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGNhbGxzIHRvIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUncyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/XCIgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJJ20gZ29pbmcgdG8gd2FudCB0byBrbm93IHRoZSBjb2RlYmFzZSBsb2NhdGlvbnMgYW5kIGNvbnRleHRzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgZWFjaCBjYWxsLiBBcmUgd2UgdGFsa2luZyBjb3JlIHF1b3RhIG1hbmFnZW1lbnQgbG9naWMsIGEgc3BlY2lmaWMgZmVhdHVyZSwgb3IgcG90ZW50aWFsbHksIGEgdGVzdCBoYXJuZXNzP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGFyZ3VtZW50cyBwYXNzZWQuICpXaGF0KiBpcyBiZWluZyBzZXQ/IFF1b3RhIHR5cGUsIHZhbHVlcywgb3RoZXIgcGFyYW1ldGVycz8gS25vd2luZyB0aGUgYXJndW1lbnRzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHkgYW5kIHRoZSBkYXRhIGl0IG9wZXJhdGVzIG9uLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBhcmd1bWVudHMgYXJlIGRlcml2ZWQuIEFyZSB0aGV5IGNvbWluZyBmcm9tIHVzZXIgaW5wdXQsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGNhbGN1bGF0ZWQgdmFsdWVzLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzb3VyY2UgaGVscHMgaWRlbnRpZnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBsb2dpY2FsIGZsYXdzLlxuXG5OZXh0LCBJIG5lZWQgdG8ga25vdyAqd2hlbiogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEFyZSB0aGVzZSBxdW90YSBhZGp1c3RtZW50cyB0cmlnZ2VyZWQgYnkgdXNlciBhY3Rpb25zLCBiYWNrZ3JvdW5kIHByb2Nlc3Nlcywgc3lzdGVtIGV2ZW50cywgb3Igc29tZXRoaW5nIGVsc2U/IFRoZSB0aW1pbmcgaGFzIGEgYmlnIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBxdW90YSBtYW5hZ2VtZW50IHN5c3RlbSdzIGJlaGF2aW9yLCBhbmQgaG93IHdlIGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXMgdGhlcmUgYW55IGxvY2tpbmcgaW52b2x2ZWQ/IEFueSBwb3RlbnRpYWwgZm9yIGNvbnRlbnRpb24/XG5cbkZpbmFsbHksIHdoYXQgYXJlIHRoZSAqY29uc2VxdWVuY2VzKiBvZiB0aGlzIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uPyBEb2VzIGl0IGRpcmVjdGx5IG1vZGlmeSBhIGRhdGFiYXNlLCB1cGRhdGUgY2FjaGVzLCB0cmlnZ2VyIG5vdGlmaWNhdGlvbnMsIG9yIHNvbWUgY29tYmluYXRpb24gb2YgdGhlc2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlIGVmZmVjdHMuIEFuZCBtb3N0IGltcG9ydGFudGx5LCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaGVyZT8gQ2FuIG1hbGljaW91cyBhY3RvcnMgZXhwbG9pdCB0aGVzZSBjYWxscyB0byBieXBhc3MgcXVvdGEgbGltaXRzLCBjYXVzZSBkZW5pYWwgb2Ygc2VydmljZSwgb3IgbWFuaXB1bGF0ZSBkYXRhPyBLbm93aW5nIHdoZXJlIHRoaXMgY2FsbCBsaXZlcyBpcyBrZXkuIElzIGl0IGluIGNvZGUgdGhhdCBsaXZlcyBvbiB0aGUgc2VydmVyLCBhIGNsaWVudCBvciBpbiBzb21lIG90aGVyIGNvbnRleHQ/IEkgd2FudCB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyBhbiBhdHRhY2sgc3VyZmFjZS4gRXNzZW50aWFsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZW50aXJlIGNhbGwgZ3JhcGgsIHRoZSBhcmd1bWVudHMsIHRoZSB0aW1pbmcsIGFuZCB0aGUgdWx0aW1hdGUgaW1wYWN0IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMjo1Ni4zNDU1OTA3OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTcwNzg0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzIyOT1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI0NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzI0NjpzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjQ3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjk2PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMwOS1cXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG5tbS9kYW1vbi9jb3JlLmM6MzMxMDpcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzExLVxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMjUtXFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxubW0vZGFtb24vY29yZS5jOjMzMjY6XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMyNy1cXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBxdW90YS1cXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODk2PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyOC1cXHQvKiBmcmVzaCBnb2FsLCBmaXJzdCB0dW5pbmcgcm91bmQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTI5OlxcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkzMC1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcy1cXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkzMi1cXHQvKiBzZWNvbmQgcm91bmQ6IGxhc3RfcHNpX3RvdGFsIGlzIGluaXRpYWxpc2VkIG5vdyAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MzM6XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTM0LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVxcdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTM3LVxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGdvYWwsIFxcdTAwMjZzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5Mzg6XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTM5LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVxcdTAwM2VxdW90YS5lc3osICh1bnNpZ25lZCBsb25nKVNaXzY0Syk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQ2LVxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsLS07XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk0NzpcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDgtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXFx1MDAzZXF1b3RhLmVzeiwgMHVsKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NTMtXFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZ29hbCwgXFx1MDAyNnNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk1NDpcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NTUtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXFx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfMzJLKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NTguNzAyNjc2ODYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MzY2Nzg0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKlRyYWNpbmcgRG93biBhIERBTU9OIFF1b3RhIElzc3VlKipcblxuT2theSwgc28gYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCBhbmQgaXQncyBuZXN0bGVkIGRlZXAgaW4gYG1tL2RhbW9uL2NvcmUuY2AuICBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLCBJIG5lZWQgdG8gc2VlIHdoYXQncyAqY2FsbGluZyogYGRhbW9zX2FkanVzdF9xdW90YWAuIEknbGwgd2FudCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbjsgdW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBnb2luZyB0byBpbGx1bWluYXRlIHRoZSBjaXJjdW1zdGFuY2VzIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uIGFuZCBnaXZlIG1lIHNvbWUgY29udGV4dC4gSXQncyB0aGUgZmlyc3Qgc3RlcCB0byBmaWd1cmluZyBvdXQgYW55IHF1b3RhLXJlbGF0ZWQgcHJvYmxlbXMgdGhhdCBtYXkgYmUgYXJpc2luZyB3aXRoaW4gREFNT04uIFRpbWUgdG8gZGlnIGluIGFuZCBjaGVjayB0aG9zZSBjYWxsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzQ1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MDIuMjM5MzU4Mzc4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk1NTM3OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FkanVzdF9xdW90YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzI4Mj1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyOTUtXFxubW0vZGFtb24vY29yZS5jOjMyOTY6c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMzI5Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzM3Nz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzkyLVxcbm1tL2RhbW9uL2NvcmUuYzozMzkzOlxcdFxcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzM5NC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjA0LjYzNDkwMzAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3NjU2MDE5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIERBTU9OIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBsaXZlcyB3aXRoaW4gdGhlIGBrZGFtb25kX2ZuYCB3b3JrZXIgdGhyZWFkLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBicm9hZGVyIGBrZGFtb25kYCBpbmZyYXN0cnVjdHVyZS4gVGhhdCdzIGdvb2QgdG8ga25vdywgY29udGV4dHVhbGl6ZXMgaXRzIHJvbGUuIFRoZW4gdGhlcmUncyB0aGlzIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluLy4uLmAsIHByb3ZpZGluZyB1c2Vyc3BhY2UgY29udHJvbCBvdmVyIERBTU9OIHF1b3RhcywgZ29hbHMsIGFuZCBzbyBvbi4gTXkgbmV4dCBzdGVwIGhlcmUgaXMgcHJldHR5IGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSByZXZpZXcgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBvcHRpb25zIHRvIGRldGVybWluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbmFibGVtZW50IGNyaXRlcmlhIGZvciBib3RoIERBTU9OIGluIGdlbmVyYWwsIGFuZCBzcGVjaWZpY2FsbHkgdGhpcyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgcmVxdWlyZWQgYXQgY29tcGlsZSB0aW1lIGZvciBhbGwgb2YgdGhpcyB0byBiZSBhdmFpbGFibGUsIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIG1pc3NpbmcuIFRoaXMgaXMgZnVuZGFtZW50YWw7IHVuZGVyc3RhbmRpbmcgdGhlIHByZXJlcXVpc2l0ZXMgdXBmcm9udCBzYXZlcyBhIGxvdCBvZiB3YXN0ZWQgZWZmb3J0IGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTc3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MTQuNDAwNTA3MjI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njg1NDMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzoxNC40NzczNzA2MDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDYzNTY4ODYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29yZSBCdWlsZCBhbmQgUFNJIFF1b3RhIEVuYWJsZW1lbnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIGBjb3JlLmNgIGJ1aWxkIGFuZCB0aG9zZSBQU0kgcXVvdGEgZ29hbHMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCB0aGF0J3Mgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBmb3IgYGNvcmUuY2AgYXJlIGRlZmluZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbnMgb3IgYnVpbGQgZmxhZ3MgcmVsYXRlZCB0byBQU0kgcXVvdGEgaW50ZWdyYXRpb24gd291bGQgYmUuIEkgbmVlZCB0byB0cmFjZSB0aGUgYnVpbGQgcHJvY2VzcyB0byBzZWUgaWYgYGNvcmUuY2AgaXMgYmVpbmcgY29tcGlsZWQgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucyBvciBpZiBpdCdzIGdlbmVyYWxseSBpbmNsdWRlZC4gRnVydGhlcm1vcmUsIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIHJlbGF0ZWQgdG8gUFNJIHF1b3RhIHN1cHBvcnQg4oCTIHBlcmhhcHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MsIG9iamVjdCBmaWxlIGluY2x1c2lvbiwgb3IgbGlua2VyIGRpcmVjdGl2ZXMgdGhhdCBhcmUgdHJpZ2dlcmVkIGJ5IGEgcGFydGljdWxhciBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcydsbCByZXF1aXJlIGEgYml0IG9mIGNyb3NzLXJlZmVyZW5jaW5nIGFuZCBwb3RlbnRpYWxseSBzb21lIGBncmVwYGluZyB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHN1YnRsZS4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgZm9yIGRpYWdub3NpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHVuZGVyc3RhbmRpbmcgaG93IFBTSSBxdW90YSBpbnRlcmFjdGlvbnMgYXJlIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjIxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MTkuMTEzMDYyMjA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjE5LjExMzE0NTgxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDMwNTM1OTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX0RBTU9OYC4gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQsIHNvIEknbGwgZ28gYWhlYWQgYW5kIGNoZWNrIG91dCBgbW0vZGFtb24vS2NvbmZpZ2AuIExldCdzIGdldCBhIGdvb2QgcGljdHVyZSBvZiB0aGUgc2l0dWF0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBmaXJzdCA0MCBsaW5lcyBvZiB0aGUgZmlsZSwganVzdCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQgYW5kIHVuZGVyc3RhbmQgdGhlIGJhc2ljIHN0cnVjdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zLiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgZW5vdWdoIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzozMy40MTg1MDc2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjMzLjQxODU3MTUyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzMzMjk4OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEQU1PTiBTeXNmcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBEQU1PTiDigJMgRHluYW1pYyBBY2Nlc3MgTW9uaXRvcmluZyDigJMgYWdhaW4uIFJpZ2h0LCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgYENPTkZJR19EQU1PTl9TWVNGU2AsIGFuZCB0aGUgcGxhY2UgdG8gbG9vayBmb3IgdGhhdCBpcyB0dWNrZWQgYXdheSBpbiBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG1haW4gZmVhdHVyZSBmbGFncyBmb3IgREFNT04gd2lsbCBiZSBzZXQgdXAuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHZhbHVlIGlzLCBhbmQgb2YgY291cnNlLCB3aGF0J3MgYmVlbiBzYWlkIGluIGNvbW1lbnRzIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBob29rcyBpbnRvIHN5c2ZzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MzUuNzUxODc0MDEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgNjQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgREFNT05fU1lTRlNcXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gIDcxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDcyOlxcdFxcdGhlbHBcXG4gIDczOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxuICA3NDpcXHRcXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDc5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA4MDpcXHRcXHRoZWxwXFxuICA4MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDg0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDg3OlxcdFxcbiAgODg6XFx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG4gIDg5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbiAgOTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG4gIDkzOlxcdFxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbiAgOTQ6XFx0XFx0ICB0aG9zZS5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxcbiAgOTc6XFx0XFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXFxuICA5ODpcXHRcXHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxcbiAgOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjM1Ljc1MTk2NTg0MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzE2NDc2NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFBTSSBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgYGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWxgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIGdyYWJiaW5nIHNvbWUga2luZCBvZiBQU0kgKFByZXNzdXJlIFN0YWxsIEluZm9ybWF0aW9uKSByZWxhdGVkIG1lbW9yeSBkYXRhLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIHRoaW5nIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBmdW5jdGlvbi4gSXMgaXQgaW4gdGhlIG1haW4gY29kZWJhc2UsIG9yIG1heWJlIGEgc2VwYXJhdGUgY29uZmlndXJhdGlvbiBmaWxlPyBJIGhhdmUgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZGVwZW5kZW5jeSBsaWVzIGFuZCBob3cgdGhpcyBQU0kgZGF0YSBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLCB0byBkZXRlcm1pbmUgaXRzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTk4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzozOC4wNjg0NDU0MzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzkwMzQ4MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9Mjg2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9mZWVkX2xvb3BfbmV4dF9pbnB1dCh1bnNpZ25lZCBsb25nIGxhc3RfaW5wdXQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjg5NC1cXG5tbS9kYW1vbi9jb3JlLmM6Mjg5NTpzdGF0aWMgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtMjg5Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjkwNC1cXG5tbS9kYW1vbi9jb3JlLmM6MjkwNTpzdGF0aWMgaW5saW5lIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTI5MDYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNjItXFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XFxubW0vZGFtb24vY29yZS5jOjMxNjM6XFx0XFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzE2NC1cXHRcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDItXFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gMTA7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk0MzpcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKSAtIDEwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NDQtXFx0LyogVTY0X01BWCBtYXJrcyBhbiB1bm1lYXN1cmVkIGdvYWwsIGtlZXAgdGhlIHNhbXBsZSBhd2F5IGZyb20gaXQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6NDAuMzQ3NDg3NDM4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2ODAwNTQ5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gREFNT04gQ29yZSdzIEhlYXJ0KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHplcm8gaW4gb24gYSBzcGVjaWZpYyBjaHVuayBvZiBjb2RlIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtOiBsaW5lcyAyODkwIHRvIDI5MTUgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIGludGVyZXN0aW5nIG1pZ2h0IGJlIGhhcHBlbmluZyBpbiB0aGF0IHJlZ2lvbjsgcGVyaGFwcyBpdCdzIHJlbGF0ZWQgdG8gYSByZWNlbnQgb2JzZXJ2YXRpb24gb3IgYSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gZGlhZ25vc2UuIEknbSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBzb21ldGhpbmcgc3BlY2lmaWMgaGVyZTogcGVyaGFwcyBEQU1PTidzIGhhbmRsaW5nIG9mIHNwZWNpZmljIGV2ZW50cywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCBvciBtYXliZSB0aGUgbG9naWMgc3Vycm91bmRpbmcgcmVnaW9uIG1hbmFnZW1lbnQgb3IgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhvc2UgbGluZXMsIGFuZCBteSBleHBlcmllbmNlIHRlbGxzIG1lIEknbGwgbGlrZWx5IGJlIGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIHZhcmlhYmxlIGFzc2lnbm1lbnRzIHRoYXQgbWlnaHQgcmV2ZWFsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoYXQgY29kZSBibG9jay4gRnJvbSBwYXN0IGV4cGVyaWVuY2UsIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyBEQU1PTiBpcyBrZWVwaW5nIHRyYWNrIG9mIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgaW4gdGhhdCByYW5nZSwgYW5kIGhvdyBpdCBpcyBtYWtpbmcgZGVjaXNpb25zIGFib3V0IG1lbW9yeSBhY2Nlc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzo0My4wMjc1NDUxNTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODkwOlxcdFxcdHJldHVybiBVTE9OR19NQVg7XFxuMjg5MTpcXHR9XFxuMjg5MjpcXHRcXG4yODkzOlxcdCNpZmRlZiBDT05GSUdfUFNJXFxuMjg5NDpcXHRcXG4yODk1OlxcdHN0YXRpYyB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxcbjI4OTY6XFx0e1xcbjI4OTc6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZwc2lfZGlzYWJsZWQpKVxcbjI4OTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjg5OTpcXHRcXHRyZXR1cm4gZGl2X3U2NChwc2lfc3lzdGVtLnRvdGFsW1BTSV9BVkdTXVtQU0lfTUVNICogMl0sXFxuMjkwMDpcXHRcXHRcXHRcXHROU0VDX1BFUl9VU0VDKTtcXG4yOTAxOlxcdH1cXG4yOTAyOlxcdFxcbjI5MDM6XFx0I2Vsc2VcXHQvKiBDT05GSUdfUFNJICovXFxuMjkwNDpcXHRcXG4yOTA1OlxcdHN0YXRpYyBpbmxpbmUgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcXG4yOTA2OlxcdHtcXG4yOTA3OlxcdFxcdHJldHVybiAwO1xcbjI5MDg6XFx0fVxcbjI5MDk6XFx0XFxuMjkxMDpcXHQjZW5kaWZcXHQvKiBDT05GSUdfUFNJICovXFxuMjkxMTpcXHRcXG4yOTEyOlxcdCNpZmRlZiBDT05GSUdfTlVNQVxcbjI5MTM6XFx0c3RhdGljIGJvb2wgaW52YWxpZF9tZW1fbm9kZShpbnQgbmlkKVxcbjI5MTQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzo0My4wMjc3NzkwMDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAxMDE2NjMzMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRdW90YSBHb2FsIE1ldHJpYyoqXG5cbk9rYXksIHNvIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBraWNrcyBpbiB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBhcyB0aGUgcXVvdGEgZ29hbCBtZXRyaWMuIFJpZ2h0LiBOb3csIHdoZXJlIGlzICp0aGF0KiBtZXRyaWMgYWN0dWFsbHkgYmVpbmcgc2V0PyBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIHN5c2ZzIGFuZCB0cmFjayBkb3duIHRoZSBzb3VyY2Ugb2YgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AuIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGlzIGludGVyYWN0aW9uLiBMZXQncyBzZWUgd2hhdCBzeXNmcyBmaWxlcyBhcmUgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDg3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzo1My4xMjk0NDQ5MDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjE4MzQwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMjg9ZW51bSBkYW1vc19hY3Rpb24ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE0Ni0gKiBAREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcXHRVc2VyLWlucHV0IHZhbHVlLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxNDc6ICogQERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcXHRTeXN0ZW0gbGV2ZWwgc29tZSBtZW1vcnkgUFNJIGluIHVzLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNDgtICogQERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XFx0TWVtVXNlZCByYXRpbyBvZiBhIG5vZGUuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTYxPWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNjItXFx0REFNT1NfUVVPVEFfVVNFUl9JTlBVVCxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTYzOlxcdERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTY0LVxcdERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlAsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Njg4PXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02OTgtXFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlO1xcbm1tL2RhbW9uL2NvcmUuYzo2OTk6XFx0aWYgKG1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXFxubW0vZGFtb24vY29yZS5jLTcwMC1cXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTE5MT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTk0LVxcdHN3aXRjaCAoZHN0LVxcdTAwM2VtZXRyaWMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTE5NTpcXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcXG5tbS9kYW1vbi9jb3JlLmMtMTE5Ni1cXHRcXHRkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMTUzPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTYxLVxcdFxcdGJyZWFrO1xcbm1tL2RhbW9uL2NvcmUuYzozMTYyOlxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbm1tL2RhbW9uL2NvcmUuYy0zMTYzLVxcdFxcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM1LVxcdGlmIChxdW90YV9tZW1fcHJlc3N1cmVfdXMpIHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjM2OlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNy1cXHRcXHRcXHRcXHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMzU9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNDAtXFx0e1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjQxOlxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNDItXFx0XFx0Lm5hbWUgPSBcXFwic29tZV9tZW1fcHNpX3VzXFxcIixcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxNC1cXHRzd2l0Y2ggKGRzdC1cXHUwMDNlbWV0cmljKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxNTpcXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODE2LVxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MzI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM0LVxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIGRzdCA9IHtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODM1OlxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgzNi1cXHRcXHQudGFyZ2V0X3ZhbHVlID0gMTAwMCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDItXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NDM6XFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODQ0LVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSAyMzQsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODg0LVxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpIHtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODg1OlxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4Ni1cXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Nj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDUtXFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgc3JjID0ge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MDY6XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA3LVxcdFxcdC50YXJnZXRfdmFsdWUgPSBVTE9OR19NQVgsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIwLVxcdGRhbW9uX2FkZF9zY2hlbWUoYywgcyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkyMTpcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLCBVTE9OR19NQVgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjItXFx0aWYgKCFnb2FsKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjU1LjM5MTI5OTg2MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDExNTM3NjQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUZW1wb3JhbCBHb2FsIFR1bmluZyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTGAsIHNwZWNpZmljYWxseSwgaG93IHRoZSBgZ29hbF90dW5lcmAgY29tcG9uZW50IGludGVyYWN0cyB3aXRoaW4gdGhhdCBmcmFtZXdvcmsuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBgREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTGAuIEkgbmVlZCB0byBzb2xpZGlmeSB0aGUgZGV0YWlscyBvZiB0aGUgb3ZlcmFyY2hpbmcgc3RydWN0dXJlIGJlZm9yZSBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgYmVoYXZpb3Igb2YgdGhlIGBnb2FsX3R1bmVyYC4gTGV0IG1lIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHdob2xlIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMzMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjA5LjUwNjY3OTIzNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMTc5OTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xOTg9c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyMC0gKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOlxcdEFpbSBsb25nIHRlcm0gY29uc2lzdGVudCBxdW90YS5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MjIxOiAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMOlxcdEFpbSB6ZXJvIHF1b3RhIGFzYXAuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyMi0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MjIzPWVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyNC1cXHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjIyNTpcXHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMjYtfTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMTUzPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTY2LVxcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5nb2FsX3R1bmVyID09XFxubW0vZGFtb24vY29yZS5jOjMxNjc6XFx0XFx0XFx0XFx0XFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcXG5tbS9kYW1vbi9jb3JlLmMtMzE2OC1cXHRcXHRcXHRcXHQvKiBhbiBhY2hpZXZlZCBzY29yZSB3b3VsZCB6ZXJvIHRoZSB0ZW1wb3JhbCBxdW90YSAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyNDY9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjYwLVxcdFxcdFxcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChjdHgsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYzozMjYxOlxcdFxcdGVsc2UgaWYgKHF1b3RhLVxcdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXFxubW0vZGFtb24vY29yZS5jLTMyNjItXFx0XFx0XFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChjdHgsIHMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4MjI9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF90dW5lcl9uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWVzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgyNy1cXHR7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4Mjg6XFx0XFx0LnR1bmVyID0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgyOS1cXHRcXHQubmFtZSA9IFxcXCJ0ZW1wb3JhbFxcXCIsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODk2PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2koc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkwMS1cXHRcXHQuc3ogPSBTWl82NEssXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkwMjpcXHRcXHQuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkwMy1cXHR9O1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTEwNDk9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGEoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNjUtXFx0XFx0LnN6ID0gOSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTA2NjpcXHRcXHQuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNjctXFx0XFx0LmZhaWxfY2hhcmdlX251bSA9IDEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjEyLjIyODQ4MzYxNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1Njk0OTgzODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyB0dW5pbmcgcHJvY2Vzcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBhbGwgdW5mb2xkcy5cblxuKipEaWdnaW5nIGludG8gdGhlIERBTU9OIFR1bmluZyBQcm9jZXNzKipcblxuUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIHR1bmluZyBvZiB0aGlzIERBTU9OIHN5c3RlbSwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGZvdXIga2V5IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYDogYGRhbW9zX3F1b3RhX3Njb3JlYCwgYGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWxgLCBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0YCwgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYC4gVGhlc2Ugc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgaW5zaWdodHMgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHF1b3RhcyBhbmQgZ29hbCBhZGp1c3RtZW50cyBhcmUgd29ya2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyYWN0IHRvIHJlZmluZSB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgZGVjaXNpb25zLiBLbm93aW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ1NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjE3LjkyMzQ3MDM0M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyMDA6XFx0XFx0fVxcbjMyMDE6XFx0fVxcbjMyMDI6XFx0XFxuMzIwMzpcXHQvKiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmUgc2luY2UgaXQgbWFrZXMgc2NoZW1lcyBsZWFzdCBhZ2dyZXNzaXZlICovXFxuMzIwNDpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuMzIwNTpcXHR7XFxuMzIwNjpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4zMjA3OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMzIwODpcXHRcXHR1bnNpZ25lZCBsb25nIGhpZ2hlc3Rfc2NvcmUgPSAwO1xcbjMyMDk6XFx0XFxuMzIxMDpcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XFxuMzIxMTpcXHRcXHRcXHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xcbjMyMTI6XFx0XFx0XFx0aGlnaGVzdF9zY29yZSA9IG1heChoaWdoZXN0X3Njb3JlLFxcbjMyMTM6XFx0XFx0XFx0XFx0XFx0bXVsdF9mcmFjKGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUsIDEwMDAwLFxcbjMyMTQ6XFx0XFx0XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKSk7XFxuMzIxNTpcXHRcXHR9XFxuMzIxNjpcXHRcXG4zMjE3OlxcdFxcdHJldHVybiBoaWdoZXN0X3Njb3JlO1xcbjMyMTg6XFx0fVxcbjMyMTk6XFx0XFxuMzIyMDpcXHRzdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3Qoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMyMjE6XFx0e1xcbjMyMjI6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4zMjIzOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2NvcmUgPSBkYW1vc19xdW90YV9zY29yZShjLCBzKTtcXG4zMjI0OlxcdFxcbjMyMjU6XFx0XFx0cXVvdGEtXFx1MDAzZWVzel9icCA9IGRhbW9uX2ZlZWRfbG9vcF9uZXh0X2lucHV0KFxcbjMyMjY6XFx0XFx0XFx0XFx0bWF4KHF1b3RhLVxcdTAwM2Vlc3pfYnAsIDEwMDAwVUwpLCBzY29yZSk7XFxuMzIyNzpcXHR9XFxuMzIyODpcXHRcXG4zMjI5OlxcdHN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4zMjMwOlxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG4zMjMxOlxcdHtcXG4zMjMyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMzIzMzpcXHRcXHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XFxuMzIzNDpcXHRcXG4zMjM1OlxcdFxcdGlmIChzY29yZSBcXHUwMDNlPSAxMDAwMClcXG4zMjM2OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2Vlc3pfYnAgPSAwO1xcbjMyMzc6XFx0XFx0ZWxzZSBpZiAocXVvdGEtXFx1MDAzZXN6KVxcbjMyMzg6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWVzel9icCA9IHF1b3RhLVxcdTAwM2VzeiAqIDEwMDAwO1xcbjMyMzk6XFx0XFx0ZWxzZVxcbjMyNDA6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWVzel9icCA9IFVMT05HX01BWDtcXG4zMjQxOlxcdH1cXG4zMjQyOlxcdFxcbjMyNDM6XFx0LypcXG4zMjQ0OlxcdCAqIENhbGxlZCBvbmx5IGlmIHF1b3RhLVxcdTAwM2Vtcywgb3IgcXVvdGEtXFx1MDAzZXN6IGFyZSBzZXQsIG9yIHF1b3RhLVxcdTAwM2Vnb2FscyBpcyBub3QgZW1wdHlcXG4zMjQ1OlxcdCAqL1xcbjMyNDY6XFx0c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG4zMjQ3OlxcdHtcXG4zMjQ4OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMzI0OTpcXHRcXHR1bnNpZ25lZCBsb25nIHRocm91Z2hwdXQ7XFxuMzI1MDpcXHRcXHR1bnNpZ25lZCBsb25nIGVzeiA9IFVMT05HX01BWDtcXG4zMjUxOlxcdFxcdHVuc2lnbmVkIGxvbmcgZXN6X3RpbWU7XFxuMzI1MjpcXHRcXG4zMjUzOlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZW1zIFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnF1b3RhLVxcdTAwM2Vnb2FscykpIHtcXG4zMjU0OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2Vlc3ogPSBxdW90YS1cXHUwMDNlc3o7XFxuMzI1NTpcXHRcXHRcXHRyZXR1cm47XFxuMzI1NjpcXHRcXHR9XFxuMzI1NzpcXHRcXG4zMjU4OlxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSkge1xcbjMyNTk6XFx0XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVClcXG4zMjYwOlxcdFxcdFxcdFxcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChjdHgsIHMpO1xcbjMyNjE6XFx0XFx0XFx0ZWxzZSBpZiAocXVvdGEtXFx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcXG4zMjYyOlxcdFxcdFxcdFxcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoY3R4LCBzKTtcXG4zMjYzOlxcdFxcdFxcdGVzeiA9IHF1b3RhLVxcdTAwM2Vlc3pfYnAgLyAxMDAwMDtcXG4zMjY0OlxcdFxcdH1cXG4zMjY1OlxcdFxcbjMyNjY6XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2Vtcykge1xcbjMyNjc6XFx0XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX25zKVxcbjMyNjg6XFx0XFx0XFx0XFx0dGhyb3VnaHB1dCA9IG11bHRfZnJhYyhxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeixcXG4zMjY5OlxcdFxcdFxcdFxcdFxcdFxcdDEwMDAwMDAsIHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX25zKTtcXG4zMjcwOlxcdFxcdFxcdGVsc2VcXG4zMjcxOlxcdFxcdFxcdFxcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xcbjMyNzI6XFx0XFx0XFx0ZXN6X3RpbWUgPSBtYXgodGhyb3VnaHB1dCAqIHF1b3RhLVxcdTAwM2VtcywgY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4zMjczOlxcdFxcdFxcdGVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTtcXG4zMjc0OlxcdFxcdH1cXG4zMjc1OlxcdFxcbjMyNzY6XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2VzeiBcXHUwMDI2XFx1MDAyNiBxdW90YS1cXHUwMDNlc3ogXFx1MDAzYyBlc3opXFxuMzI3NzpcXHRcXHRcXHRlc3ogPSBxdW90YS1cXHUwMDNlc3o7XFxuMzI3ODpcXHRcXG4zMjc5OlxcdFxcdHF1b3RhLVxcdTAwM2Vlc3ogPSBlc3o7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjE3LjkyMzY1MzAzM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTM2NjAxODgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIERBTU9OIFF1b3RhIElzc3VlIGFuZCBXb3J0aEZ1enppbmcgRGV0ZXJtaW5hdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkndmUgaWRlbnRpZmllZCBhIGJ1ZyBpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHF1b3RhIGltcGxlbWVudGF0aW9uIHJlbGF0ZWQgdG8gaG93IFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pIGlzIGhhbmRsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIHdoZW4gYSBQU0ktYmFzZWQgcXVvdGEgZ29hbCBpcyB1bmluaXRpYWxpemVkIChpLmUuLCBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgaXMgc2V0IHRvIGBVNjRfTUFYYCksIHRoZSBleGlzdGluZyBjb2RlIHdhcyBsZWFkaW5nIHRvIGFuIGltbWVkaWF0ZSBkaXNhYmxpbmcgb2YgdGhlIHF1b3RhLiBUaGUgaW5pdGlhbCBsb2dpYyB3YXMgc2V0dGluZyB0aGUgY3VycmVudCB2YWx1ZSBlcXVhbCB0byB0aGUgdGFyZ2V0IHZhbHVlIGlmIGxhc3RfcHNpX3RvdGFsIHdhcyBlcXVhbCB0byBVNjRfTUFYLiBBbmQgc2luY2UgdGhlIGNvZGUgd2FzIGludGVuZGVkIGZvciBQU0kgdHJhY2tpbmcsIHRoZSBsb2dpYyB3b3VsZCBjYXVzZSBhbiBpc3N1ZSBpbiB3aGljaCB0aGUgZXN6X2JwIHZhbHVlIHdpbGwgYmUgc2V0IHRvIDAuXG5cblRoZSBmaXggYWRkcmVzc2VzIHRoaXMgYnkgc2V0dGluZyB0aGUgYGN1cnJlbnRfdmFsdWVgIHRvIGAwYCBpZiB0aGUgZ29hbCB0dW5lciBpcyBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLiBUaGlzIHByZXZlbnRzIHRoZSBzY29yZSBjYWxjdWxhdGlvbiBmcm9tIHRyaWdnZXJpbmcgdGhlIHF1b3RhIGRpc2FibGUgb24gdGhlIGZpcnN0IHJvdW5kLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBmaXggd29ydGggZnV6emluZz9cblxuTGV0J3MgYXBwbHkgdGhlIHRyaWFnZSBjcml0ZXJpYSBJIGhhdmUgaW4gbWluZC4gVGhlIGNyaXRlcmlhIHN0YXRlcyB0aGF0IHJlYWNoYWJpbGl0eSBpcyBrZXkgYW5kIHRoYXQgbW9kaWZpY2F0aW9ucyBpbiBgbW0vYCBzdWJzeXN0ZW1zIGFyZSBoaWdobHkgcmVsZXZhbnQuIFRoZSBmaXggZGlyZWN0bHkgdG91Y2hlcyBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggZmFsbHMgc3F1YXJlbHkgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL2ApIHN1YnN5c3RlbS4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhICpwb3RlbnRpYWxseSogaGlnaC1wcmlvcml0eSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgbGluZSBvZiByZWFzb25pbmcgaXMgdG8gZGV0ZXJtaW5lIGlmIERBTU9OIGl0c2VsZiBpcyByZWFjaGFibGUuIFRoZSBjcml0ZXJpYSBzYXkgZnV6emluZyBpcyB1c2VmdWwgaWYgY29kZSBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEknbSBhd2FyZSB0aGF0IERBTU9OIGlzIGRlc2lnbmVkIHRvIGJlIGFjY2Vzc2libGUgdmlhIHN5c2ZzIGludGVyZmFjZXMgKHNwZWNpZmljYWxseSwgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2ApIGFuZCBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHN5c2ZzLiBUaGlzIGlzIHZlcnkgcmVsZXZhbnQgYmVjYXVzZSB0aGUgY3JpdGVyaWEgYWxzbyBzdGF0ZSB0aGF0IEkgbmVlZCB0byBjaGVjayBpZiB0aGUgY29kZSBpbiBxdWVzdGlvbiBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIEFuZCBEQU1PTiB1c2VzIFFFTVUgb24gYW1kNjQgd2l0aG91dCBzcGVjaWFsaXplZCBoYXJkd2FyZS5cblxuU3l6a2FsbGVyIHByb3ZpZGVzIGdlbmVyaWMgZmlsZSBvcGVyYXRpb25zIC8gc3lzZnMgd3JpdGVzLiBTbywgdGhlIHBhdGNoIHNlZW1zIHJlYWNoYWJsZSBmcm9tIHN5emthbGxlci5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEV4YW1pbmluZyB0aGUgS2NvbmZpZyBmaWxlcywgSSBzZWU6XG5cbjEuICBgREFNT05gIG5lZWRzIHRvIGJlIGVuYWJsZWQuXG4yLiAgYERBTU9OX1NZU0ZTYCBpcyBhbHNvIHJlcXVpcmVkIGZvciBzeXNmcyBpbnRlcmFjdGlvbi5cbjMuICBgUFNJYCBpcyB1c2VkIGJ5IHRoZSBEQU1PUyBxdW90YSBpbXBsZW1lbnRhdGlvbiwgYnV0IHRoZSBjb2RlIHN0aWxsIGNvbXBpbGVzIHdpdGhvdXQgUFNJIGFuZCByZXR1cm5zIDAuXG5cblNvLCBJIHdpbGwgY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIGlzIHdvcnRod2hpbGUgdG8gZnV6ei5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwMDAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6MzMuMjg5Njc1Mzk1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI3MjAzMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQU0lcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9NzE1PWNvbmZpZyBUQVNLX0lPX0FDQ09VTlRJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy03MjMtXFxuaW5pdC9LY29uZmlnOjcyNDpjb25maWcgUFNJXFxuaW5pdC9LY29uZmlnLTcyNS1cXHRib29sIFxcXCJQcmVzc3VyZSBzdGFsbCBpbmZvcm1hdGlvbiB0cmFja2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6MzUuNzE2ODg1MzQyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5MTM1ODM4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiB3aGF0IEknbSBsb29raW5nIGF0LCBteSBndXQgZmVlbGluZyB0ZWxscyBtZSB0byBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSSdtIHRoaW5raW5nIHRoYXQgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDcyNCBtaWdodCBob2xkIHNvbWUgY2x1ZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHdoYXQgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdCdzIGEgYnJvYWQgc3RhcnRpbmcgcG9pbnQsIGJ1dCBgaW5pdC9LY29uZmlnYCBpcyBvZnRlbiB0aGUgcGxhY2UgdG8gZ28gd2hlbiBkZWFsaW5nIHdpdGggY29yZSBrZXJuZWwgaW5pdGlhbGl6YXRpb24gb3IgZ2VuZXJhbCBidWlsZCBvcHRpb25zLCBhbmQgbGluZSA3MjQgZmVlbHMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gYmVnaW4gdGhlIGludmVzdGlnYXRpb24uIEknbGwgbmVlZCB0byB1c2UgbXkgZWRpdG9yIGFuZCBkbyBzb21lIGNvbnRleHQtYXdhcmUgc2VhcmNoaW5nIHdpdGhpbiB0aGF0IGxpbmUgYW5kIGl0cyBzdXJyb3VuZGluZyBsaW5lcyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IEkgYW0gbG9va2luZyBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNDozOC42MzA0NzkzOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTczODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyMDpcXHRcXHQgIHRhc2sgaGFzIGNhdXNlZC5cXG4gNzIxOlxcdFxcbiA3MjI6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuIDcyMzpcXHRcXG4gNzI0OlxcdGNvbmZpZyBQU0lcXG4gNzI1OlxcdFxcdGJvb2wgXFxcIlByZXNzdXJlIHN0YWxsIGluZm9ybWF0aW9uIHRyYWNraW5nXFxcIlxcbiA3MjY6XFx0XFx0c2VsZWN0IEtFUk5GU1xcbiA3Mjc6XFx0XFx0aGVscFxcbiA3Mjg6XFx0XFx0ICBDb2xsZWN0IG1ldHJpY3MgdGhhdCBpbmRpY2F0ZSBob3cgb3ZlcmNvbW1pdHRlZCB0aGUgQ1BVLCBtZW1vcnksXFxuIDcyOTpcXHRcXHQgIGFuZCBJTyBjYXBhY2l0eSBhcmUgaW4gdGhlIHN5c3RlbS5cXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGtlcm5lbCB3aWxsIGNyZWF0ZSAvcHJvYy9wcmVzc3VyZS8gd2l0aCB0aGVcXG4gNzMyOlxcdFxcdCAgcHJlc3N1cmUgc3RhdGlzdGljcyBmaWxlcyBjcHUsIG1lbW9yeSwgYW5kIGlvLiBUaGVzZSB3aWxsIGluZGljYXRlXFxuIDczMzpcXHRcXHQgIHRoZSBzaGFyZSBvZiB3YWxsdGltZSBpbiB3aGljaCBzb21lIG9yIGFsbCB0YXNrcyBpbiB0aGUgc3lzdGVtIGFyZVxcbiA3MzQ6XFx0XFx0ICBkZWxheWVkIGR1ZSB0byBjb250ZW50aW9uIG9mIHRoZSByZXNwZWN0aXZlIHJlc291cmNlLlxcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHQgIEluIGtlcm5lbHMgd2l0aCBjZ3JvdXAgc3VwcG9ydCwgY2dyb3VwcyAoY2dyb3VwMiBvbmx5KSB3aWxsXFxuIDczNzpcXHRcXHQgIGhhdmUgY3B1LnByZXNzdXJlLCBtZW1vcnkucHJlc3N1cmUsIGFuZCBpby5wcmVzc3VyZSBmaWxlcyxcXG4gNzM4OlxcdFxcdCAgd2hpY2ggYWdncmVnYXRlIHByZXNzdXJlIHN0YWxscyBmb3IgdGhlIGdyb3VwZWQgdGFza3Mgb25seS5cXG4gNzM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNDozOC42MzA2Mzk0MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NDg0MTY5MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBiZWZvcmUgd2UgZ28gYW55IGZ1cnRoZXIsIGxldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgREFNT04gbWlnaHQgbmVjZXNzaXRhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGJleW9uZCB3aGF0IHdlJ3ZlIGFscmVhZHkgY29uc2lkZXJlZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFzc29jaWF0ZWQgYWRkcmVzcy1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIOKAkyBzb21ldGhpbmcgbGlrZSBgREFNT05fUEFERFJgIG9yIGBEQU1PTl9WQUREUmAgbWlnaHQgYmUgcmVsZXZhbnQuIFRvIGNsYXJpZnkgdGhpcywgSSdsbCBkaXZlIGludG8gYG1tL2RhbW9uL0tjb25maWdgIHRvIGdldCBhIGRlZmluaXRpdmUgb3ZlcnZpZXcgb2YgdGhlIGF2YWlsYWJsZSBzZXR0aW5ncyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgbW9zdCBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQncyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1NzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjQ2LjExNDgxMDc2OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNDo0Ni4xMTQ4OTAxNzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDc4Njk3MzgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04ncyBGb2N1cyBTeW1ib2wgU2VsZWN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgRm9jdXNTeW1ib2wgc2VsZWN0aW9uIHByb2Nlc3MuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgZnVuY3Rpb24gd2UncmUgaW50ZXJlc3RlZCBpbiwgdGhlIG9uZSBtb2RpZmllZCwgaXMgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSG1tLCBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCdzIHN0YXRpYy4gWWVzLCBpdCBpczogYHN0YXRpYyB2b2lkYC4gVGhhdCByYWlzZXMgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSBpdC4gV29ydGggaW52ZXN0aWdhdGluZy5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQncyBjYWxsZWQgd2l0aGluIGBkYW1vc19xdW90YV9zY29yZWAuIEkgc2VlIHRoYXQgYGRhbW9zX3F1b3RhX3Njb3JlYCB0aGVuIGZlZWRzIGludG8gYGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdGAgYW5kIGBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsYC4gVGhlc2UsIGluIHR1cm4sIGFyZSBjYWxsZWQgYnkgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGRhbW9zX2FkanVzdF9xdW90YWAsIGFuZCBmaW5hbGx5IGJ5IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBUaGF0IGdpdmVzIGEgbmljZSBjYWxsIHN0YWNrLlxuXG5Ob3csIHdoZXJlIGFyZSB0aGUgZ29hbHMgY29uZmlndXJlZCBmcm9tIHN5c2ZzPyBJIG5lZWQgdG8gY2hlY2sgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODE4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6NTAuOTAxODY3MjMzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY0ODA1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfZ29hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NjgyPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02ODctXFxubW0vZGFtb24vY29yZS5jOjY4ODpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jOjY4OTpcXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG5tbS9kYW1vbi9jb3JlLmMtNjkwLVxcdFxcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKVxcbm1tL2RhbW9uL2NvcmUuYy02OTEte1xcbm1tL2RhbW9uL2NvcmUuYzo2OTI6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vY29yZS5jLTY5My1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MDQtXFxubW0vZGFtb24vY29yZS5jOjcwNTp2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxubW0vZGFtb24vY29yZS5jLTcwNi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzA5LVxcbm1tL2RhbW9uL2NvcmUuYzo3MTA6c3RhdGljIHZvaWQgZGFtb3NfZGVsX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxubW0vZGFtb24vY29yZS5jLTcxMS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzE0LVxcbm1tL2RhbW9uL2NvcmUuYzo3MTU6c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy03MTYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTcxOS1cXG5tbS9kYW1vbi9jb3JlLmM6NzIwOnZvaWQgZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbm1tL2RhbW9uL2NvcmUuYy03MjEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTcyNS1cXG5tbS9kYW1vbi9jb3JlLmM6NzI2OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHN0cnVjdCBkYW1vc19xdW90YSAqcSlcXG5tbS9kYW1vbi9jb3JlLmMtNzI3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04MTQ9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTgxNS17XFxubW0vZGFtb24vY29yZS5jOjgxNjpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZywgKmdfbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmMtODE3LVxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmYsICpuZXh0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExNjY9dm9pZCBkYW1vbl9zZXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqKnNjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ny1cXG5tbS9kYW1vbi9jb3JlLmM6MTE3ODpzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX250aF9xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTc5LVxcdFxcdGludCBuLCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEpXFxubW0vZGFtb24vY29yZS5jLTExODAte1xcbm1tL2RhbW9uL2NvcmUuYzoxMTgxOlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTgyLVxcdGludCBpID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTkxPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbm1tL2RhbW9uL2NvcmUuYzoxMTkyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExOTMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyMTU9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmM6MTIxNjpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjE3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMjQwPWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjQxLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTI0MjpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDtcXG5tbS9kYW1vbi9jb3JlLmMtMTI0My1cXHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTg3OT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODgyLVxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbm1tL2RhbW9uL2NvcmUuYzoxODgzOlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy0xODg0LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI0MDc9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQwOS1cXHRyZXR1cm4gcXVvdGEtXFx1MDAzZWVzeiB8fCBxdW90YS1cXHUwMDNlc3ogfHwgcXVvdGEtXFx1MDAzZW1zIHx8XFxubW0vZGFtb24vY29yZS5jOjI0MTA6XFx0XFx0IWRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQxMS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjkxOD1zdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxubW0vZGFtb24vY29yZS5jOjI5MTk6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxubW0vZGFtb24vY29yZS5jLTI5MjAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5NDY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG5tbS9kYW1vbi9jb3JlLmM6Mjk0NzpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG5tbS9kYW1vbi9jb3JlLmMtMjk0OC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzEwMD1zdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxubW0vZGFtb24vY29yZS5jOjMxMDE6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxubW0vZGFtb24vY29yZS5jLTMxMDIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxMDY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG5tbS9kYW1vbi9jb3JlLmM6MzEwNzpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG5tbS9kYW1vbi9jb3JlLmMtMzEwOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzE1Mz1zdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jOjMxNTQ6XFx0XFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG5tbS9kYW1vbi9jb3JlLmMtMzE1NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIwND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMyMDUte1xcbm1tL2RhbW9uL2NvcmUuYzozMjA2OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjA3LVxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTIyOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzMS17XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzI6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzMtXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk5LVxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMDA6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vcmVjbGFpbS5jLTIwMS1cXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIxNT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTYtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxNzpcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxOC1cXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjI5PXN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMzA6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzEtXFx0Y2hhciAqbmFtZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNjg0PXN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTEtXFx0dW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfc3o7XFx0LyogRWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMgKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY5MjpcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgZ29hbF90dW5lcjtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5My1cXHR1bnNpZ25lZCBpbnQgZmFpbF9jaGFyZ2VfbnVtO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE4MTc9c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODE4OlxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB0dW5lcjtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxOS1cXHRjaGFyICpuYW1lO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg1NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NTU6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NTYtXFx0aW50IGksIGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk4PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MDctXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTA4OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTA5LVxcdFxcdGludCBlcnI7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODA0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODA1OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgwNjpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDcte1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzMj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODMzLXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODM0OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIGRzdCA9IHtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM1LVxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODQxLVxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg0MjpcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKSB7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0My1cXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0OC1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NDk6XFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1MC1cXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTMtXFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODU0OlxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTUtXFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODYwLVxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg2MTpcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODYyLVxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQLFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2Ny1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Njg6XFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2OS1cXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQLFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3NS1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NzY6XFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3Ny1cXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQLFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4My1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4ODQ6XFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04ODUtXFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA0LVxcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcyA9IHt9O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MDU6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgc3JjID0ge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDYtXFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDgtXFx0fTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTA5OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MTAtXFx0c3RydWN0IGRhbW9zICpzO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTk2MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NjE6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FscywgaW50IG5yX2RzdF9nb2FscyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTYyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmNfZ29hbHMsIGludCBucl9zcmNfZ29hbHMpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk2My17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk2NC1cXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgZHN0LCBzcmM7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk2NTpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCwgKm5leHQ7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk2Ni1cXHRib29sIHNraXAgPSB0cnVlO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTEwMTQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMTYtXFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHRlc3QsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwMTc6XFx0XFx0XFx0KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsW10pe30sIDAsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwMTg6XFx0XFx0XFx0KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsW10pe1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDE5LVxcdFxcdFxcdFxcdHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDI0LVxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2Zvcih0ZXN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDI1OlxcdFxcdFxcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAyNi1cXHRcXHRcXHRcXHR7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAzMS1cXHRcXHRcXHR9LCAxLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDMyOlxcdFxcdFxcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAzMy1cXHRcXHRcXHRcXHR7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAzOC1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3IodGVzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTAzOTpcXHRcXHRcXHQoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxbXSl7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNDAtXFx0XFx0XFx0XFx0e1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNDUtXFx0XFx0XFx0fSwgMSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTA0NjpcXHRcXHRcXHQoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxbXSl7fSwgMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNDo1MS4wMTgzNTUxMDRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQwNTAyNTUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIFF1b3RhIFNjb3JlIFNldHRlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHdlIG5lZWQgdG8gZXhhbWluZSwgYXMgaXQncyBkZWZpbmVkIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgbGV0J3MgdHJhY2UgZXhhY3RseSB3aGF0IHRoaXMgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGZ1bmN0aW9uICpkb2VzKi5cIiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBoYW5kbGluZyB0aGUgcXVvdGEgc2NvcmVzIHdpdGhpbiB0aGUgREFNT04gc3lzdGVtIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGF0IGhhcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxMzcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNDo1Ny40MjMzODI2ODdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODkwOlxcdFxcdFxcdGRlZmF1bHQ6XFxuMjg5MTpcXHRcXHRcXHRcXHRicmVhaztcXG4yODkyOlxcdFxcdFxcdH1cXG4yODkzOlxcdFxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKHF1b3RhLCBnb2FsKTtcXG4yODk0OlxcdFxcdH1cXG4yODk1OlxcdFxcdHJldHVybiAwO1xcbjI4OTY6XFx0fVxcbjI4OTc6XFx0XFxuMjg5ODpcXHRpbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4yODk5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4yOTAwOlxcdHtcXG4yOTAxOlxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbjI5MDI6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge307XFxuMjkwMzpcXHRcXHRpbnQgaSA9IDA7XFxuMjkwNDpcXHRcXG4yOTA1OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZxdW90YS5nb2Fscyk7XFxuMjkwNjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcXG4yOTA3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnN5c2ZzX3NjaGVtZTtcXG4yOTA4OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xcbjI5MDk6XFx0XFx0XFx0aW50IGVycjtcXG4yOTEwOlxcdFxcbjI5MTE6XFx0XFx0XFx0LyogdXNlciBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlIHNjaGVtZSBzeXNmcyBkaXIgKi9cXG4yOTEyOlxcdFxcdFxcdGlmIChpIFxcdTAwM2U9IHN5c2ZzX3NjaGVtZXMtXFx1MDAzZW5yKVxcbjI5MTM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjkxNDpcXHRcXG4yOTE1OlxcdFxcdFxcdHN5c2ZzX3NjaGVtZSA9IHN5c2ZzX3NjaGVtZXMtXFx1MDAzZXNjaGVtZXNfYXJyW2ldO1xcbjI5MTY6XFx0XFx0XFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3NjaGVtZS1cXHUwMDNlcXVvdGFzLVxcdTAwM2Vnb2FscyxcXG4yOTE3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZxdW90YSk7XFxuMjkxODpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMjkxOTpcXHRcXHRcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcXHUwMDI2cXVvdGEpXFxuMjkyMDpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XFxuMjkyMTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI5MjI6XFx0XFx0XFx0fVxcbjI5MjM6XFx0XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBcXHUwMDI2cXVvdGEpO1xcbjI5MjQ6XFx0XFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXFx1MDAyNnF1b3RhKVxcbjI5MjU6XFx0XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xcbjI5MjY6XFx0XFx0XFx0aWYgKGVycilcXG4yOTI3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjkyODpcXHRcXHRcXHRpKys7XFxuMjkyOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjU3LjQyMzUyOTYxN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjg0ODE0MTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgLiBJdCdzIGNhbGxlZCBieSBgZGFtb3NfcXVvdGFfc2NvcmVgLCB3aGljaCBpcyBpdHNlbGYgaW52b2tlZCBkdXJpbmcgREFNT04gcnVudGltZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2RhbW9uZGAuIFRoYXQncyB0aHJvdWdoIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIC1cdTAwM2UgYGRhbW9zX2FkanVzdF9xdW90YWAgLVx1MDAzZSBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgLVx1MDAzZSBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAgLyBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0YCAtXHUwMDNlIGBkYW1vc19xdW90YV9zY29yZWAgLVx1MDAzZSBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAuIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyByZWFjaGVkIHdoZW4gc3lzZnMgaXMgd3JpdHRlbiB0byBhZGp1c3QgREFNT1Mgc2V0dGluZ3MuIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBkaXJlY3RseSBzZXRzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0eXBpY2FsIGVudmlyb25tZW50cy4gQWgsIGl0IHNlZW1zIERBTU9OIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBubyBleG90aWMgaGFyZHdhcmUgaXMgbmVlZGVkLCB3aGljaCBtZWFucyBpdCdzIHByZXR0eSBhY2Nlc3NpYmxlIGZvciB0ZXN0aW5nLlxuXG5Ob3csIGRvZXMgaXQgdG91Y2ggY29yZSBzdWJzeXN0ZW1zPyBZZXMsIGBtbS9kYW1vbi9gIGxpdmVzIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL2ApLCBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBpbXBvcnRhbnQuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgcXVvdGEgY2FsY3VsYXRpb25zIHdoZW4gdGhlIG1ldHJpYyBpcyBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBhbmQgdGhlIHR1bmVyIGlzIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYC4gVGhpcyBhbGlnbnMgd2l0aCB0aGUgXCJDb3JlIFN1YnN5c3RlbXNcIiBjcml0ZXJpYSwgYW5kIHRoZXJlZm9yZSwgV29ydGhGdXp6aW5nPXRydWUuXG5cbkxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uOlxuKiAgIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYFxuKiAgIGBkYW1vc19xdW90YV9zY29yZWBcbiogICBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWBcbiogICBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGBcbiogICBgZGFtb3NfYWRqdXN0X3F1b3RhYFxuXG5BcmUgdGhlc2UgZnVuY3Rpb25zIGxpa2VseSB0byBiZSBldmVyeXdoZXJlPyBObywgdGhlc2Ugc2VlbSBzcGVjaWZpYyB0byBEQU1PTiBhbmQgREFNT1MsIG5vdCB1YmlxdWl0b3VzIG1lbW9yeSBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuXG5cbk5vdywgdGhlIGVuYWJsZW1lbnQgY29uZmlncy4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlncyBhcmUgZW5hYmxlZDpcblxuKiAgIGBEQU1PTmAgKHRoZSBiYXNlKVxuKiAgIGBEQU1PTl9TWVNGU2AgKHVzZXItc3BhY2UgY29udHJvbCB0aHJvdWdoIHN5c2ZzKVxuKiAgIGBQU0lgIChQcmVzc3VyZSBTdGFsbCBJbmZvcm1hdGlvbiBiZWNhdXNlIG9mIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgKVxuXG5IbW0sIGEgcXVpY2sgbm90ZSwgSSB3b25kZXIgaWYgYERBTU9OX1BBRERSYCBvciBgREFNT05fVkFERFJgIGFyZSBwcmVyZXF1aXNpdGVzPyBJIHNob3VsZCBjaGVjayBga2RhbW9uZF9mbmAgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdG8gc2VlIGhvdyBEQU1PTiBzY2hlbWVzIHdvcmsgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5ODIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNToxNC4yNzE2NzQ4OThaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTQ4NjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZGFtb25kX2ZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwNS0gKiBiZSBjYWxsZWQgZnJvbSBhIHNhZmUgY29udGV4dHMuICBTdWNoIGNvbnRleHRzIGluY2x1ZGUgZGFtb25fY3R4IHNldHVwIHRpbWVcXG5tbS9kYW1vbi9jb3JlLmM6MTEwNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTA3LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxubW0vZGFtb24vY29yZS5jOjExMTE6ICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXFxubW0vZGFtb24vY29yZS5jLTExMTItICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTE4PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNDQtXFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6MTE0NTpcXHQgKiBuZXh0X2ludGVydmFsc190dW5lX3NpcyB3aWxsIGJlIHVwZGF0ZWQgaW5zaWRlIGtkYW1vbmRfZm4oKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cXHQgKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDM4LVxcbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjA0MC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA1Ni1cXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xcbm1tL2RhbW9uL2NvcmUuYzoyMDU3OlxcdFxcdGN0eC1cXHUwMDNla2RhbW9uZCA9IGt0aHJlYWRfcnVuKGtkYW1vbmRfZm4sIGN0eCwgXFxcImtkYW1vbmQuJWRcXFwiLFxcbm1tL2RhbW9uL2NvcmUuYy0yMDU4LVxcdFxcdFxcdFxcdG5yX3J1bm5pbmdfY3R4cyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjE1MT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2N0eHM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MjE1NjpcXHRcXHQvKiBucl9ydW5uaW5nX2N0eHMgaXMgZGVjcmVtZW50ZWQgaW4ga2RhbW9uZF9mbiAqL1xcbm1tL2RhbW9uL2NvcmUuYy0yMTU3LVxcdFxcdF9fZGFtb25fc3RvcChjdHhzW2ldKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zODg4PXN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5MDktICovXFxubW0vZGFtb24vY29yZS5jOjM5MTA6c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxubW0vZGFtb24vY29yZS5jLTM5MTEte1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE4NzY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTkwMi0gKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTkwMzogKiBjb21taXQgMzNjM2Y2YzJiNDhjIChcXFwibW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlXFxcIilcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTkwNC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDU6MTQuNDAxMTcxOTU3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1ODk4NzA1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBEQU1PTidzIFN5c2ZzIEludGVyZmFjZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIERBTU9OIGluaXRpYWxpemF0aW9uIGZyb20gdGhlIHN5c2ZzIHBlcnNwZWN0aXZlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIERBTU9OIG1vbml0b3IgaXMgdHJpZ2dlcmVkLCBjb25maWd1cmVkLCBhbmQgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgcGF0aHMgYW5kIGZpbmQgb3V0IGV4YWN0bHkgaG93IHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB0cmFuc2xhdGVzIGludG8ga2VybmVsLXNwYWNlIGFjdGlvbnMuIFdoYXQgc3lzZnMgYXR0cmlidXRlcyBhcmUgaW52b2x2ZWQsIGFuZCBob3cgZG8gdGhleSBpbXBhY3QgdGhlIERBTU9OIHN0YXJ0dXAgc2VxdWVuY2U/IFRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUgYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTEyMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjE3Ljk5MTA0NTU1NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzA2ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jLTExMTAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzk9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNDEtLypcXG5tbS9kYW1vbi9jb3JlLmM6MjA0MjogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTIwNDMtICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQ4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDQ5OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwNTAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNzEtLyoqXFxubW0vZGFtb24vY29yZS5jOjIwNzI6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxubW0vZGFtb24vY29yZS5jLTIwNzMtICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4MC0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiAnZGFtb25fc3RhcnQoKScgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XFxubW0vZGFtb24vY29yZS5jLTIwODItICogcmV0dXJucyAtRUJVU1kuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA4NjppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjExMS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIxMTI6XFx0XFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjExMy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyMTQ9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyNjItICpcXG5tbS9kYW1vbi9jb3JlLmM6MjI2MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMjY0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQxNDpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxNS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMyND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzM3OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzgtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vc3RhdC5jLTIxNC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTU9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTM5LVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjI1NDA6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjU0MS1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjE4LjEwNjM1NzQzN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjM0NDAwMzQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBBY3RpdmF0aW9uIGFuZCBNb25pdG9yaW5nIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgIGlzIHRoZSBrZXkgdG8gYWN0dWFsbHkgZW5hYmxpbmcgREFNT04uIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC4gTm93LCBJIHNlZSB0aGF0IHdlIGhhdmUgdGhlc2UgYERBTU9OX1BBRERSYCBhbmQgYERBTU9OX1ZBRERSYCBtYWNyb3MgdGhhdCBkZWZpbmUgaG93IHRoZSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgYXJlIGNvbmZpZ3VyZWQuIEl0J3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0eXBpY2FsbHkgdXNlZCBmb3Igc3BlY2lmaWMgdGhpbmdzLCBidXQgSSB0aGluayBmb3IgbXkgdGVzdGluZywgZXNwZWNpYWxseSB3aXRoIHRoZSBEQU1PUyBxdW90YSBzdHVmZiBvciBteSBvd24gY3VzdG9tIHNjaGVtZXMsIEknZCBiZSBzZXR0aW5nIHRoZSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgdmlhIHN5c2ZzLCBlaXRoZXIgdGhyb3VnaCB0aGUgYHN0YXRlYCBmaWxlIG9yIHRoZSBgb3BzYCBmaWxlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBkYW1vbl9zeXNmc19zZXRfdGFyZ2V0c2AgZnVuY3Rpb24gb3IgdGhlIGBvcHNgIHNwZWNpZmljYWxseSB0byBjb25maXJtIHRoYXQgYmVoYXZpb3IgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUxMSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNTozMC40NTAzNzE1NTlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjYwMjQ5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RBTU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0PTUxPVRvIHVzZSB0aGlzIGZlYXR1cmUsIHlvdSBzaG91bGQgZmlyc3QgZW5zdXJlIHlvdXIgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYSBrZXJuZWxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdDo1Mjp0aGF0IGlzIGJ1aWx0IHdpdGggYGBDT05GSUdfREFNT05fTFJVX1NPUlQ9eWBgLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTUzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdD00Mz1UbyB1c2UgdGhpcyBmZWF0dXJlLCB5b3Ugc2hvdWxkIGZpcnN0IGVuc3VyZSB5b3VyIHN5c3RlbSBpcyBydW5uaW5nIG9uIGEga2VybmVsXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdDo0NDp0aGF0IGlzIGJ1aWx0IHdpdGggYGBDT05GSUdfREFNT05fUkVDTEFJTT15YGAuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9yZWNsYWltLnJzdC00NS1cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0PTIwPVlvdSBzaG91bGQgZmlyc3QgZW5zdXJlIHlvdXIgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYSBrZXJuZWwgYnVpbHQgd2l0aFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0OjIxOmBgQ09ORklHX0RBTU9OXyo9eWBgLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTIyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0LnJzdD0zMT1UbyB1c2UgdGhpcyBmZWF0dXJlLCB5b3Ugc2hvdWxkIGZpcnN0IGVuc3VyZSB5b3VyIHN5c3RlbSBpcyBydW5uaW5nIG9uIGEga2VybmVsXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0LnJzdDozMjp0aGF0IGlzIGJ1aWx0IHdpdGggYGBDT05GSUdfREFNT05fU1RBVD15YGAuICBUaGUgZmVhdHVyZSBjYW4gYmUgZW5hYmxlZCBieVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhdC5yc3Q6MzM6ZGVmYXVsdCBhdCBidWlsZCB0aW1lLCBieSBzZXR0aW5nIGBgQ09ORklHX0RBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUYGAgdHJ1ZS5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXQucnN0LTM0LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9zdGF0LnJzdD00NT1TZXR0aW5nIGl0IGFzIGBgTmBgIGRpc2FibGVzIERBTU9OX1NUQVQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgYnlcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXQucnN0OjQ2OmBgQ09ORklHX0RBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUYGAgYnVpbGQgY29uZmlnIG9wdGlvbi5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXQucnN0LTQ3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3Q9Mzc9c3lzZnMgSW50ZXJmYWNlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdC0zOS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdDo0MDpEQU1PTiBzeXNmcyBpbnRlcmZhY2UgaXMgYnVpbHQgd2hlbiBgYENPTkZJR19EQU1PTl9TWVNGU2BgIGlzIGRlZmluZWQuICBJdFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0LTQxLWNyZWF0ZXMgbXVsdGlwbGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIHVuZGVyIGl0cyBzeXNmcyBkaXJlY3RvcnksXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3Q9MzM9REFNT05fTFJVX1NPUlTkvb/nlKhEQU1PTuWvu+aJvueDremhte+8iOiMg+WbtOWGheeahOmhtemdouiuv+mXrumikeeOh+mrmOS6jueUqOaIt+aMh+WumueahOmYiOWAvO+8ieWSjOWGt+mhtVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTQ2LeS9v+eUqOatpOeJueaAp++8jOS9oOmmluWFiOmcgOimgeehruiupOS9oOeahOezu+e7n+S4rei/kOihjOeahOWGheaguOWcqOe8luivkeaXtuWQr+eUqOS6hlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdDo0NzpgYENPTkZJR19EQU1PTl9MUlVfU09SVD15YGAuXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTQ4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q9MzY9REFNT05fUkVDTEFJTeaJvuWIsOWcqOeJueWumuaXtumXtOWGheayoeacieiiq+iuv+mXrueahOWGheWtmOWMuuWfn+W5tuWIhumhteOAguS4uuS6humBv+WFjeWug+WcqOWIhumhteaTjeS9nOS4rea2iOiAl+i/h+Wkmlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3QtNDItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q6NDM66KaB5L2/55So6L+Z5Liq5Yqf6IO977yM5L2g6aaW5YWI6KaB56Gu5L+d5L2g55qE57O757uf6L+Q6KGM5Zyo5LiA5Liq5LulIGBgQ09ORklHX0RBTU9OX1JFQ0xBSU09eWBgIOaehOW7uueahOWGhVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW0ucnN0LTQ0LeaguOS4iuOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI2LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXJ0LnJzdDoyNzrpppblhYjvvIzkvaDopoHnoa7kv53kvaDlvZPliY3ns7vnu5/kuK3ot5HnmoTlhoXmoLjmnoTlu7rml7bpgInlrprkuobov5nkuKrlip/og73pgInpobkgYGBDT05GSUdfREFNT05fKj15YGAuXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0PTM1PXN5c2Zz5o6l5Y+jXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0LTM2LT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdDozNzpEQU1PTueahHN5c2Zz5o6l5Y+j5piv5Zyo5a6a5LmJIGBgQ09ORklHX0RBTU9OX1NZU0ZTYGAg5pe25bu656uL55qE44CC5a6D5Zyo5YW2c3lzZnPnm67lvZXkuIvliJvlu7rlpJpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QtMzgt5Liq55uu5b2V5ZKM5paH5Lu277yMIGBgXFx1MDAzY3N5c2ZzXFx1MDAzZS9rZXJuZWwvbW0vZGFtb24vYGAg44CC5L2g5Y+v5Lul6YCa6L+H5a+56K+l55uu5b2V5LiL55qE5paH5Lu26L+b6KGM5YaZ5YWl5ZKMXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9tbS9kYW1vbi9scnVfc29ydC5yc3Q9MzM9REFNT05fTFJVX1NPUlTkvb/nlKhEQU1PTuWwi+aJvueGsemgge+8iOevhOWcjeWFp+eahOmggemdouioquWVj+mgu+eOh+mrmOaWvOeUqOaItuaMh+WumueahOmWvuWAvO+8ieWSjOWGt+mggVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTQ2LeS9v+eUqOatpOeJueaAp++8jOS9oOmmluWFiOmcgOimgeeiuuiqjeS9oOeahOezu+e1seS4remBi+ihjOeahOWFp+aguOWcqOe3qOitr+aZguWVk+eUqOS6hlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL2xydV9zb3J0LnJzdDo0NzpgYENPTkZJR19EQU1PTl9MUlVfU09SVD15YGAuXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vbHJ1X3NvcnQucnN0LTQ4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q9MzY9REFNT05fUkVDTEFJTeaJvuWIsOWcqOeJueWumuaZgumWk+WFp+aykuacieiiq+ioquWVj+eahOWFp+WtmOWNgOWfn+S4puWIhumggeOAgueIsuS6humBv+WFjeWug+WcqOWIhumggeaTjeS9nOS4rea2iOiAl+mBjuWkmlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3QtNDItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vcmVjbGFpbS5yc3Q6NDM66KaB5L2/55So6YCZ5YCL5Yqf6IO977yM5L2g6aaW5YWI6KaB56K65L+d5L2g55qE57O757Wx6YGL6KGM5Zyo5LiA5YCL5LulIGBgQ09ORklHX0RBTU9OX1JFQ0xBSU09eWBgIOani+W7uueahOWFp1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3JlY2xhaW0ucnN0LTQ0LeaguOS4iuOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI2LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3N0YXJ0LnJzdDoyNzrpppblhYjvvIzkvaDopoHnorrkv53kvaDnlbbliY3ns7vntbHkuK3ot5HnmoTlhafmoLjmp4vlu7rmmYLpgbjlrprkuobpgJnlgIvlip/og73pgbjpoIUgYGBDT05GSUdfREFNT05fKj15YGAuXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vc3RhcnQucnN0LTI4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0PTM1PXN5c2Zz5o6l5Y+jXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0LTM2LT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdDozNzpEQU1PTueahHN5c2Zz5o6l5Y+j5piv5Zyo5a6a576pIGBgQ09ORklHX0RBTU9OX1NZU0ZTYGAg5pmC5bu656uL55qE44CC5a6D5Zyo5YW2c3lzZnPnm67pjITkuIvlibXlu7rlpJpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QtMzgt5YCL55uu6YyE5ZKM5paH5Lu277yMIGBgXFx1MDAzY3N5c2ZzXFx1MDAzZS9rZXJuZWwvbW0vZGFtb24vYGAg44CC5L2g5Y+v5Lul6YCa6YGO5bCN6Kmy55uu6YyE5LiL55qE5paH5Lu26YCy6KGM5a+r5YWl5ZKMXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9OTk4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDU5LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDYwOiNpZmRlZiBDT05GSUdfREFNT05cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA2MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMTUyPWludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMTU2LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMTU3OiNlbmRpZlxcdC8qIENPTkZJR19EQU1PTiAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMTU4LVxcbi0tXFxubW0vTWFrZWZpbGU9MTM2PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgKz0gZGVidWdfcGFnZV9yZWYub1xcbm1tL01ha2VmaWxlOjEzNzpvYmotJChDT05GSUdfREFNT04pICs9IGRhbW9uL1xcbm1tL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICs9IHVzZXJjb3B5Lm9cXG4tLVxcbm1tL2RhbW9uL01ha2VmaWxlPTM9b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbm1tL2RhbW9uL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxubW0vZGFtb24vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxubW0vZGFtb24vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxubW0vZGFtb24vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0OT11bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzItXFxubW0vZGFtb24vY29yZS5jOjM3MzojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYy0zNzQtc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDIzPXN0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9pbnNlcnRfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDMwLVxcbm1tL2RhbW9uL2NvcmUuYzo0MzE6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9jb3JlLmMtNDMyLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9kZWxfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjk0Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI5OTEtXFxubW0vZGFtb24vY29yZS5jOjI5OTI6I2lmZGVmIENPTkZJR19EQU1PTl9QQUREUlxcbm1tL2RhbW9uL2NvcmUuYy0yOTkzLS8qXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAwNC0gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGRhbW9uX2dldF9mb2xpbygpIGZyb20gb3BzLWNvbW1vbi5jLCB3aGljaCBpc1xcbm1tL2RhbW9uL2NvcmUuYzozMDA1OiAqIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RBTU9OX1BBRERSIGlzIGVuYWJsZWQuIEl0IGFsc28gcmVxdWlyZXMgdGhlXFxubW0vZGFtb24vY29yZS5jLTMwMDYtICogY29udGV4dCB0byBiZSB1c2luZyBQQUREUiBvcGVyYXRpb25zIGZvciBtZWFuaW5nZnVsIHJlc3VsdHMuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzA3Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDkxLX1cXG5tbS9kYW1vbi9jb3JlLmM6MzA5MjojZWxzZSAvKiBDT05GSUdfREFNT05fUEFERFIgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMzA5My1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDk3LX1cXG5tbS9kYW1vbi9jb3JlLmM6MzA5ODojZW5kaWYgLyogQ09ORklHX0RBTU9OX1BBRERSICovXFxubW0vZGFtb24vY29yZS5jLTMwOTktI2Vsc2UgLyogQ09ORklHX05VTUEgKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzc3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MjQtXFxubW0vZGFtb24vY29yZS5jOjM0MjU6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9jb3JlLmMtMzQyNi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfdHdvX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzUzMz1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNTU5LVxcbm1tL2RhbW9uL2NvcmUuYzozNTYwOiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jLTM1NjEtc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM3Nzc9c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2VjcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzg0LVxcbm1tL2RhbW9uL2NvcmUuYzozNzg1OiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jLTM3ODYtc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTMwPXN0YXRpYyBib29sIGVuYWJsZWQgX19yZWFkX21vc3RseSA9IElTX0VOQUJMRUQoXFxubW0vZGFtb24vc3RhdC5jOjMxOlxcdENPTkZJR19EQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVCk7XFxubW0vZGFtb24vc3RhdC5jLTMyLW1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcXHUwMDI2ZW5hYmxlZF9wYXJhbV9vcHMsIE5VTEwsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnPTI9Q09ORklHX0tVTklUPXlcXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6MzpDT05GSUdfREFNT049eVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzo0OkNPTkZJR19EQU1PTl9LVU5JVF9URVNUPXlcXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWctNS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZz04PUNPTkZJR19QQUdFX0lETEVfRkxBRz15XFxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnOjk6Q09ORklHX0RBTU9OX1ZBRERSPXlcXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6MTA6Q09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1Q9eVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZy0xMS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZz0xMz1DT05GSUdfU1lTRlM9eVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxNDpDT05GSUdfREFNT05fU1lTRlM9eVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxNTpDT05GSUdfREFNT05fU1lTRlNfS1VOSVRfVEVTVD15XFxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnLTE2LVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZy0xNy0jIGVuYWJsZSBEQU1PTl9ERUJVR19TQU5JVFkgdG8gY2F0Y2ggYW55IGJ1Z1xcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZzoxODpDT05GSUdfREFNT05fREVCVUdfU0FOSVRZPXlcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2OiNpZmRlZiBDT05GSUdfREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTQxOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQyNi1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NDI3OlxcdC8qIERBTU9OX09QU19WQUREUiBpcyByZWdpc3RlcmVkIG9ubHkgaWYgQ09ORklHX0RBTU9OX1ZBRERSIGlzIHNldCAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MjgtXFx0aWYgKCFkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhEQU1PTl9PUFNfVkFERFIpKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTk4Mz1rdW5pdF90ZXN0X3N1aXRlKGRhbW9uX3Rlc3Rfc3VpdGUpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5ODYtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE5ODc6I2VuZGlmXFx0LyogQ09ORklHX0RBTU9OX0tVTklUX1RFU1QgKi9cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0LmgtNS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oOjY6I2lmZGVmIENPTkZJR19EQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC03LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaD0xMDY9a3VuaXRfdGVzdF9zdWl0ZShkYW1vbl9zeXNmc190ZXN0X3N1aXRlKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0LmgtMTA5LVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg6MTEwOiNlbmRpZiAvKiBDT05GSUdfREFNT05fU1lTRlNfS1VOSVRfVEVTVCAqL1xcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC01LVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NjojaWZkZWYgQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTctXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTI4Mj1rdW5pdF90ZXN0X3N1aXRlKGRhbW9uX3Rlc3Rfc3VpdGUpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0yODUtXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoyODY6I2VuZGlmXFx0LyogQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1QgKi9cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMTktXFxubW0vZGFtb24vdmFkZHIuYzoyMDojaWZkZWYgQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi92YWRkci5jLTIxLSN1bmRlZiBEQU1PTl9NSU5fUkVHSU9OX1NaXFxuLS1cXG50b29scy90ZXN0aW5nL2t1bml0L2NvbmZpZ3MvYWxsX3Rlc3RzLmNvbmZpZz0zOT1DT05GSUdfSVdMV0lGST15XFxudG9vbHMvdGVzdGluZy9rdW5pdC9jb25maWdzL2FsbF90ZXN0cy5jb25maWctNDAtXFxudG9vbHMvdGVzdGluZy9rdW5pdC9jb25maWdzL2FsbF90ZXN0cy5jb25maWc6NDE6Q09ORklHX0RBTU9OPXlcXG50b29scy90ZXN0aW5nL2t1bml0L2NvbmZpZ3MvYWxsX3Rlc3RzLmNvbmZpZzo0MjpDT05GSUdfREFNT05fVkFERFI9eVxcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvY29uZmlncy9hbGxfdGVzdHMuY29uZmlnOjQzOkNPTkZJR19EQU1PTl9QQUREUj15XFxudG9vbHMvdGVzdGluZy9rdW5pdC9jb25maWdzL2FsbF90ZXN0cy5jb25maWctNDQtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9jb25maWc6MTpDT05GSUdfREFNT049eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzoyOkNPTkZJR19EQU1PTl9TWVNGUz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vY29uZmlnOjM6Q09ORklHX0RBTU9OX1BBRERSPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9jb25maWc6NDpDT05GSUdfREFNT05fVkFERFI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzo1OkNPTkZJR19EQU1PTl9SRUNMQUlNPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9jb25maWc6NjpDT05GSUdfREFNT05fTFJVX1NPUlQ9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2NvbmZpZzo3OkNPTkZJR19EQU1PTl9ERUJVR19TQU5JVFk9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNTozMi43NzY0MDY2MTJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTE3OTMzNzIxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWZXJkaWN0OiBEQU1PTiBRdW90YSBHb2FsIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIHdlIG5lZWQgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBQU0lgIGNvbmZpZ3VyZWQuIFRob3NlIGFyZSBzdHJhaWdodGZvcndhcmQuXG5cbk5leHQsIHRoZSBmb2N1cyBzeW1ib2xzLiBXZSBoYXZlIGEgbGlzdDogYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgLCBgZGFtb3NfcXVvdGFfc2NvcmVgLCBgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbGAsIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCwgYW5kIGBkYW1vc19hZGp1c3RfcXVvdGFgLiBUaGVzZSBsb29rIGNvcnJlY3QgZ2l2ZW4gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UuXG5cblJpZ2h0LCB0aGUgZGlmZiBjb25maXJtcyB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkLiBMb29raW5nIGF0IGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCwgd2Ugc2VlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdG91Y2hlZC4gTm90aGluZyBlbHNlIGp1bXBzIG91dCB0aGF0J3MgZGlyZWN0bHkgcmVsZXZhbnQgdG8gZnV6emluZy5cblxuTm93LCBsZXQncyBlbnN1cmUgd2UncmUgY2xlYXIgb24gdGhlIGluc3RydWN0aW9ucy4gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGB0cnVlYCBiZWNhdXNlIHRoZSBjaGFuZ2UgbW9kaWZpZXMgcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhlIGVkaXQgdG8gYG1tL2RhbW9uL2NvcmUuY2AgbWFrZXMgdGhpcyBhIGRlZmluaXRlIHllcy5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgYXMgZXhwZWN0ZWQ6IHRob3NlIHNhbWUgZnVuY3Rpb25zIHdlIGlkZW50aWZpZWQgYmVmb3JlLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbHJlYWR5IGNvbmZpcm1lZC5cblxuRmluYWxseSwgdGhlIHJlYXNvbmluZy4gV2UgbmVlZCBhIGNvbmNpc2UgZXhwbGFuYXRpb24uIEJhc2VkIG9uIHRoZSBjb2RlIGluc3BlY3Rpb24sIHRoaXMgY2hhbmdlIG1vZGlmaWVzIHRoZSBxdW90YSBnb2FsIGV2YWx1YXRpb24gbG9naWMuIFRoaXMgaXMgZm9yIERBTU9TIFBTSSBnb2FscyAqc3BlY2lmaWNhbGx5KiBhbmQgaW52b2x2ZXMgdGhlIHRlbXBvcmFsIHR1bmVyLiBBbmQsIGNydWNpYWxseSwgaXQncyBhbGwgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIGRhZW1vbiBzY2hlbWVzLlxuXG5ZZXAsIGl0J3MgYWxsIGNvbnNpc3RlbnQ6IHRoZSBjb2RlIGNoYW5nZXMsIHRoZSBjb25maWd1cmF0aW9ucywgdGhlIGZvY3VzIHN5bWJvbHMsIGFuZCB0aGUgcmVhc29uaW5nLiBXZSdyZSByZWFkeSB0byBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTI2LCJPdXRwdXRUb2tlbnMiOjE3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNjoyNC41Njk3ODM1NTVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3NjQ2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiUFNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZVwiLFxuICAgIFwiZGFtb3NfcXVvdGFfc2NvcmVcIixcbiAgICBcImRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWxcIixcbiAgICBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OL0RBTU9TIHF1b3RhIGdvYWwgZXZhbHVhdGlvbiBpbiBtbS9kYW1vbi9jb3JlLmMsIGVuc3VyaW5nIHRoYXQgdW5tZWFzdXJlZCBQU0kgZ29hbHMgdW5kZXIgYSB0ZW1wb3JhbCBnb2FsIHR1bmVyIGRvIG5vdCBwcmVtYXR1cmVseSB6ZXJvIHRoZSBlZmZlY3RpdmUgcXVvdGEgZHVyaW5nIGluaXRpYWwgdHVuaW5nIHJvdW5kcy4gVGhpcyBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIGV4ZWN1dGlvbiBhbmQgcXVvdGEgY2FsY3VsYXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OJ3Mgc3lzZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiUFNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZVwiLFxuICAgIFwiZGFtb3NfcXVvdGFfc2NvcmVcIixcbiAgICBcImRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWxcIixcbiAgICBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OL0RBTU9TIHF1b3RhIGdvYWwgZXZhbHVhdGlvbiBpbiBtbS9kYW1vbi9jb3JlLmMsIGVuc3VyaW5nIHRoYXQgdW5tZWFzdXJlZCBQU0kgZ29hbHMgdW5kZXIgYSB0ZW1wb3JhbCBnb2FsIHR1bmVyIGRvIG5vdCBwcmVtYXR1cmVseSB6ZXJvIHRoZSBlZmZlY3RpdmUgcXVvdGEgZHVyaW5nIGluaXRpYWwgdHVuaW5nIHJvdW5kcy4gVGhpcyBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIGV4ZWN1dGlvbiBhbmQgcXVvdGEgY2FsY3VsYXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OJ3Mgc3lzZnMgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNjoyNC43MDk1NTY3MjNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTY3NDM3Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDY6MjQuNzEwMDQ3NzgzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODY5NjY5MzA3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJ3MgcXVvdGEgZ29hbCBsb2dpYyBpbiBgbW0vZGFtb24vY29yZS5jYCBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgbWV0cmljcyBhbmQgYWRkcyBhIGNvcnJlc3BvbmRpbmcgS1VuaXQgdGVzdC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYYCAoYSBkb21haW4tbGV2ZWwgc2VudGluZWwgdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIFBTSSBzYW1wbGUgaGFzIHlldCBiZWVuIHJlY29yZGVkKSwgaXQgc2V0cyBgZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IDBgIGluc3RlYWQgb2YgYGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZWAgaWYgdGhlIHR1bmVyIGlzIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYC5cXG5cXG5EZXNwaXRlIHRoZSBjb2RlIGNvbW1lbnQgcmVmZXJyaW5nIHRvIFxcXCJ1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsXFxcIiwgdGhpcyBpcyBwdXJlbHkgYSBzZW1hbnRpYyBzZW50aW5lbCB2YWx1ZTogYGxhc3RfcHNpX3RvdGFsYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBVNjRfTUFYYCB1cG9uIGFsbG9jYXRpb24gb3IgY29tbWl0IChgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgYWNjZXNzZWQgb3IgZXhwb3NlZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1NDI1NTQ1YmRiOGMzYmM0NGViY2ViNmNhMDU0MjYzOTA2NjRlMzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNzowMToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMDZjZjJhYjdlOTdkNy4uZTZkODdmZDM5OTJlZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzE2MSwxMiArMzE2MSwxOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4gXHRcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XG4tXHRcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cbi1cdFx0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcbi1cdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZTtcbi1cdFx0ZWxzZVxuK1x0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XG4rXHRcdFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xuK1x0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPT1cbitcdFx0XHRcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbitcdFx0XHRcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXG4rXHRcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuK1x0XHR9IGVsc2Uge1xuIFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxuIFx0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbitcdFx0fVxuIFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBjMDFlNmE3NWNhZGMxLi4yYjliMjRjZTdkYWQzIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC04ODksNiArODg5LDc0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdH0pO1xuIH1cbiBcbisvKlxuKyAqIFVubWVhc3VyZWQgUFNJIGdvYWxzIG11c3Qgbm90IGRpc2FibGUgdGhlIHRlbXBvcmFsIHF1b3RhLlxuKyAqIEtlZXAgc3ogKiAxMDAwMCB3aXRoaW4gYSAzMi1iaXQgdW5zaWduZWQgbG9uZy5cbisgKi9cbitzdGF0aWMgdm9pZCBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpKHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xuK1x0c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIHBhdHRlcm4gPSB7fTtcbitcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHtcbitcdFx0LnN6ID0gU1pfNjRLLFxuK1x0XHQuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXG4rXHR9O1xuK1x0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzID0ge307XG4rXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBzcmMgPSB7XG4rXHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG4rXHRcdC50YXJnZXRfdmFsdWUgPSBVTE9OR19NQVgsXG4rXHR9O1xuK1x0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4rXHRzdHJ1Y3QgZGFtb3MgKnM7XG4rXG4rXHRpZiAoIWMpXG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJjdHggYWxsb2MgZmFpbFwiKTtcbitcdHMgPSBkYW1vbl9uZXdfc2NoZW1lKFx1MDAyNnBhdHRlcm4sIERBTU9TX1NUQVQsIDAsIFx1MDAyNnF1b3RhLCBcdTAwMjZ3bWFya3MsXG4rXHRcdFx0TlVNQV9OT19OT0RFKTtcbitcdGlmICghcykge1xuK1x0XHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbitcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInNjaGVtZSBhbGxvYyBmYWlsXCIpO1xuK1x0fVxuK1x0ZGFtb25fYWRkX3NjaGVtZShjLCBzKTtcbitcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsIFVMT05HX01BWCk7XG4rXHRpZiAoIWdvYWwpIHtcbitcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJnb2FsIGFsbG9jIGZhaWxcIik7XG4rXHR9XG4rXHRkYW1vc19hZGRfcXVvdGFfZ29hbChcdTAwMjZzLVx1MDAzZXF1b3RhLCBnb2FsKTtcbitcbitcdC8qIGZyZXNoIGdvYWwsIGZpcnN0IHR1bmluZyByb3VuZCAqL1xuK1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfNjRLKTtcbitcbitcdC8qIHNlY29uZCByb3VuZDogbGFzdF9wc2lfdG90YWwgaXMgaW5pdGlhbGlzZWQgbm93ICovXG4rXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuK1xuK1x0LyogY29tbWl0IGEgUFNJIGdvYWwgb250byB0aGUgaW5pdGlhbGlzZWQgUFNJIGdvYWwgKi9cbitcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNnNyYyk7XG4rXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHMtXHUwMDNlcXVvdGEuZXN6LCAodW5zaWduZWQgbG9uZylTWl82NEspO1xuK1xuK1x0LyogYSBtZWFzdXJlZCByb3VuZCB0aGF0IHJlYWNoZXMgdGhlIHRhcmdldCBkaXNhYmxlcyB0aGUgcXVvdGEgKi9cbitcdGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlID0gMTA7XG4rXHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpIC0gMTA7XG4rXHQvKiBVNjRfTUFYIG1hcmtzIGFuIHVubWVhc3VyZWQgZ29hbCwga2VlcCB0aGUgc2FtcGxlIGF3YXkgZnJvbSBpdCAqL1xuK1x0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcbitcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbC0tO1xuK1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgMHVsKTtcbitcbitcdC8qIHRoZSBjb25zaXN0IHR1bmVyIGtlZXBzIGl0cyBxdW90YSBvdmVyIGFuIHVubWVhc3VyZWQgcm91bmQgKi9cbitcdHMtXHUwMDNlcXVvdGEuZ29hbF90dW5lciA9IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVDtcbitcdHMtXHUwMDNlcXVvdGEuZXN6X2JwID0gU1pfMzJLICogMTAwMDA7XG4rXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChnb2FsLCBcdTAwMjZzcmMpO1xuK1x0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzLVx1MDAzZXF1b3RhLmVzeiwgKHVuc2lnbmVkIGxvbmcpU1pfMzJLKTtcbitcbitcdGRhbW9uX2Rlc3Ryb3lfY3R4KGMpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWxzLCBpbnQgbnJfZHN0X2dvYWxzLFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjX2dvYWxzLCBpbnQgbnJfc3JjX2dvYWxzKVxuQEAgLTE4ODcsNiArMTk1NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfbmV3X2ZpbHRlciksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyksXG4rXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3Rfc2V0X2VmZmVjdGl2ZV9xdW90YV90ZW1wb3JhbF9wc2kpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YSksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfZmlsdGVyKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA2OjI0LjcxMDA0ODY4M1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjIxODU2ODI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gUXVvdGEgR29hbCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWZmZWN0cyBgbW0vZGFtb24vY29yZS5jYCBhbmQgYSByZWxhdGVkIEtVbml0IGhlYWRlciwgbGV0J3MgZGl2ZSBpbi4gVGhlIGRpZmYgaXMgZm9jdXNlZCBvbiBob3cgd2UgY2FsY3VsYXRlIHRoZSBgY3VycmVudF92YWx1ZWAgZm9yIGEgcXVvdGEgZ29hbCwgc3BlY2lmaWNhbGx5IHdoZW4gdXNpbmcgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AuXG5cblRoZSBrZXkgc2VjdGlvbiBpcyB0aGUgYGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOmAgYmxvY2suIEl0IGxvb2tzIGxpa2Ugd2UncmUgc3VidHJhY3RpbmcgdGhlIHByZXZpb3VzIFBTSSB0b3RhbCBmcm9tIHRoZSBjdXJyZW50IFBTSSB0b3RhbCB0byBkZXJpdmUgdGhlIFwidXNhZ2VcIiBvdmVyIHRoZSBsYXN0IGl0ZXJhdGlvbi4gVGhlcmUncyBhIGNoZWNrOiBgaWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClgLiBUaGUgY29tbWVudCBzYXlzIFwidW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZFwiLiBUaGlzIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0LiBJcyBgVTY0X01BWGAgKmFjdHVhbGx5KiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgaXMgaXQgYmVpbmcgdXNlZCBhcyBhIHNlbnRpbmVsIHZhbHVlIGhlcmU/IEEgZmxhZyB0byBkZW5vdGUgXCJubyBwcmV2aW91cyBtZWFzdXJlbWVudCBhdmFpbGFibGVcIj8gVGhlIGNvZGUncyBjb21tZW50IG1lbnRpb25zIGl0J3MgXCJ1bmluaXRpYWxpemVkLFwiIGltcGx5aW5nIHRoZSBmb3JtZXIsIGhvd2V2ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbnRlcmVzdGluZy4gVGhlIGFkZGl0aW9uIG9mIHRlbXBvcmFsIHF1b3RhIG1heSBoYXZlIGRpZmZlcmVudCByYW1pZmljYXRpb25zLlxuXG5UaGUgYGlmYCBjb25kaXRpb24gdGhlbiBicmFuY2hlcy4gSWYgYGxhc3RfcHNpX3RvdGFsYCBpcyBgVTY0X01BWGAsIGl0IHNldHMgYGN1cnJlbnRfdmFsdWVgIHRvIGBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZWAgb3IgMCBmb3IgdGhlIHRlbXBvcmFsIHF1b3RhLiBPdGhlcndpc2UsIGl0IGNhbGN1bGF0ZXMgYGN1cnJlbnRfdmFsdWVgIGFzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gY3VycmVudCBhbmQgbGFzdCBQU0kgdG90YWwsIGFuZCB1cGRhdGVzIGBsYXN0X3BzaV90b3RhbGAuXG5cblRvIGJlIHN1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgaXMgKmluaXRpYWxpemVkKi4gSSBuZWVkIHRvIGxvb2sgYXQgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBgbGFzdF9wc2lfdG90YWxgIGlzIHNldCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IGBVNjRfTUFYYCBpcyBiZWluZyB1c2VkIGFzIGEgc2VudGluZWwgZm9yIGluaXRpYWxpemF0aW9uLCB0byBpbmRpY2F0ZSB0aGF0IG5vIHByZXZpb3VzIFBTSSBtZWFzdXJlbWVudCBpcyBhdmFpbGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzowNi45Mjg2MTk5NDZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MzY1NDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxhc3RfcHNpX3RvdGFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9Njg4PXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02OTktXFx0aWYgKG1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXFxubW0vZGFtb24vY29yZS5jOjcwMDpcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XFxubW0vZGFtb24vY29yZS5jLTcwMS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Z29hbC1cXHUwMDNlbGlzdCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTE5MT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTk1LVxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbm1tL2RhbW9uL2NvcmUuYzoxMTk2OlxcdFxcdGRzdC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTk3LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxNTM9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNjMtXFx0XFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzE2NDpcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkge1xcbm1tL2RhbW9uL2NvcmUuYzozMTY1OlxcdFxcdFxcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMzE2Ni1cXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuZ29hbF90dW5lciA9PVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNzMtXFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxcbm1tL2RhbW9uL2NvcmUuYzozMTc0OlxcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsO1xcbm1tL2RhbW9uL2NvcmUuYy0zMTc1LVxcdFxcdH1cXG5tbS9kYW1vbi9jb3JlLmM6MzE3NjpcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XFxubW0vZGFtb24vY29yZS5jLTMxNzctXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODA0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTUtXFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxNjpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VsYXN0X3BzaV90b3RhbCwgVTY0X01BWCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxNy1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MzI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM3LVxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMTIzLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Mzg6XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzktXFx0fTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDUtXFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg0NjpcXHRcXHRcXHQubGFzdF9wc2lfdG90YWwgPSA1NjcsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0Ny1cXHRcXHRcXHR9KTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04ODctXFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4ODpcXHRcXHRcXHQubGFzdF9wc2lfdG90YWwgPSA1NjcsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4OS1cXHRcXHRcXHR9KTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTY9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9zZXRfZWZmZWN0aXZlX3F1b3RhX3RlbXBvcmFsX3BzaShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTMxLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MzI6XFx0Lyogc2Vjb25kIHJvdW5kOiBsYXN0X3BzaV90b3RhbCBpcyBpbml0aWFsaXNlZCBub3cgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTMzLVxcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQyLVxcdGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSA9IDEwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NDM6XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCkgLSAxMDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTQ0LVxcdC8qIFU2NF9NQVggbWFya3MgYW4gdW5tZWFzdXJlZCBnb2FsLCBrZWVwIHRoZSBzYW1wbGUgYXdheSBmcm9tIGl0ICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk0NTpcXHRpZiAoZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTQ2OlxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsLS07XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk0Ny1cXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzowNy4wMTcwMDM3MzJaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQ4ODA5Mzk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBjb3JlLmNgIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLCBzbyBsZXQncyBqdW1wIHJpZ2h0IGludG8gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzE2MC4gSSBmaWd1cmUgdGhhdCdzIHRoZSBsaWtlbHkgbG9jYXRpb24gd2hlcmUgdGhlIGlzc3VlIGlzIG9jY3VycmluZywgb3IgYXQgbGVhc3QsIHRoZSBjcml0aWNhbCBsb2dpYyBJIG5lZWQgdG8gcmV2aWV3IHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSdzIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlzc2VjdCB0aGlzIHNlY3Rpb24gYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcsIGhvdyBpdCdzIGJlaGF2aW5nLCBhbmQgaG9wZWZ1bGx5LCBJJ2xsIGZpbmQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4ODAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzoxMC41MDUxMDA4NTdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTQ1OlxcdFxcdFxcdHJldHVybiAxMDAwMDtcXG4zMTQ2OlxcdFxcbjMxNDc6XFx0XFx0dGhwID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9BTk9OX1RIUFMpICtcXG4zMTQ4OlxcdFxcdFxcdFxcdFxcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfU0hNRU1fVEhQUykgK1xcbjMxNDk6XFx0XFx0XFx0XFx0XFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9GSUxFX1RIUFMpO1xcbjMxNTA6XFx0XFx0cmV0dXJuIG11bHRfZnJhYyh0aHAsIDEwMDAwLCB0b3RhbF9wYWdlcyAtIGZyZWVfcGFnZXMpO1xcbjMxNTE6XFx0fVxcbjMxNTI6XFx0XFxuMzE1MzpcXHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuMzE1NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbjMxNTU6XFx0e1xcbjMxNTY6XFx0XFx0dTY0IG5vd19wc2lfdG90YWw7XFxuMzE1NzpcXHRcXG4zMTU4OlxcdFxcdHN3aXRjaCAoZ29hbC1cXHUwMDNlbWV0cmljKSB7XFxuMzE1OTpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxuMzE2MDpcXHRcXHRcXHQvKiBVc2VyIHNob3VsZCBhbHJlYWR5IHNldCBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlICovXFxuMzE2MTpcXHRcXHRcXHRicmVhaztcXG4zMTYyOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbjMxNjM6XFx0XFx0XFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG4zMTY0OlxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKSB7XFxuMzE2NTpcXHRcXHRcXHRcXHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXFxuMzE2NjpcXHRcXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuZ29hbF90dW5lciA9PVxcbjMxNjc6XFx0XFx0XFx0XFx0XFx0XFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcXG4zMTY4OlxcdFxcdFxcdFxcdFxcdC8qIGFuIGFjaGlldmVkIHNjb3JlIHdvdWxkIHplcm8gdGhlIHRlbXBvcmFsIHF1b3RhICovXFxuMzE2OTpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMDtcXG4zMTcwOlxcdFxcdFxcdFxcdGVsc2VcXG4zMTcxOlxcdFxcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuMzE3MjpcXHRcXHRcXHR9IGVsc2Uge1xcbjMxNzM6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxcbjMxNzQ6XFx0XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxuMzE3NTpcXHRcXHRcXHR9XFxuMzE3NjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XFxuMzE3NzpcXHRcXHRcXHRicmVhaztcXG4zMTc4OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG4zMTc5OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcXG4zMTgwOlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XFxuMzE4MTpcXHRcXHRcXHRicmVhaztcXG4zMTgyOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbjMxODM6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxuMzE4NDpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcXG4zMTg1OlxcdFxcdFxcdGJyZWFrO1xcbjMxODY6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQOlxcbjMxODc6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlA6XFxuMzE4ODpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXFxuMzE4OTpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XFxuMzE5MDpcXHRcXHRcXHRicmVhaztcXG4zMTkxOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XFxuMzE5MjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsXFxuMzE5MzpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VuaWQpO1xcbjMxOTQ6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA3OjEwLjUwNTI5Mzg4N1oiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODQ0ODAwNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUXVvdGEgR29hbCBBZGp1c3RtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCwgSSBzZWUgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgaXMgYFU2NF9NQVhgLiBFc3NlbnRpYWxseSwgdGhpcyBtZWFucyB3ZSBoYXZlbid0IHJlY29yZGVkIGEgcHJldmlvdXMgUFNJIG1lYXN1cmVtZW50IGZvciB0aGlzIGdvYWwsIGEgc2VudGluZWwgdmFsdWUgZGVub3RpbmcgdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEl0J3MgY3J1Y2lhbCB0byByZW1lbWJlciB0aGF0IHRoaXMgKmlzbid0KiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2U7IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRlZmluZWQgc3RhdGUuXG5cblByZXZpb3VzbHksIHdoZW4gZW5jb3VudGVyaW5nIHRoaXMgXCJ1bmluaXRpYWxpemVkXCIgc3RhdGUsIHdlIHNpbXBseSBzZXQgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgdG8gYGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlYC4gTm93LCB3ZSBoYXZlIGEgY29uZGl0aW9uYWw6XG5cbmBgYGNcbmlmIChzLVx1MDAzZXF1b3RhLmdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbiAgICBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSAwO1xuZWxzZVxuICAgIGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuYGBgXG5cblNvLCB0aGUga2V5IGRpZmZlcmVuY2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIHRlbXBvcmFsIHR1bmVyLiBJZiBgcy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyYCBpcyBzZXQgdG8gYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLCB3ZSBpbml0aWFsaXplIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIHRvIDAuIE90aGVyd2lzZSwgd2Uga2VlcCB0aGUgcHJldmlvdXMgYmVoYXZpb3Igb2Ygc2V0dGluZyBpdCB0byB0aGUgdGFyZ2V0LiBUaGlzIGluZGljYXRlcyBhIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IgYWRqdXN0bWVudCBzdHJhdGVneSBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0dW5lciBpbiB1c2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGVtcG9yYWwgdHVuaW5nIGVudGFpbHMuIElzIGl0IHN0YXJ0aW5nIGZyZXNoLCBvciBpbnRyb2R1Y2luZyBhIGJpYXM/XG5cblNpbmNlIGBnb2FsYCBpcyBhbGxvY2F0ZWQgdmlhIGBkYW1vc19uZXdfcXVvdGFfZ29hbCgpYCwgcHJvYmFibHkgdXNpbmcgYGttYWxsb2MoKWAsIEkgd2FudCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBkYW1vc19uZXdfcXVvdGFfZ29hbCgpYCB0byBzZWUgaG93IGl0J3MgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhpcyBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgZ29hbGAgaXMgYmVpbmcgbWFuYWdlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBsdXJraW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzoxNy4zNTAwOTcxODlaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODU6XFx0XFx0ZGFtb3NfZnJlZV9maWx0ZXIoZik7XFxuIDY4NjpcXHR9XFxuIDY4NzpcXHRcXG4gNjg4OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG4gNjg5OlxcdFxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbiA2OTA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXFxuIDY5MTpcXHR7XFxuIDY5MjpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0Z29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcXG4gNjk1OlxcdFxcdGlmICghZ29hbClcXG4gNjk2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2OTc6XFx0XFx0Z29hbC1cXHUwMDNlbWV0cmljID0gbWV0cmljO1xcbiA2OTg6XFx0XFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlO1xcbiA2OTk6XFx0XFx0aWYgKG1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXFxuIDcwMDpcXHRcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XFxuIDcwMTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Z29hbC1cXHUwMDNlbGlzdCk7XFxuIDcwMjpcXHRcXHRyZXR1cm4gZ29hbDtcXG4gNzAzOlxcdH1cXG4gNzA0OlxcdFxcbiA3MDU6XFx0dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbiA3MDY6XFx0e1xcbiA3MDc6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Zy1cXHUwMDNlbGlzdCwgXFx1MDAyNnEtXFx1MDAzZWdvYWxzKTtcXG4gNzA4OlxcdH1cXG4gNzA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzoxNy4zNTAzNjY4MzlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU1MjQ0OTAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZGFtb3NfcXVvdGFfZ29hbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0IGZpZWxkcyBpdCdzIHBhY2tpbmcuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlLiBXaGF0IGRvZXMgaXQgY29udGFpbiwgYW5kIGhvdyBpcyBpdCBvcmdhbml6ZWQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBzaXplLCB0aW1lc3RhbXBzLCB1c2FnZSBpbmRpY2F0b3JzLCBvciBtYXliZSBzb21lIGZsYWdzPyBCYXNlZCBvbiBpdHMgbmFtZSBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiB0YXJnZXQgcXVvdGEsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBEQU1PUyBjb250ZXh0OyBzbyBJIGltYWdpbmUgSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgcmVzb3VyY2UgdXNhZ2UgdGFyZ2V0cy4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIGRhdGEgdHlwZXMsIHRoZWlyIGxheW91dCwgYW5kIGFueSBwb3RlbnRpYWwgYWxpZ25tZW50IGNvbmNlcm5zLiBLbm93aW5nIHRoZSBmaWVsZHMnIHNlbWFudGljcyB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVuZGVkIHVzZSBhbmQgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBEQU1PUyBzdWJzeXN0ZW1zLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA3OjIwLjkwMjgxODg0NFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NDkwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xNjE9ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk3LSAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxOTg6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xOTktXFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA3OjIxLjAwMTQ3NzQ4OFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjE3MzkzMDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBIZWFkZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEYXRhIEFjY2VzcyBNT05pdG9yIChEQU1PTikgZnJhbWV3b3JrIHdvcmtzLCBhbmQgSSB0aGluayBzdGFydGluZyB3aXRoIHRoZSBjb3JlIGhlYWRlciBmaWxlIGlzIHRoZSByaWdodCBtb3ZlLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIG92ZXIgdG8gYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGFuZCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgbmVpZ2hib3Job29kIGFyb3VuZCBsaW5lIDE5OC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1vc3QgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYSBtb2R1bGUgYmVnaW4gdG8gc3VyZmFjZS4gSSdtIGhvcGluZyB0byBmaW5kIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgb2YgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgYW5kIGhvdyBpdCB0cmFja3MgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucy4gVGhpcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBwb2ludHMgb2YgaXRzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzg5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDc6MjMuNjE4ODczNjI0WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0ICogSWYgQG1ldHJpYyBpcyBEQU1PU19RVU9UQV9OT0RFX01FTUNHX3tVU0VELEZSRUV9X0JQLCBAbmlkIGFuZCBAbWVtY2dfaWRcXG4gMTk2OlxcdCAqIHJlcHJlc2VudHMgdGhlIG5vZGUgaWQgYW5kIHRoZSBjZ3JvdXAgdG8gYWNjb3VudCB0aGUgdXNlZCBtZW1vcnkgZm9yLlxcbiAxOTc6XFx0ICovXFxuIDE5ODpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XFxuIDE5OTpcXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcXG4gMjAwOlxcdFxcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlO1xcbiAyMDE6XFx0XFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xcbiAyMDI6XFx0XFx0LyogbWV0cmljLWRlcGVuZGVudCBmaWVsZHMgKi9cXG4gMjAzOlxcdFxcdHVuaW9uIHtcXG4gMjA0OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDIwNTpcXHRcXHRcXHRcXHRpbnQgbmlkO1xcbiAyMDY6XFx0XFx0XFx0XFx0dTY0IG1lbWNnX2lkO1xcbiAyMDc6XFx0XFx0XFx0fTtcXG4gMjA4OlxcdC8qIHByaXZhdGU6ICovXFxuIDIwOTpcXHRcXHRcXHQvKiBMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSSAqL1xcbiAyMTA6XFx0XFx0XFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRcXHR9O1xcbiAyMTM6XFx0LyogcHJpdmF0ZTogKi9cXG4gMjE0OlxcdFxcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIDIxNTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIDIxNjpcXHR9O1xcbiAyMTc6XFx0XFxuIDIxODpcXHQvKipcXG4gMjE5OlxcdCAqIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciAtIEdvYWwtYmFzZWQgcXVvdGEgdHVuaW5nIGxvZ2ljLlxcbiAyMjA6XFx0ICogQERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVDpcXHRBaW0gbG9uZyB0ZXJtIGNvbnNpc3RlbnQgcXVvdGEuXFxuIDIyMTpcXHQgKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTDpcXHRBaW0gemVybyBxdW90YSBhc2FwLlxcbiAyMjI6XFx0ICovXFxuIDIyMzpcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xcbiAyMjQ6XFx0XFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNULFxcbiAyMjU6XFx0XFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCxcXG4gMjI2OlxcdH07XFxuIDIyNzpcXHRcXG4gMjI4OlxcdC8qKlxcbiAyMjk6XFx0ICogc3RydWN0IGRhbW9zX3F1b3RhIC0gQ29udHJvbHMgdGhlIGFnZ3Jlc3NpdmVuZXNzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA3OjIzLjYxODk2ODU4NFoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzU2NzA0Mzg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgREFNT04gUXVvdGEgR29hbCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBzdWJ0bHkgdHdlYWtzIGhvdyB0aGUgYGN1cnJlbnRfdmFsdWVgIGlzIGNvbXB1dGVkIHdpdGhpbiB0aGUgREFNT04gcXVvdGEgc3lzdGVtLiBJdCdzIGZvY3VzZWQgb24gdGhlIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCBmaWVsZCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBwYXJ0IG9mIGEgdW5pb24gd2l0aCBgbmlkYCBhbmQgYG1lbWNnX2lkYC4gSXQncyBhIGtleSB2YWx1ZSBmb3IgdHJhY2tpbmcgbWVtb3J5IFBTSS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IHRoZSBjYXNlIHdoZXJlIGBtZXRyaWNgIGlzIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCB0aGUgYGxhc3RfcHNpX3RvdGFsYCBoYXMgdGhlIHNlbnRpbmVsIHZhbHVlIGBVNjRfTUFYYCwgbWVhbmluZyBpdCBoYXNuJ3QgYmVlbiBtZWFzdXJlZCB5ZXQuIFRoYXQgaXMgaW5pdGlhbGl6ZWQgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLlxuXG5JbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCwgdGhlIGV4aXN0aW5nIGNvZGUgY2hlY2tzIGlmIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCAqaXMqIHRoaXMgc2VudGluZWwgdmFsdWUuIElmIGl0ICppcyosIHRoZW4gYGN1cnJlbnRfdmFsdWVgIGlzIHNldCB0byBlaXRoZXIgMCAoaWYgdXNpbmcgdGhlIHRlbXBvcmFsIHR1bmVyKSBvciBgdGFyZ2V0X3ZhbHVlYCAob3RoZXJ3aXNlKS4gVGhlIHVwZGF0ZWQgcGF0Y2ggc2VlbXMgdG8gYmUgYWx0ZXJpbmcgdGhlIGxvZ2ljIGZvciBjYWxjdWxhdGluZyBjdXJyZW50X3ZhbHVlIG9ubHkgd2hlbiB0aGUgc2VudGluZWwgaXMgcHJlc2VudC4gQWZ0ZXIgdGhhdCwgaXQgdXBkYXRlcyBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgdG8gdGhlIGBub3dfcHNpX3RvdGFsYC5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBpc3N1ZXMgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgb3IgZXhwb3NlcyBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UgaW4gYSB3YXkgdGhhdCBjcmVhdGVzIHZ1bG5lcmFiaWxpdGllcy4gVGhlIGNvZGUgSeKAmW0gZmFtaWxpYXIgd2l0aCBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCAqc2hvdWxkbid0KiBkbyB0aGF0LiBUaGUgYWZmZWN0ZWQgdmFsdWVzIOKAkyBgcy1cdTAwM2VxdW90YS5nb2FsX3R1bmVyYCBhbmQgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAg4oCTIGFyZSBpbnRlcm5hbCB0byBEQU1PTidzIGFjY291bnRpbmcgYW5kIHRoZSBxdW90YSBzeXN0ZW0uIEV2ZW4gaWYgdGhlc2UgYXJlIHJlYWQgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLCBsZXQncyBkb3VibGUtY2hlY2sgaG93IGBjdXJyZW50X3ZhbHVlYCBpcyBleHBvc2VkLiBUaGlzIHdpbGwgbmVlZCBmdXJ0aGVyIHJldmlldyBvZiBob3cgc3lzZnMgaGFuZGxlcyB0aGVzZSB2YWx1ZXMuIFRoZSBnb29kIG5ld3MgaXMsIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHN0cnVjdHVyZXMgb3IgZmllbGRzIHBhc3NlZCB0byB1c2VyIHNwYWNlLlxuXG5UaGUgaW5jbHVzaW9uIG9mIHRoZSBLVW5pdCB0ZXN0IGBkYW1vc190ZXN0X3NldF9lZmZlY3RpdmVfcXVvdGFfdGVtcG9yYWxfcHNpYCBpcyBleGNlbGxlbnQ7IGl0J3MgZXhhY3RseSB3aGF0IEknZCBleHBlY3QgdG8gc2VlIHRvIGNvdmVyIHRoZSBjaGFuZ2VkIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTI1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDc6NDEuMTg2MDE1ODg5WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxNDI4ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF92YWx1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEyMTU9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjIyLVxcdGlmIChkc3QtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxcbm1tL2RhbW9uL2NvcmUuYzoxMjIzOlxcdFxcdGRzdC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cXHUwMDNlY3VycmVudF92YWx1ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMTIyNC1cXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzEzNz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNTItXFxubW0vZGFtb24vY29yZS5jOjMxNTM6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0zMTU0LVxcdFxcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzE1OS1cXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxubW0vZGFtb24vY29yZS5jOjMxNjA6XFx0XFx0LyogVXNlciBzaG91bGQgYWxyZWFkeSBzZXQgZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSAqL1xcbm1tL2RhbW9uL2NvcmUuYy0zMTYxLVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNjgtXFx0XFx0XFx0XFx0LyogYW4gYWNoaWV2ZWQgc2NvcmUgd291bGQgemVybyB0aGUgdGVtcG9yYWwgcXVvdGEgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzE2OTpcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMzE3MC1cXHRcXHRcXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjMxNzE6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMzE3Mi1cXHRcXHR9IGVsc2Uge1xcbm1tL2RhbW9uL2NvcmUuYzozMTczOlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC1cXG5tbS9kYW1vbi9jb3JlLmMtMzE3NC1cXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTc5LVxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzE4MDpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtX2JwKGdvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMTgxLVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxODMtXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxubW0vZGFtb24vY29yZS5jOjMxODQ6XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTMxODUtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzE4Ny1cXHRjYXNlIERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzE4ODpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXFxubW0vZGFtb24vY29yZS5jLTMxODktXFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxOTEtXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzE5MjpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsXFxubW0vZGFtb24vY29yZS5jLTMxOTMtXFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbmlkKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTk1LVxcdGNhc2UgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMTk2OlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzE5Ny1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjA0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjEwLVxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzIxMTpcXHRcXHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjEyLVxcdFxcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcXG5tbS9kYW1vbi9jb3JlLmM6MzIxMzpcXHRcXHRcXHRcXHRtdWx0X2ZyYWMoZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSwgMTAwMDAsXFxubW0vZGFtb24vY29yZS5jLTMyMTQtXFx0XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKSk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ2LVxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDc6XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDgtXFx0XFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEsIGdvYWwpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTk6XFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVxcdGludCBuaWQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMyMz1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzMi1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzMzpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzQtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzOTpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQwLX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MjpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQzLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0Ni1cXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0NzpcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDgtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQyMj1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjY6XFx0XFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjctXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzND1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzYtXFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNzpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzOC1cXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ci5hdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3MC1cXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NzE6XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NzItXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODA0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTItXFx0aWYgKHNyYy1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxMzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlLCBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTQtXFx0c3dpdGNoIChkc3QtXFx1MDAzZW1ldHJpYykge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzMj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzYtXFx0XFx0LnRhcmdldF92YWx1ZSA9IDEwMDAsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgzNzpcXHRcXHQuY3VycmVudF92YWx1ZSA9IDEyMyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODM4LVxcdFxcdC5sYXN0X3BzaV90b3RhbCA9IDQ1NixcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDQtXFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODQ1OlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDYtXFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1MS1cXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gNzg5LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTI6XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAxMn0pO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTMtXFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTYtXFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDM0NSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODU3OlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gNjc4LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTgtXFx0XFx0XFx0Lm5pZCA9IDksXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODYzLVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSAxMixcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODY0OlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjUtXFx0XFx0XFx0Lm5pZCA9IDYsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODcwLVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA0NTYsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg3MTpcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDU2NyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODcyLVxcdFxcdFxcdC5uaWQgPSA2LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3OC1cXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gODkwLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Nzk6XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSA5MDEsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4MC1cXHRcXHRcXHQubmlkID0gMTAsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODg2LVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSAyMzQsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg4NzpcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDM0NSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODg4LVxcdFxcdFxcdC5sYXN0X3BzaV90b3RhbCA9IDU2NyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDc6NDEuMzAzMTY0OFoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDM3Mzc4MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgRml4IEFuYWx5c2lzKipcblxuT2theSwgc28gdGhpcyBjaGFuZ2UgaXMgYWxsIGFib3V0IGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgYW5kIHRoYXQgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGZ1bmN0aW9uLiBXaGF0J3MgaGFwcGVuaW5nIGlzIHRoYXQgd2hlbiBjYWxjdWxhdGluZyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AsIGFuZCBjcnVjaWFsbHksIGJlZm9yZSB0aGUgZmlyc3QgUFNJIHNhbXBsZSBpcyBldmVuIHJlY29yZGVkIChtZWFuaW5nIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCBpcyBzdGlsbCBhdCBpdHMgaW5pdGlhbCBgVTY0X01BWGAgdmFsdWUpLCB0aGUgY29kZSBjaGVja3MgaWYgdGhlIGdvYWwgdHVuZXIgaXMgc2V0IHRvIGBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMYC4gSWYgaXQgaXMsIHRoZW4gYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgZ2V0cyBzZXQgdG8gYDBgIGluc3RlYWQgb2YgYGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlYC4gQSBLVW5pdCB0ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIHZlcmlmeSB0aGlzIHNwZWNpZmljIGJlaGF2aW9yLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24sIGFzIGFsd2F5czogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlza3M/IFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3cml0ZXMsIGluZm9ybWF0aW9uIGxlYWtzPyBMZXQncyBicmVhayBpdCBkb3duOlxuXG4qICAgRmlyc3QsIGBsYXN0X3BzaV90b3RhbGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVTY0X01BWGAgd2hlbiBhIGdvYWwgaXMgY3JlYXRlZCBvciBjb21taXR0ZWQsIHdoaWNoIGlzIHRoZSBzZW50aW5lbCB2YWx1ZSB3ZSBhcmUgdGFsa2luZyBhYm91dC5cbiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGludHJvZHVjZWQsIHNvIHRoYXQncyBhIGNoZWNrLlxuKiAgIFRoZXJlJ3Mgbm8gY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UgaGFwcGVuaW5nIGhlcmUuXG4qICAgTm8gcG9pbnRlcnMgb3IgYnVmZmVyIGFjY2Vzc2VzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byByZWFkaW5nIG9mIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZWl0aGVyLlxuKiAgIEtNU0FOIHNob3VsZG4ndCBiZSBjb25jZXJuZWQsIGJlY2F1c2UgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2Ugb3IgYWZmZWN0IGFueSBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBzdGFuZGFyZCBzYW5pdGl6ZXJzIChsaWtlIEtBU0FOKSBhbmQgdGhlIEtVbml0IHRlc3RzIGFyZSBzdWZmaWNpZW50IGhlcmUuXG5cblRvIHJlY2FwIGFuZCBtYWtlIHN1cmUgSSd2ZSBjb3ZlcmVkIGV2ZXJ5dGhpbmcsIHRoaXMgcGF0Y2ggZml4ZXMgdGhlIGluaXRpYWwgY2FsY3VsYXRpb24gb2YgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgd2hlbiB1c2luZyBgREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTGAgKmJlZm9yZSogdGhlIGZpcnN0IFBTSSBtZWFzdXJlbWVudCBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgaXMgdGFrZW4uIFRoYXQgYFU2NF9NQVhgIHZhbHVlIGlzIGEgZGVsaWJlcmF0ZSBzZW50aW5lbCwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZC4gTm8gdXNlciBzcGFjZSBpbnRlcmFjdGlvbiBpcyBhZmZlY3RlZCwgYW5kIG5vdGhpbmcgcmVsYXRlZCB0byBidWZmZXIgYm91bmRzIG9yIGFsbG9jYXRpb24gbG9naWMgY2hhbmdlcy4gT2theSwgdGltZSB0byBkb3VibGUtY2hlY2sgZXZlcnl0aGluZyBvbmUgbGFzdCB0aW1lLiBOb3cgSSBjYW4gaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDcxLCJPdXRwdXRUb2tlbnMiOjI2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzo1MS42NzY5NTExMloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04ncyBxdW90YSBnb2FsIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBtZXRyaWNzIGFuZCBhZGRzIGEgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0LiBTcGVjaWZpY2FsbHksIHdoZW4gYGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVhgIChhIGRvbWFpbi1sZXZlbCBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gUFNJIHNhbXBsZSBoYXMgeWV0IGJlZW4gcmVjb3JkZWQpLCBpdCBzZXRzIGBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMGAgaW5zdGVhZCBvZiBgZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlYCBpZiB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLlxcblxcbkRlc3BpdGUgdGhlIGNvZGUgY29tbWVudCByZWZlcnJpbmcgdG8gXFxcInVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWxcXFwiLCB0aGlzIGlzIHB1cmVseSBhIHNlbWFudGljIHNlbnRpbmVsIHZhbHVlOiBgbGFzdF9wc2lfdG90YWxgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFU2NF9NQVhgIHVwb24gYWxsb2NhdGlvbiBvciBjb21taXQgKGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmApLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBhY2Nlc3NlZCBvciBleHBvc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04ncyBxdW90YSBnb2FsIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBtZXRyaWNzIGFuZCBhZGRzIGEgY29ycmVzcG9uZGluZyBLVW5pdCB0ZXN0LiBTcGVjaWZpY2FsbHksIHdoZW4gYGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVhgIChhIGRvbWFpbi1sZXZlbCBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gUFNJIHNhbXBsZSBoYXMgeWV0IGJlZW4gcmVjb3JkZWQpLCBpdCBzZXRzIGBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gMGAgaW5zdGVhZCBvZiBgZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlYCBpZiB0aGUgdHVuZXIgaXMgYERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUxgLlxcblxcbkRlc3BpdGUgdGhlIGNvZGUgY29tbWVudCByZWZlcnJpbmcgdG8gXFxcInVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWxcXFwiLCB0aGlzIGlzIHB1cmVseSBhIHNlbWFudGljIHNlbnRpbmVsIHZhbHVlOiBgbGFzdF9wc2lfdG90YWxgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFU2NF9NQVhgIHVwb24gYWxsb2NhdGlvbiBvciBjb21taXQgKGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmApLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBhY2Nlc3NlZCBvciBleHBvc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sdmq[1] Phase: Succeeded StartedAt: 2026-09-15 07:08:03 +0000 UTC FinishedAt: 2026-09-15 07:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 07:08:03 +0000 UTC FinishedAt: 2026-09-15 07:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2] Phase: Succeeded StartedAt: 2026-09-15 07:08:03 +0000 UTC FinishedAt: 2026-09-15 10:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 07:08:03 +0000 UTC FinishedAt: 2026-09-15 10:56:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 07:08:03 +0000 UTC FinishedAt: 2026-09-15 07:08:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 07:08:03 +0000 UTC FinishedAt: 2026-09-15 07:08:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow2sdmq/series-workflow2sdmq-convert-artifact-2233988370/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 07:08:13 +0000 UTC FinishedAt: 2026-09-15 07:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 07:08:13 +0000 UTC FinishedAt: 2026-09-15 07:26:45 +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:*c40fd071-45c5-472d-819d-c296b7cb1b0b,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-workflow2sdmq/series-workflow2sdmq-convert-artifact-2233988370/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": "6fde1cee-9903-4364-bc51-5393ffa75b0d", "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-workflow2sdmq/series-workflow2sdmq-build-action-356677264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 07:08:13 +0000 UTC FinishedAt: 2026-09-15 07:26:35 +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:*c40fd071-45c5-472d-819d-c296b7cb1b0b,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-workflow2sdmq/series-workflow2sdmq-convert-artifact-2233988370/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": "6fde1cee-9903-4364-bc51-5393ffa75b0d", "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-workflow2sdmq/series-workflow2sdmq-build-action-356677264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 07:26:45 +0000 UTC FinishedAt: 2026-09-15 07:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 07:26:45 +0000 UTC FinishedAt: 2026-09-15 07:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 07:26:45 +0000 UTC FinishedAt: 2026-09-15 07:26:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 07:26:45 +0000 UTC FinishedAt: 2026-09-15 07:26:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow2sdmq/series-workflow2sdmq-convert-artifact-670806829/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 07:26:55 +0000 UTC FinishedAt: 2026-09-15 07:29:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 07:26:55 +0000 UTC FinishedAt: 2026-09-15 07:28:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fde1cee-9903-4364-bc51-5393ffa75b0d,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-workflow2sdmq/series-workflow2sdmq-build-action-356677264/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-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 07:29:03 +0000 UTC FinishedAt: 2026-09-15 07:29:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 07:29:03 +0000 UTC FinishedAt: 2026-09-15 07:29:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 07:29:03 +0000 UTC FinishedAt: 2026-09-15 07:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 07:29:03 +0000 UTC FinishedAt: 2026-09-15 07:46:13 +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:*c40fd071-45c5-472d-819d-c296b7cb1b0b,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-workflow2sdmq/series-workflow2sdmq-convert-artifact-670806829/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": "f68df654-025d-4def-9234-8ee334c81f7b", "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-workflow2sdmq/series-workflow2sdmq-build-action-423622537/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 07:29:03 +0000 UTC FinishedAt: 2026-09-15 07:46:03 +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:*c40fd071-45c5-472d-819d-c296b7cb1b0b,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-workflow2sdmq/series-workflow2sdmq-convert-artifact-670806829/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": "f68df654-025d-4def-9234-8ee334c81f7b", "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-workflow2sdmq/series-workflow2sdmq-build-action-423622537/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 07:46:13 +0000 UTC FinishedAt: 2026-09-15 07:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 07:46:13 +0000 UTC FinishedAt: 2026-09-15 07:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 07:46:13 +0000 UTC FinishedAt: 2026-09-15 07:48:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 07:46:13 +0000 UTC FinishedAt: 2026-09-15 07:47:58 +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:*f68df654-025d-4def-9234-8ee334c81f7b,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-workflow2sdmq/series-workflow2sdmq-build-action-423622537/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-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 07:48:08 +0000 UTC FinishedAt: 2026-09-15 10:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 07:48:08 +0000 UTC FinishedAt: 2026-09-15 10:56:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},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:*6fde1cee-9903-4364-bc51-5393ffa75b0d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f68df654-025d-4def-9234-8ee334c81f7b,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-workflow2sdmq/series-workflow2sdmq-build-action-356677264/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-workflow2sdmq/series-workflow2sdmq-build-action-423622537/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 07:48:08 +0000 UTC FinishedAt: 2026-09-15 07:48:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 07:48:08 +0000 UTC FinishedAt: 2026-09-15 07:48:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},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-workflow2sdmq/series-workflow2sdmq-convert-artifact-606784402/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 07:48:08 +0000 UTC FinishedAt: 2026-09-15 07:48:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 07:48:08 +0000 UTC FinishedAt: 2026-09-15 07:48:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 07:48:08 +0000 UTC FinishedAt: 2026-09-15 07:48:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 07:48:18 +0000 UTC FinishedAt: 2026-09-15 10:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sdmq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_quota_goal_current_value","damos_quota_score","damos_goal_tune_esz_bp_temporal","damos_set_effective_quota","damos_adjust_quota"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b7fee0cd63a958580fc652ac2cb7be0d545f61aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"d9c11db9-af53-474d-9f8c-d70bccb18b2e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 07:48:18 +0000 UTC FinishedAt: 2026-09-15 10:56:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fde1cee-9903-4364-bc51-5393ffa75b0d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f68df654-025d-4def-9234-8ee334c81f7b,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-workflow2sdmq/series-workflow2sdmq-build-action-356677264/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-workflow2sdmq/series-workflow2sdmq-build-action-423622537/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-workflow2sdmq/series-workflow2sdmq-convert-artifact-606784402/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,}