Name: series-workflowktnrk Phase: Succeeded StartedAt: 2026-08-11 21:04:36 +0000 UTC FinishedAt: 2026-08-12 01:14:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[0] Phase: Succeeded StartedAt: 2026-08-11 21:04:36 +0000 UTC FinishedAt: 2026-08-11 21:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 21:04:36 +0000 UTC FinishedAt: 2026-08-11 21:24:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED", "BLK_CGROUP_IOCOST", "BLK_CGROUP_IOLATENCY", "BLK_DEV_THROTTLING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED", "BLK_CGROUP_IOCOST", "BLK_CGROUP_IOLATENCY", "BLK_DEV_THROTTLING" ], "series_id": "ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blkg_conf_prep" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7SU9TQ0hFRF9CRlEmIzM0OywKICAgICYjMzQ7QkZRX0dST1VQX0lPU0NIRUQmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0NPU1QmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0xBVEVOQ1kmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrZ19jb25mX3ByZXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnIGluIGByYWRpeF90cmVlX3ByZWxvYWRgIGZyb20gYEdGUF9LRVJORUxgIHRvIGBHRlBfTk9JT2AgdG8gbWF0Y2ggdGhlIHByZWNlZGluZyBgYmxrZ19hbGxvY2AgY2FsbCBhbmQgYXZvaWQgcG90ZW50aWFsIG1lbW9yeSByZWNsYWltIGRlYWRsb2NrcyBpbiB0aGUgYmxvY2sgbGF5ZXIuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGxvY2tpbmcvcmVjbGFpbSBpc3N1ZSAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAgb3Igc3RhbmRhcmQgdGVzdGluZykgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRlYWRsb2NrIGluIGBibGtnX2NvbmZfcHJlcGAgYnkgY2hhbmdpbmcgdGhlIGFsbG9jYXRpb24gY29udGV4dCBmcm9tIGBHRlBfS0VSTkVMYCB0byBgR0ZQX05PSU9gIGR1cmluZyBgcmFkaXhfdHJlZV9wcmVsb2FkYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBjZ3JvdXAgY29uZmlndXJhdGlvbiBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGQxOWRmN2Q2NTJlZjY4ZGRhZTUwNzJhNWFiOTU5OGJiNWU3ZDEwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIxOjIyOjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuaW5kZXggZDk2NzYxMjZjNWI1ZC4uYjk4MWE4MGJiZDk0MyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNncm91cC5jXG5AQCAtODY3LDcgJiM0Mzs4NjcsNiBAQCBpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxuIFx0XHRcdHBhcmVudCA9IGJsa2NnX3BhcmVudChwYXJlbnQpO1xuIFx0XHR9XG4gXG4tXHRcdC8qIERyb3AgbG9ja3MgdG8gZG8gbmV3IGJsa2cgYWxsb2NhdGlvbiB3aXRoIEdGUF9LRVJORUwuICovXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0XHRuZXdfYmxrZyA9IGJsa2dfYWxsb2MocG9zLCBkaXNrLCBHRlBfTk9JTyk7XG5AQCAtODc2LDcgJiM0Mzs4NzUsNyBAQCBpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxuIFx0XHRcdGdvdG8gZmFpbF9leGl0O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCkpIHtcbiYjNDM7XHRcdGlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX05PSU8pKSB7XG4gXHRcdFx0YmxrZ19mcmVlKG5ld19ibGtnKTtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZmFpbF9leGl0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JGUV9HUk9VUF9JT1NDSEVEJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19ERVZfVEhST1RUTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRlYWRsb2NrIGluIGBibGtnX2NvbmZfcHJlcGAgYnkgY2hhbmdpbmcgdGhlIGFsbG9jYXRpb24gY29udGV4dCBmcm9tIGBHRlBfS0VSTkVMYCB0byBgR0ZQX05PSU9gIGR1cmluZyBgcmFkaXhfdHJlZV9wcmVsb2FkYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBjZ3JvdXAgY29uZmlndXJhdGlvbiBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGQxOWRmN2Q2NTJlZjY4ZGRhZTUwNzJhNWFiOTU5OGJiNWU3ZDEwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDIxOjIyOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IGQ5Njc2MTI2YzViNWQuLmI5ODFhODBiYmQ5NDMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTg2Nyw3ICYjNDM7ODY3LDYgQEAgaW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCwKIAkJCXBhcmVudCA9IGJsa2NnX3BhcmVudChwYXJlbnQpOwogCQl9CiAKLQkJLyogRHJvcCBsb2NrcyB0byBkbyBuZXcgYmxrZyBhbGxvY2F0aW9uIHdpdGggR0ZQX0tFUk5FTC4gKi8KIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiAKIAkJbmV3X2Jsa2cgPSBibGtnX2FsbG9jKHBvcywgZGlzaywgR0ZQX05PSU8pOwpAQCAtODc2LDcgJiM0Mzs4NzUsNyBAQCBpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLAogCQkJZ290byBmYWlsX2V4aXQ7CiAJCX0KIAotCQlpZiAocmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpKSB7CiYjNDM7CQlpZiAocmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9OT0lPKSkgewogCQkJYmxrZ19mcmVlKG5ld19ibGtnKTsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGZhaWxfZXhpdDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBwYXRjaCBmbG9hdGluZyBhcm91bmQsIGFuZCBpdCYjMzk7cyBtYWtpbmcgYSBzZWVtaW5nbHkgc21hbGwgYnV0IHBvdGVudGlhbGx5IGNydWNpYWwgY2hhbmdlOiBzd2FwcGluZyBgR0ZQX0tFUk5FTGAgZm9yIGBHRlBfTk9JT2AgaW4gdGhlIGBibGtnX2NvbmZfcHJlcGAgZnVuY3Rpb24gd2l0aGluIGBibG9jay9ibGstY2dyb3VwLmNgLiBNeSBleHBlcnQgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGFkanVzdG1lbnQsIGxpa2VseSBhaW1lZCBhdCBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRleHQgaXNzdWUuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNjZW5hcmlvLCBhbmQgdGhlIGBibGstY2dyb3VwYCBhcmVhIGlzIGRlZmluaXRlbHkgb25lIHRvIGJlIGNhcmVmdWwgd2l0aC4gVGhpcyBuZWVkcyB0byBiZSB1bmRlcnN0b29kLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBibGtnX2NvbmZfcHJlcGAgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhbmQgd2h5IHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeSBhbmQgZWZmZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYz03NDc9RVhQT1JUX1NZTUJPTF9HUEwoX19ibGtnX3ByZmlsbF91NjQpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy03NTUtICogT25jZSBpbml0aWFsaXplZCwgQGN0eCBjYW4gYmUgdXNlZCB3aXRoIGJsa2dfY29uZl9vcGVuX2JkZXYoKSBhbmRcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3NTY6ICogYmxrZ19jb25mX3ByZXAoKS5cbmJsb2NrL2Jsay1jZ3JvdXAuYy03NTctICovXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTgxMT1FWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfb3Blbl9iZGV2KTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtODEzLS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjgxNDogKiBibGtnX2NvbmZfcHJlcCAtIHBhcnNlIGFuZCBwcmVwYXJlIGZvciBwZXItYmxrZyBjb25maWcgdXBkYXRlXG5ibG9jay9ibGstY2dyb3VwLmMtODE1LSAqIEBibGtjZzogdGFyZ2V0IGJsb2NrIGNncm91cFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjctICovXG5ibG9jay9ibGstY2dyb3VwLmM6ODI4OmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG5ibG9jay9ibGstY2dyb3VwLmMtODI5LVx0XHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzAtfVxuYmxvY2svYmxrLWNncm91cC5jOjkzMTpFWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfcHJlcCk7XG5ibG9jay9ibGstY2dyb3VwLmMtOTMyLVxuYmxvY2svYmxrLWNncm91cC5jLTkzMy0vKipcbmJsb2NrL2Jsay1jZ3JvdXAuYzo5MzQ6ICogYmxrZ19jb25mX3VucHJlcCAtIGNvdW50ZXJwYXJ0IG9mIGJsa2dfY29uZl9wcmVwKClcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzUtICogQGN0eDogYmxrZ19jb25mX2N0eCBpbml0aWFsaXplZCB3aXRoIGJsa2dfY29uZl9pbml0KClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODEyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBibGtnX2NvbmZfcHJlcGAqKgoKT2theSwgc28gYGJsa2dfY29uZl9wcmVwYCBpcyBleHBvcnRlZC4gVGhhdCBtZWFucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0g4oCTIGl0JiMzOTtzIGEgcHVibGljIGludGVyZmFjZSwgZXNzZW50aWFsbHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgaW1wYWN0LiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGJlaW5nICpjYWxsZWQqPyBVbmRlcnN0YW5kaW5nIGl0cyB1c2FnZSBpcyBjcnVjaWFsIHRvIGdyYXNwaW5nIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZ19jb25mX3ByZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jPTEwNTk9c3RhdGljIHNzaXplX3QgYmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMTA3NC1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMDc1Olx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFx1MDAyNmJsa2NnX3BvbGljeV9iZnEsIFx1MDAyNmN0eCk7XG5ibG9jay9iZnEtY2dyb3VwLmMtMTA3Ni1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTc0Nz1FWFBPUlRfU1lNQk9MX0dQTChfX2Jsa2dfcHJmaWxsX3U2NCk7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTc1NS0gKiBPbmNlIGluaXRpYWxpemVkLCBAY3R4IGNhbiBiZSB1c2VkIHdpdGggYmxrZ19jb25mX29wZW5fYmRldigpIGFuZFxuYmxvY2svYmxrLWNncm91cC5jOjc1NjogKiBibGtnX2NvbmZfcHJlcCgpLlxuYmxvY2svYmxrLWNncm91cC5jLTc1Ny0gKi9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9ODExPUVYUE9SVF9TWU1CT0xfR1BMKGJsa2dfY29uZl9vcGVuX2JkZXYpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy04MTMtLyoqXG5ibG9jay9ibGstY2dyb3VwLmM6ODE0OiAqIGJsa2dfY29uZl9wcmVwIC0gcGFyc2UgYW5kIHByZXBhcmUgZm9yIHBlci1ibGtnIGNvbmZpZyB1cGRhdGVcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MTUtICogQGJsa2NnOiB0YXJnZXQgYmxvY2sgY2dyb3VwXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTgyNy0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzo4Mjg6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjktXHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTkzMC19XG5ibG9jay9ibGstY2dyb3VwLmM6OTMxOkVYUE9SVF9TWU1CT0xfR1BMKGJsa2dfY29uZl9wcmVwKTtcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzItXG5ibG9jay9ibGstY2dyb3VwLmMtOTMzLS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjkzNDogKiBibGtnX2NvbmZfdW5wcmVwIC0gY291bnRlcnBhcnQgb2YgYmxrZ19jb25mX3ByZXAoKVxuYmxvY2svYmxrLWNncm91cC5jLTkzNS0gKiBAY3R4OiBibGtnX2NvbmZfY3R4IGluaXRpYWxpemVkIHdpdGggYmxrZ19jb25mX2luaXQoKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMjM9aW50IGJsa2dfY29uZl9vcGVuX2JkZXYoc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjQtXHRfX2NvbmRfYWNxdWlyZXMoMCwgXHUwMDI2Y3R4LVx1MDAzZWJkZXYtXHUwMDNlYmRfcXVldWUtXHUwMDNlcnFfcW9zX211dGV4KTtcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMjU6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjYtXHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jPTMxMzg9c3RhdGljIHNzaXplX3QgaW9jX3dlaWdodF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtMzE4MC1cbmJsb2NrL2Jsay1pb2Nvc3QuYzozMTgxOlx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFx1MDAyNmJsa2NnX3BvbGljeV9pb2Nvc3QsIFx1MDAyNmN0eCk7XG5ibG9jay9ibGstaW9jb3N0LmMtMzE4Mi1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTgyNz1zdGF0aWMgc3NpemVfdCBpb2xhdGVuY3lfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04NTQtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6ODU1Olx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3ksIFx1MDAyNmN0eCk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODU2LVx0aWYgKHJldClcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMzUyPXN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzcyLVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTM3MzpcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLCBcdTAwMjZjdHgpO1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTM3NC1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTU0MD1zdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE1NjAtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNTYxOlx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIFx1MDAyNmN0eCk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNTYyLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTU2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIHNwb3R0ZWQgdGhpcyBwaWVjZSBvZiBjb2RlIOKAkyBpdCYjMzk7cyB1c2VkIGluIGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLCBgaW9jX3dlaWdodF93cml0ZWAsIGBpb2xhdGVuY3lfc2V0X2xpbWl0YCwgYHRnX3NldF9jb25mYCwgYW5kIGB0Z19zZXRfbGltaXRgLiBSaWdodCBhd2F5LCBJIHJlY29nbml6ZSB0aGVzZSBhcyBjZ3JvdXAgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYmxvY2sgZGV2aWNlcy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGtub3cgdGhpcyBpcyBwcmltZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBibG9jayBkZXZpY2UgY2dyb3VwIGNvbmZpZ3VyYXRpb25zIG1lYW5zIGl04oCZcyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGNvcmUgYXJlYSB0aGF0IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi4KCk5vdywgYmVmb3JlIEkgZGl2ZSBpbnRvIGZ1enppbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBldmVuIGNvbXBpbGVkIGluLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYmxvY2svYmxrLWNncm91cC5jYCDigJMgSSBzZWUgaXQmIzM5O3Mgb25seSBpbmNsdWRlZCB3aGVuIGBDT05GSUdfQkxLX0NHUk9VUGAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayB0aGUgYGJsb2NrL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gcHJvY2VlZCBjb25maWRlbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstY2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9MTg9b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHTElCKVx0JiM0Mzs9IGJzZy1saWIub1xuYmxvY2svTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0JMS19DR1JPVVApXHQmIzQzOz0gYmxrLWNncm91cC5vXG5ibG9jay9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQkxLX0NHUk9VUF9SV1NUQVQpXHQmIzQzOz0gYmxrLWNncm91cC1yd3N0YXQub1xuYmxvY2svTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICYjNDM7PSBibGstY2dyb3VwLWZjLWFwcGlkLm9cbmJsb2NrL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXHQmIzQzOz0gYmxrLXRocm90dGxlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBDT05GSUdfQkxLX0NHUk9VUGAsIGdvb2QuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW52b2x2ZWQuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBgYmxrZ19jb25mX3ByZXBgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYmxrZ19jb25mX3ByZXBgIGl0c2VsZiBhbmQgaXRzIGRpcmVjdCBjYWxsZXJzLCB3aGljaCBjb3VsZCBpbmNsdWRlIGZ1bmN0aW9ucyBsaWtlIGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLCBgaW9jX3dlaWdodF93cml0ZWAsIGBpb2xhdGVuY3lfc2V0X2xpbWl0YCwgYHRnX3NldF9jb25mYCwgYW5kIGB0Z19zZXRfbGltaXRgLiBCdXQgd2FpdCBhIG1pbnV0ZSwgdGhlIGNvZGUgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoYXQgYGJsa2dfY29uZl9wcmVwYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgbW9kaWZpZWQsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGBibGtnX2NvbmZfcHJlcGAgbW9yZSBjbG9zZWx5LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBibG9jay9ibGstY2dyb3VwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIG1vZGlmaWNhdGlvbiB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyODpcdGludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG4gODI5Olx0XHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXG4gODMwOlx0e1xuIDgzMTpcdFx0c3RydWN0IGdlbmRpc2sgKmRpc2s7XG4gODMyOlx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTtcbiA4MzM6XHRcdHN0cnVjdCBibGtjZ19ncSAqYmxrZztcbiA4MzQ6XHRcdGludCByZXQ7XG4gODM1Olx0XG4gODM2Olx0XHRpZiAoV0FSTl9PTl9PTkNFKCFjdHgtXHUwMDNlYmRldikpXG4gODM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgzODpcdFxuIDgzOTpcdFx0ZGlzayA9IGN0eC1cdTAwM2ViZGV2LVx1MDAzZWJkX2Rpc2s7XG4gODQwOlx0XHRxID0gZGlzay1cdTAwM2VxdWV1ZTtcbiA4NDE6XHRcbiA4NDI6XHRcdC8qIFByZXZlbnQgY29uY3VycmVudCB3aXRoIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCkgKi9cbiA4NDM6XHRcdG11dGV4X2xvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gODQ0Olx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4gODQ1Olx0XG4gODQ2Olx0XHRpZiAoIWJsa2NnX3BvbGljeV9lbmFibGVkKHEsIHBvbCkpIHtcbiA4NDc6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gODQ4Olx0XHRcdGdvdG8gZmFpbF91bmxvY2s7XG4gODQ5Olx0XHR9XG4gODUwOlx0XG4gODUxOlx0XHRibGtnID0gYmxrZ19sb29rdXAoYmxrY2csIHEpO1xuIDg1MjpcdFx0aWYgKGJsa2cpXG4gODUzOlx0XHRcdGdvdG8gc3VjY2VzcztcbiA4NTQ6XHRcbiA4NTU6XHRcdC8qXG4gODU2Olx0XHQgKiBDcmVhdGUgYmxrZ3Mgd2Fsa2luZyBkb3duIGZyb20gYmxrY2dfcm9vdCB0byBAYmxrY2csIHNvIHRoYXQgYWxsXG4gODU3Olx0XHQgKiBub24tcm9vdCBibGtncyBoYXZlIGFjY2VzcyB0byB0aGVpciBwYXJlbnRzLlxuIDg1ODpcdFx0ICovXG4gODU5Olx0XHR3aGlsZSAodHJ1ZSkge1xuIDg2MDpcdFx0XHRzdHJ1Y3QgYmxrY2cgKnBvcyA9IGJsa2NnO1xuIDg2MTpcdFx0XHRzdHJ1Y3QgYmxrY2cgKnBhcmVudDtcbiA4NjI6XHRcdFx0c3RydWN0IGJsa2NnX2dxICpuZXdfYmxrZztcbiA4NjM6XHRcbiA4NjQ6XHRcdFx0cGFyZW50ID0gYmxrY2dfcGFyZW50KGJsa2NnKTtcbiA4NjU6XHRcdFx0d2hpbGUgKHBhcmVudCBcdTAwMjZcdTAwMjYgIWJsa2dfbG9va3VwKHBhcmVudCwgcSkpIHtcbiA4NjY6XHRcdFx0XHRwb3MgPSBwYXJlbnQ7XG4gODY3Olx0XHRcdFx0cGFyZW50ID0gYmxrY2dfcGFyZW50KHBhcmVudCk7XG4gODY4Olx0XHRcdH1cbiA4Njk6XHRcbiA4NzA6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4gODcxOlx0XG4gODcyOlx0XHRcdG5ld19ibGtnID0gYmxrZ19hbGxvYyhwb3MsIGRpc2ssIEdGUF9OT0lPKTtcbiA4NzM6XHRcdFx0aWYgKHVubGlrZWx5KCFuZXdfYmxrZykpIHtcbiA4NzQ6XHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDg3NTpcdFx0XHRcdGdvdG8gZmFpbF9leGl0O1xuIDg3NjpcdFx0XHR9XG4gODc3Olx0XG4gODc4Olx0XHRcdGlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX05PSU8pKSB7XG4gODc5Olx0XHRcdFx0YmxrZ19mcmVlKG5ld19ibGtnKTtcbiA4ODA6XHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDg4MTpcdFx0XHRcdGdvdG8gZmFpbF9leGl0O1xuIDg4MjpcdFx0XHR9XG4gODgzOlx0XG4gODg0Olx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbiA4ODU6XHRcbiA4ODY6XHRcdFx0aWYgKCFibGtjZ19wb2xpY3lfZW5hYmxlZChxLCBwb2wpKSB7XG4gODg3Olx0XHRcdFx0YmxrZ19mcmVlKG5ld19ibGtnKTtcbiA4ODg6XHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiA4ODk6XHRcdFx0XHRnb3RvIGZhaWxfcHJlbG9hZGVkO1xuIDg5MDpcdFx0XHR9XG4gODkxOlx0XG4gODkyOlx0XHRcdGJsa2cgPSBibGtnX2xvb2t1cChwb3MsIHEpO1xuIDg5MzpcdFx0XHRpZiAoYmxrZykge1xuIDg5NDpcdFx0XHRcdGJsa2dfZnJlZShuZXdfYmxrZyk7XG4gODk1Olx0XHRcdH0gZWxzZSB7XG4gODk2Olx0XHRcdFx0YmxrZyA9IGJsa2dfY3JlYXRlKHBvcywgZGlzaywgbmV3X2Jsa2cpO1xuIDg5NzpcdFx0XHRcdGlmIChJU19FUlIoYmxrZykpIHtcbiA4OTg6XHRcdFx0XHRcdHJldCA9IFBUUl9FUlIoYmxrZyk7XG4gODk5Olx0XHRcdFx0XHRnb3RvIGZhaWxfcHJlbG9hZGVkO1xuIDkwMDpcdFx0XHRcdH1cbiA5MDE6XHRcdFx0fVxuIDkwMjpcdFxuIDkwMzpcdFx0XHRyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7XG4gOTA0Olx0XG4gOTA1Olx0XHRcdGlmIChwb3MgPT0gYmxrY2cpXG4gOTA2Olx0XHRcdFx0Z290byBzdWNjZXNzO1xuIDkwNzpcdFx0fVxuIDkwODpcdHN1Y2Nlc3M6XG4gOTA5Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gOTEwOlx0XHRjdHgtXHUwMDNlYmxrZyA9IGJsa2c7XG4gOTExOlx0XHRyZXR1cm4gMDtcbiA5MTI6XHRcbiA5MTM6XHRmYWlsX3ByZWxvYWRlZDpcbiA5MTQ6XHRcdHJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTtcbiA5MTU6XHRmYWlsX3VubG9jazpcbiA5MTY6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIDkxNzpcdGZhaWxfZXhpdDpcbiA5MTg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbiA5MTk6XHRcdC8qXG4gOTIwOlx0XHQgKiBJZiBxdWV1ZSB3YXMgYnlwYXNzaW5nLCB3ZSBzaG91bGQgcmV0cnkuICBEbyBzbyBhZnRlciBhXG4gOTIxOlx0XHQgKiBzaG9ydCBtc2xlZXAoKS4gIEl0IGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IHF1ZXVlXG4gOTIyOlx0XHQgKiBjYW4gYmUgYnlwYXNzaW5nIGZvciBzb21lIHRpbWUgYW5kIGl0JiMzOTtzIGFsd2F5cyBuaWNlIHRvXG4gOTIzOlx0XHQgKiBhdm9pZCBidXN5IGxvb3BpbmcuXG4gOTI0Olx0XHQgKi9cbiA5MjU6XHRcdGlmIChyZXQgPT0gLUVCVVNZKSB7XG4gOTI2Olx0XHRcdG1zbGVlcCgxMCk7XG4gOTI3Olx0XHRcdHJldCA9IHJlc3RhcnRfc3lzY2FsbCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGJsa2dfY29uZl9wcmVwYCBGdW5jdGlvbiBhbmQgaXRzIENvbmZpZ3VyYXRpb24gQ29udGV4dCoqCgpPa2F5LCBzbyB0aGUgYGJsa2dfY29uZl9wcmVwYCBmdW5jdGlvbiBpcyB0aGUga2V5IGFyZWEgSSBuZWVkIHRvIGZvY3VzIG9uLiBCYXNlZCBvbiB0aGUgY2FsbCBncmFwaCwgaXQmIzM5O3MgYmVpbmcgdXNlZCBieSBgYmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0YCwgYGlvY193ZWlnaHRfd3JpdGVgLCBgaW9sYXRlbmN5X3NldF9saW1pdGAsIGB0Z19zZXRfY29uZmAsIGFuZCBgdGdfc2V0X2xpbWl0YC4gUmlnaHQsIGFsbCBvZiB0aG9zZSBhcmUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgcmVsYXRlZCB0byBibG9jayBjZ3JvdXBzIOKAkyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEdpdmVuIGl0cyBjZW50cmFsIHJvbGUgaW4gdGhlc2UgY29uZmlndXJhdGlvbiBwYXRod2F5cywgaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBgYmxrZ19jb25mX3ByZXBgIGluIEZvY3VzU3ltYm9scyBmb3IgY2xhcml0eSBhbmQgcXVpY2sgYWNjZXNzLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGFkZCBgQkxLX0NHUk9VUGAgaW4gY29uZmlncyB0b28uCgpUaGUgcXVlc3Rpb24gdGhlbiBpcywgYXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBjaGVjayBpZiBgQkxLX0NHUk9VUGAgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGxvb2sgaW50byB0aGF0IG5vdy4gVGhpcyBtaWdodCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggYW55IGZ1cnRoZXIgbW9kaWZpY2F0aW9ucyBvciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4tLVxuYmxvY2svS2NvbmZpZy00MS1cbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXG5ibG9jay9LY29uZmlnLTQzLVx0Ym9vbFxuYmxvY2svS2NvbmZpZy00NC1cbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbmJsb2NrL0tjb25maWctNDYtXHRib29sXG4tLVxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNDQtXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuYmxvY2svS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTYzLVxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXG5ibG9jay9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMDQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipDb25maWd1cmF0aW9uIENoZWNrcG9pbnQ6IEJMS19DR1JPVVAqKgoKT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBhYm91dCBzb21ldGhpbmcgY3J1Y2lhbC4gSSYjMzk7bSBmb2N1c2luZyBvbiBibG9jayBkZXZpY2UgY2dyb3VwcywgYW5kIEkgaGF2ZSB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgc3BlY2lmaWNhbGx5IGBCTEtfQ0dST1VQYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSB0aGUgYGJsb2NrL0tjb25maWdgIGZpbGUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYmxvY2sgbGF5ZXIgY29uZmlndXJhdGlvbiwgYW5kIEkgY2FuJiMzOTt0IGFmZm9yZCBhbnkgYXNzdW1wdGlvbnMgaGVyZS4gR290dGEgYmUgcHJlY2lzZS4gQSBxdWljayBnbGFuY2UgYXQgdGhhdCBLY29uZmlnIGZpbGUgd2lsbCBjb25maXJtIHRoZSBzdGF0dXMgb2YgYEJMS19DR1JPVVBgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGEgY3JpdGljYWwgcHJlcmVxdWlzaXRlIGJlZm9yZSBJIGV2ZW4gY29uc2lkZXIgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBhbnkgcmVsYXRlZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4tLVxuYmxvY2svS2NvbmZpZy00MS1cbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXG5ibG9jay9LY29uZmlnLTQzLVx0Ym9vbFxuYmxvY2svS2NvbmZpZy00NC1cbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbmJsb2NrL0tjb25maWctNDYtXHRib29sXG4tLVxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNDQtXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuYmxvY2svS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTYzLVxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXG5ibG9jay9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnPTEwOTk9Y29uZmlnIE1FTUNHX1YxXG4tLVxuaW5pdC9LY29uZmlnLTExMTUtXG5pbml0L0tjb25maWc6MTExNjpjb25maWcgQkxLX0NHUk9VUFxuaW5pdC9LY29uZmlnLTExMTctXHRib29sIFwmIzM0O0lPIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgY29uZmlndXJhdGlvbi1yZWxhdGVkLiBNeSBpbml0aWFsIGludHVpdGlvbiBwb2ludHMgbWUgdG93YXJkcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIG15IG1vbmV5JiMzOTtzIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZ28tdG8gc3BvdCBmb3IgaW5pdGlhbGl6aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBkaXZlIGluIGFuZCB0YWtlIGEgbG9vayBhdCB3aGF0JiMzOTtzIGRlZmluZWQgaW4gdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IG9wdGlvbiBkZWZpbml0aW9uIG9yIGEgbGlrZWx5IGluY2x1ZGUgZmlsZSByZWxhdGVkIHRvIG15IHByb2JsZW0uIExldCYjMzk7cyBzZWUgaWYgdGhlIGNvbmZpZ3VyYXRpb24ga2V5IGlzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTEwOlx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbjExMTE6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTExMjpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4xMTEzOlx0XG4xMTE0Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjExMTU6XHRcbjExMTY6XHRjb25maWcgQkxLX0NHUk9VUFxuMTExNzpcdFx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4xMTE4Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4xMTE5Olx0XHRkZWZhdWx0IG5cbjExMjA6XHRcdGhlbHBcbjExMjE6XHRcdEdlbmVyaWMgYmxvY2sgSU8gY29udHJvbGxlciBjZ3JvdXAgaW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBjb21tb25cbjExMjI6XHRcdGNncm91cCBpbnRlcmZhY2Ugd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdmFyaW91cyBJTyBjb250cm9sbGluZ1xuMTEyMzpcdFx0cG9saWNpZXMuXG4xMTI0Olx0XG4xMTI1Olx0XHRDdXJyZW50bHksIENGUSBJTyBzY2hlZHVsZXIgdXNlcyBpdCB0byByZWNvZ25pemUgdGFzayBncm91cHMgYW5kXG4xMTI2Olx0XHRjb250cm9sIGRpc2sgYmFuZHdpZHRoIGFsbG9jYXRpb24gKHByb3BvcnRpb25hbCB0aW1lIHNsaWNlIGFsbG9jYXRpb24pXG4xMTI3Olx0XHR0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCBpcyBhbHNvIHVzZWQgYnkgYmlvIHRocm90dGxpbmcgbG9naWMgaW5cbjExMjg6XHRcdGJsb2NrIGxheWVyIHRvIGltcGxlbWVudCB1cHBlciBsaW1pdCBpbiBJTyByYXRlcyBvbiBhIGRldmljZS5cbjExMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY2llcyBhbmQgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEJMS19DR1JPVVBgIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJ1aWx0IG9uIHRvcCBvZiBgQkxPQ0tgLiBNYWtlcyBzZW5zZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGNvbnRleHQuIEdvdHRhIGJlIHRob3JvdWdoLiBOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgbW9kdWxlcyBhcmUgYWN0dWFsbHkgKnVzaW5nKiB0aGlzPyBSaWdodCwgdGhlIGNvZGUgZm9yIGBibGtnX2NvbmZfcHJlcGAgaXMgaW4gYGJsb2NrL2JmcS1jZ3JvdXAuY2AsIGBibG9jay9ibGstaW9jb3N0LmNgLCBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYCwgYW5kIGBibG9jay9ibGstdGhyb3R0bGUuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoaXMsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGVzZSBmaWxlcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aG9zZSBmaWxlcyB0byB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZW0sIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgYXJlLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIHdoZW4gYW5kIHdoeSB0aGVzZSBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JmcS1jZ3JvdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT0yNz1vYmotJChDT05GSUdfTVFfSU9TQ0hFRF9LWUJFUilcdCYjNDM7PSBreWJlci1pb3NjaGVkLm9cbmJsb2NrL01ha2VmaWxlOjI4OmJmcS15XHRcdFx0XHQ6PSBiZnEtaW9zY2hlZC5vIGJmcS13ZjJxLm8gYmZxLWNncm91cC5vXG5ibG9jay9NYWtlZmlsZS0yOS1vYmotJChDT05GSUdfSU9TQ0hFRF9CRlEpXHQmIzQzOz0gYmZxLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODczOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipJbml0aWFsIFRob3VnaHRzIG9uIENPTkZJR19JT1NDSEVEX0JGUSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfSU9TQ0hFRF9CRlFgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIEl0JiMzOTtzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBCdWRnZXQgRmFpciBRdWV1ZWluZyBJL08gc2NoZWR1bGVyIOKAkyBCRlEuIFRoZSBpbXBvcnRhbmNlIGlzIGNsZWFyOiBpdOKAmXMgYWJvdXQgY29udHJvbGxpbmcgaG93IEkvTyByZXF1ZXN0cyBhcmUgcHJpb3JpdGl6ZWQgYW5kIGhhbmRsZWQgYXQgdGhlIGJsb2NrIGxheWVyLiBOb3csIGFzIGFuIGV4cGVydCwgSSBrbm93IHRoZSBudWFuY2VzIGhlcmUuIEFjdGl2YXRpbmcgdGhpcyBpbXBsaWVzIHdlIHdhbnQgdG8gbGV2ZXJhZ2UgQkZR4oCZcyBzdHJlbmd0aCBpbiBoYW5kbGluZyBoZWF2eSBJL08gd29ya2xvYWRzLCBlc3BlY2lhbGx5IHRob3NlIGNvbW1vbiBpbiBpbnRlcmFjdGl2ZSBkZXNrdG9wIGVudmlyb25tZW50cyBvciBjb250YWluZXJpemVkIHNldHVwcy4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgZmFpcm5lc3MgYW5kIHJlc3BvbnNpdmVuZXNzLCBldmVuIHdoZW4gdGhlcmUmIzM5O3MgaW50ZW5zZSBkaXNrIGNvbnRlbnRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHN5c3RlbSBwZXJmb3JtYW5jZSwgbGF0ZW5jeSwgYW5kIG92ZXJhbGwgdGhyb3VnaHB1dC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSB3b3JrbG9hZCBjaGFyYWN0ZXJpc3RpY3MgYmVmb3JlIGVuYWJsaW5nIHRoaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGV2ZW4gdGhvdWdoIHRoaXMgaXMgZW5hYmxlZCB0aHJvdWdoIGEgY29uZmlnIG9wdGlvbiwgaXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBib290IHBhcmFtZXRlcnMuIFVsdGltYXRlbHksIGVuYWJsaW5nIHRoaXMgY29uZmlnIG9wdGlvbiBpcyB0aGUgZmlyc3Qgc3RlcCwgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcHMgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBob3cgdG8gb3B0aW1pemUgYW5kIG1vbml0b3IgdGhpcyBzY2hlZHVsZXIgZm9yIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstaW9jb3N0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZKVx0JiM0Mzs9IGJsay1pb2xhdGVuY3kub1xuYmxvY2svTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUKVx0JiM0Mzs9IGJsay1pb2Nvc3Qub1xuYmxvY2svTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX01RX0lPU0NIRURfREVBRExJTkUpXHQmIzQzOz0gbXEtZGVhZGxpbmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTQzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqQmxvY2sgSS9PIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVGAsIGBDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgYENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gaXMgc2NyZWFtaW5nICYjMzQ7dGhyb3R0bGluZyEmIzM0OyBhbmQgaXQmIzM5O3MgcHVsbGluZyBtZSB0b3dhcmRzIHRoZSBhcmVhIG9mIGJsb2NrIEkvTyBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY2dyb3VwcyBhbmQgdGhyb3R0bGluZyBtZWNoYW5pc21zLiBHaXZlbiB0aGVzZSB0aHJlZSBjb25maWcgb3B0aW9ucywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZmluZCB0aGUgYmxvY2sgSS9PIHRocm90dGxlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc3RhbmRhcmQgcG9pbnQgb2YgcmVmZXJlbmNlLCB0aGUgYGJsb2NrL01ha2VmaWxlYC4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgYGJsay10aHJvdHRsZWAgbW9kdWxlLCBvciByZWxhdGVkIGxvZ2ljLCBzaG91bGQgYmUgZGVmaW5lZCBvciBhdCBsZWFzdCByZWZlcmVuY2VkIHdpdGhpbiB0aGUgYE1ha2VmaWxlYCBpdHNlbGYuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgY29tcGlsZWQgYW5kIGxpbmtlZCwgYW5kIGhvdyB0aGVzZSBjb25maWcgb3B0aW9ucyBwbGF5IGEgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrLXRocm90dGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICYjNDM7PSBibGstY2dyb3VwLWZjLWFwcGlkLm9cbmJsb2NrL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXHQmIzQzOz0gYmxrLXRocm90dGxlLm9cbmJsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcdCYjNDM7PSBibGstaW9wcmlvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbnM6IGBCTEtfQ0dST1VQYCwgYElPU0NIRURfQkZRYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBCTEtfREVWX1RIUk9UVExJTkdgLiBUaGV5IHNlZW0gbGlrZSBhIHJlbGV2YW50IHNldCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBjZ3JvdXBzIGFuZCBJL08gc2NoZWR1bGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byBlYWNoIG90aGVyLCBzbyBmaXJzdCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBkZXBlbmRlbmN5IGNoZWNrcy4gQXJlIGFueSBvZiB0aGVzZSByZWxpYW50IG9uIGFub3RoZXI/IEFueSBjYXNjYWRpbmcgZWZmZWN0cyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzICpjcnVjaWFsKiBiZWZvcmUgSSBzdGFydCBtYWtpbmcgY2hhbmdlcyBvciBpbnRlZ3JhdGluZyB0aGVtIGludG8gYSBuZXcgc3lzdGVtLiBUaGlzIHdpbGwgaGVscCBtZSBhdm9pZCBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb3IgaW5jb21wYXRpYmlsaXRpZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPU0NIRURfQkZRJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcuaW9zY2hlZD0xMD1jb25maWcgTVFfSU9TQ0hFRF9LWUJFUlxuLS1cbmJsb2NrL0tjb25maWcuaW9zY2hlZC0xOC1cbmJsb2NrL0tjb25maWcuaW9zY2hlZDoxOTpjb25maWcgSU9TQ0hFRF9CRlFcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0yMC1cdHRyaXN0YXRlIFwmIzM0O0JGUSBJL08gc2NoZWR1bGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYEtjb25maWcuaW9zY2hlZGAgYW5kIHRoZSBCRlEgU2NoZWR1bGVyKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGJsb2NrL0tjb25maWcuaW9zY2hlZGAuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJGUSAoQnVkZ2V0IEZhaXIgUXVldWVpbmcpIEkvTyBzY2hlZHVsZXIgaXMgY29uZmlndXJlZC4gSSBuZWVkIHRvIHNlZSBob3cgaXRzIGF2YWlsYWJpbGl0eSBpcyBjb250cm9sbGVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgSS9PIHNjaGVkdWxlciBvcHRpb25zLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHNvIEkgZXhwZWN0IHRoaXMgdG8gYmUgYSBxdWljayBzY2FuLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgbnVhbmNlcyBpbiB0aGUgY29uZGl0aW9ucyBmb3IgZW5hYmxpbmcgQkZRIOKAkyBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9yIGtlcm5lbCBmZWF0dXJlIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6ICYjMzQ7aWYgQkxPQ0tfLi4uICYjMzQ7LCAmIzM0O2RlcGVuZHMgb24uLi4mIzM0OywgYW5kICYjMzQ7c2VsZWN0Li4uJiMzNDsgc3RhdGVtZW50cy4gS25vd2luZyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgY3J1Y2lhbCBmb3IgYW55IGV4cGVydCB0dW5pbmcgb3IgdHJvdWJsZXNob290aW5nIGVmZm9ydHMgZG93biB0aGUgbGluZS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgbWVudGFsIG1hcCBvZiBCRlEmIzM5O3Mgcm9sZSBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcuaW9zY2hlZCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTk6XHRjb25maWcgSU9TQ0hFRF9CRlFcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O0JGUSBJL08gc2NoZWR1bGVyXCYjMzQ7XG4gIDIxOlx0XHRzZWxlY3QgQkxLX0lDUVxuICAyMjpcdFx0aGVscFxuICAyMzpcdFx0QkZRIEkvTyBzY2hlZHVsZXIgZm9yIEJMSy1NUS4gQkZRIGRpc3RyaWJ1dGVzIHRoZSBiYW5kd2lkdGggb2ZcbiAgMjQ6XHRcdG9mIHRoZSBkZXZpY2UgYW1vbmcgYWxsIHByb2Nlc3NlcyBhY2NvcmRpbmcgdG8gdGhlaXIgd2VpZ2h0cyxcbiAgMjU6XHRcdHJlZ2FyZGxlc3Mgb2YgdGhlIGRldmljZSBwYXJhbWV0ZXJzIGFuZCB3aXRoIGFueSB3b3JrbG9hZC4gSXRcbiAgMjY6XHRcdGFsc28gZ3VhcmFudGVlcyBhIGxvdyBsYXRlbmN5IHRvIGludGVyYWN0aXZlIGFuZCBzb2Z0XG4gIDI3Olx0XHRyZWFsLXRpbWUgYXBwbGljYXRpb25zLiAgRGV0YWlscyBpblxuICAyODpcdFx0RG9jdW1lbnRhdGlvbi9ibG9jay9iZnEtaW9zY2hlZC5yc3RcbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgQkZRX0dST1VQX0lPU0NIRURcbiAgMzE6XHQgICAgICAgYm9vbCBcJiMzNDtCRlEgaGllcmFyY2hpY2FsIHNjaGVkdWxpbmcgc3VwcG9ydFwmIzM0O1xuICAzMjpcdCAgICAgICBkZXBlbmRzIG9uIElPU0NIRURfQkZRIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4gIDMzOlx0ICAgICAgIGRlZmF1bHQgeVxuICAzNDpcdCAgICAgICBzZWxlY3QgQkxLX0NHUk9VUF9SV1NUQVRcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcbiAgMzc6XHQgICAgICAgRW5hYmxlIGhpZXJhcmNoaWNhbCBzY2hlZHVsaW5nIGluIEJGUSwgdXNpbmcgdGhlIGJsa2lvXG4gIDM4Olx0ICAgICAgIChjZ3JvdXBzLXYxKSBvciBpbyAoY2dyb3Vwcy12MikgY29udHJvbGxlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIERlcGVuZGVuY2llczogQkZRIGFuZCBjZ3JvdXBzKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGBCRlFfR1JPVVBfSU9TQ0hFRGAgZmxhZy4gTXkgYnJhaW4gaW1tZWRpYXRlbHkgY29ubmVjdHMgdGhhdCB0byBgYmZxLWNncm91cC5vYC4gSG1tLCB3b25kZXIgaWYgaXQmIzM5O3MgYSBkaXJlY3QgZGVwZW5kZW5jeT8gQmV0dGVyIHRvIGNvbmZpcm0sIGVzcGVjaWFsbHkgd2l0aCBob3cgdGhlc2UgdGhpbmdzIHRlbmQgdG8gZ2V0IGludGVydHdpbmVkIGluIHRoZSBrZXJuZWwuIExldCBtZSBqdXN0IHF1aWNrbHkgZGl2ZSBpbnRvIHRoZSBgYmxvY2svTWFrZWZpbGVgIGFuZCBjb25maXJtIHdoZXRoZXIgb3Igbm90IEkmIzM5O20gcmlnaHQuIFRoaXMgaXMgdXN1YWxseSB3aGVyZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBpcyBleHBsaWNpdGx5IHN0YXRlZC4gTm8gcG9pbnQgaW4gd2FzdGluZyB0aW1lIHVubGVzcyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JmcS1jZ3JvdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT0yNz1vYmotJChDT05GSUdfTVFfSU9TQ0hFRF9LWUJFUilcdCYjNDM7PSBreWJlci1pb3NjaGVkLm9cbmJsb2NrL01ha2VmaWxlOjI4OmJmcS15XHRcdFx0XHQ6PSBiZnEtaW9zY2hlZC5vIGJmcS13ZjJxLm8gYmZxLWNncm91cC5vXG5ibG9jay9NYWtlZmlsZS0yOS1vYmotJChDT05GSUdfSU9TQ0hFRF9CRlEpXHQmIzQzOz0gYmZxLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIERlcGVuZGVuY3kgb2YgYGJmcS1jZ3JvdXAub2AqKgoKSG1tLCBzbyBpdCBzZWVtcyBsaWtlIGBiZnEtY2dyb3VwLm9gIGlzICphbHdheXMqIGdldHRpbmcgYnVpbHQgaWYgdGhlIGBJT1NDSEVEX0JGUWAgb3B0aW9uIGlzIHR1cm5lZCBvbi4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBiZXR0ZXIuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgc291cmNlIGZpbGUgaXRzZWxmLCByaWdodD8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBibG9jay9iZnEtY2dyb3VwLmNgIHRvIGNvbmZpcm0gdGhpcyBiZWhhdmlvciBhbmQgZmlndXJlIG91dCB3aHkuIEl0JiMzOTtzIGxpa2VseSBpbiB0aGVyZSwgcmlnaHQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIGNncm91cHMgc3VwcG9ydCBmb3IgdGhlIEJGUSBJL08gc2NoZWR1bGVyLlxuICAgNDpcdCAqL1xuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aW1lLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yYnRyZWUuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcHJpby5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2JpdG1hcC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICAxNDpcdFxuICAxNTpcdCNpbmNsdWRlIFwmIzM0O2VsZXZhdG9yLmhcJiMzNDtcbiAgMTY6XHQjaW5jbHVkZSBcJiMzNDtiZnEtaW9zY2hlZC5oXCYjMzQ7XG4gIDE3Olx0XG4gIDE4Olx0I2lmZGVmIENPTkZJR19CRlFfQ0dST1VQX0RFQlVHXG4gIDE5Olx0c3RhdGljIGludCBiZnFfc3RhdF9pbml0KHN0cnVjdCBiZnFfc3RhdCAqc3RhdCwgZ2ZwX3QgZ2ZwKVxuICAyMDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFscyBhbmQgYmxvY2sgSS9PIHNjaGVkdWxpbmc6CgoqKkNoZWNraW5nIGZvciBCRlEgR3JvdXAgU2NoZWR1bGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgemVybyBpbiBvbiBgYmZxLWNncm91cC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgQkZRIChCdWRnZXQgRmFpciBRdWV1ZWluZykgSS9PIHNjaGVkdWxlciYjMzk7cyBjZ3JvdXAtcmVsYXRlZCBsb2dpYyBzaG91bGQgcmVzaWRlLiBOb3csIHRoZSBrZXkgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgQkZRJiMzOTtzIGdyb3VwIHNjaGVkdWxpbmcgZmVhdHVyZXMgYXJlIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4gVGhlIGAjaWZkZWYgQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIHRoZSB0ZWxsLiBJdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlci4gSXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgdGhlIGNvZGUsIGxpa2VseSBpbmNsdWRpbmcgdGhlIGNvcmUgb2YgaG93IEJGUSBpbnRlcmFjdHMgd2l0aCBjZ3JvdXBzLCBpcyBpbmNsdWRlZCBkdXJpbmcgY29tcGlsYXRpb24uIFNvLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIGFjdGl2ZS4gVGhhdCB3aWxsIGRlY2lkZSBteSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9iZnEtY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jPTI2Mj12b2lkIGJmcWdfc3RhdHNfc2V0X3N0YXJ0X2lkbGVfdGltZShzdHJ1Y3QgYmZxX2dyb3VwICpiZnFnKSB7IH1cbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMjY1LVxuYmxvY2svYmZxLWNncm91cC5jOjI2NjojaWZkZWYgQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEXG5ibG9jay9iZnEtY2dyb3VwLmMtMjY3LVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNDA1PXN0cnVjdCBjZnR5cGUgYmZxX2Jsa2dfZmlsZXNbXSA9IHtcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQxNC1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxNDE1OiNlbHNlXHQvKiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQgKi9cbmJsb2NrL2JmcS1jZ3JvdXAuYy0xNDE2LVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNDU0PXN0cnVjdCBiZnFfZ3JvdXAgKmJmcV9jcmVhdGVfZ3JvdXBfaGllcmFyY2h5KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgaW50IG5vZGUpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTE0NjctfVxuYmxvY2svYmZxLWNncm91cC5jOjE0Njg6I2VuZGlmXHQvKiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipCRlEgR3JvdXAgSS9PIFNjaGVkdWxlciBDb25maXJtYXRpb24qKgoKQWxyaWdodCwgeWVwLCB0aGF0IGBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURgIGZsYWcgaXMgZGVmaW5pdGVseSBuZWNlc3NhcnkuIFRoYXQmIzM5O3MgYSBnaXZlbjsgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBOb3csIHNpbmNlIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGUgd2VlZHMgd2l0aCBJL08gc2NoZWR1bGluZyBhbmQgdGhlIG51YW5jZXMgb2YgQkZRLCBsZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgQkxLX0NHUk9VUF9JT0NPU1RgIGlzIGVuYWJsZWQgdG9vLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSBmb3IgcHJvcGVyIGNncm91cCBpbnRlZ3JhdGlvbiBhbmQgYWNjb3VudGluZy4gSXQmIzM5O3MgYmVzdCB0byBiZSB0aG9yb3VnaCBzaW5jZSwgYXMgd2Uga25vdywgdGhlIGludGVncmF0aW9uIG9mIEJGUSB3aXRoIGNncm91cHMgaXMgY3JpdGljYWwgdG8gZ2V0dGluZyBhIHByb3Blcmx5IGJhbGFuY2VkIEkvTyBwcm9maWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUF9JT0NPU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MTQ1PWNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBCbG9jay9LY29uZmlnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYmxvY2svS2NvbmZpZ2AgYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBhcmVhIGFyb3VuZCBgQkxLX0NHUk9VUF9JT0NPU1RgLiBSaWdodCwgc28gdGhpcyBpcyB3aGVyZSB0aGUgYmxvY2sgSS9PIGNvc3QgYWNjb3VudGluZyBzdHVmZiBpcyBjb25maWd1cmVkLiBJIGtub3cgdGhpcyBtb2R1bGUsIGJ1dCBJIHdhbnQgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggaXQsIG9yIG1heWJlIEnigJltIHRoaW5raW5nIGFib3V0IHNvbWUgc3BlY2lmaWMgY29kZSBwYXRoLCBvciBjb25zaWRlcmluZyBhIG5ldyBmZWF0dXJlLCBvciBkZWJ1Z2dpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSS9PIGFjY291bnRpbmcgdXNpbmcgY2dyb3Vwcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgY29uZmxpY3RzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgS2NvbmZpZyBvcHRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBibG9jayBsYXllci4gTGV0IG1lIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIGFuZCBzZWUgd2hlcmUgaXQgZml0cyB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkL2Rpc2FibGVkIGFuZCB3aHkuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGltcGFjdCBvbiBzeXN0ZW0gcGVyZm9ybWFuY2UsIG9yIHdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBpdCB0byB3b3JrLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGlmIGF2YWlsYWJsZSBhcyB3ZWxsLCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgYW5zd2VycyB0byB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy4KCiogICBXaGF0IGFyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncz8KKiAgIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPwoqICAgV2hhdCBkb2VzIHRoZSBoZWxwIHRleHQgc2F5IGFib3V0IHRoZSBmZWF0dXJlPwoqICAgSG93IGlzIHRoaXMgZmVhdHVyZSByZWxhdGVkIHRvIG90aGVyIGZlYXR1cmVzPwoqICAgV2hhdCBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTQ6XHRjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbiAxNTU6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbiAxNTY6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDE1NzpcdFx0c2VsZWN0IEJMS19SUV9BTExPQ19USU1FXG4gMTU4Olx0XHRoZWxwXG4gMTU5Olx0XHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSAud2VpZ2h0IGludGVyZmFjZSBmb3IgY29zdFxuIDE2MDpcdFx0bW9kZWwgYmFzZWQgcHJvcG9ydGlvbmFsIElPIGNvbnRyb2wuICBUaGUgSU8gY29udHJvbGxlclxuIDE2MTpcdFx0ZGlzdHJpYnV0ZXMgSU8gY2FwYWNpdHkgYmV0d2VlbiBkaWZmZXJlbnQgZ3JvdXBzIGJhc2VkIG9uXG4gMTYyOlx0XHR0aGVpciBzaGFyZSBvZiB0aGUgb3ZlcmFsbCB3ZWlnaHQgZGlzdHJpYnV0aW9uLlxuIDE2MzpcdFxuIDE2NDpcdGNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xuIDE2NTpcdFx0Ym9vbCBcJiMzNDtDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcJiMzNDtcbiAxNjY6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDE2NzpcdFx0aGVscFxuIDE2ODpcdFx0RW5hYmxlIHRoZSAucHJpbyBpbnRlcmZhY2UgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3MgdG9cbiAxNjk6XHRcdHJlcXVlc3RzLiBUaGUgSS9PIHByaW9yaXR5IGNsYXNzIGFmZmVjdHMgdGhlIG9yZGVyIGluIHdoaWNoIGFuIEkvT1xuIDE3MDpcdFx0c2NoZWR1bGVyIGFuZCBibG9jayBkZXZpY2VzIHByb2Nlc3MgcmVxdWVzdHMuIE9ubHkgc29tZSBJL08gc2NoZWR1bGVyc1xuIDE3MTpcdFx0YW5kIHNvbWUgYmxvY2sgZGV2aWNlcyBzdXBwb3J0IEkvTyBwcmlvcml0aWVzLlxuIDE3MjpcdFxuIDE3MzpcdGNvbmZpZyBCTEtfREVCVUdfRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGlzc3VlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgYXBwcm9hY2guIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgZnVuZGFtZW50YWwgcHJvYmxlbTogbGF0ZW5jeSB3aXRoaW4gY2dyb3VwcyBhbmQgc3BlY2lmaWNhbGx5IGhvdyBJL08gaXMgZ2V0dGluZyBzY2hlZHVsZWQuIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IHRoaXMgY2dyb3VwIG1ldHJpYyBpcyAqYWN0dWFsbHkqIG1lYXN1cmluZy4gSXMgaXQgcHVyZSwgb3IgaXMgaXQgZ29pbmcgdG8gaGF2ZSBzb21lIGNhdmVhdHM/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgdmVyc2lvbiBvZiB0aGUga2VybmVsIGFtIEkgb24/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYmxvY2sgZGV2aWNlcywgYW5kIG1vcmUgc3BlY2lmaWNhbGx5IHdoYXQgaXMgdGhlIHVuZGVybHlpbmcgc3RvcmFnZT8KCkkmIzM5O20gdGhpbmtpbmc6IEhvdyB3ZWxsIGlzIHRoZSBJL08gc2NoZWR1bGVyIGJlaGF2aW5nIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzLCBvciBpcyBpdCBzb21ldGhpbmcgbW9yZSBudWFuY2VkLCBwZXJoYXBzIGludm9sdmluZyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBsYXllcnM/IElzIHRoaXMgYW4gYWJzb2x1dGUgbWV0cmljLCBvciBhcmUgd2UganVzdCBsb29raW5nIGF0IHRoZSBkZWx0YXM/IERvZXMgdGhpcyBtZXRyaWMgYWNjb3VudCBmb3IgcmVhZHMgKmFuZCogd3JpdGVzPwoKUmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyB0aGUgYmFzZWxpbmUgbWVhc3VyZW1lbnRzIGFuZCBzdGFydCB0byBjb21wYXJlIHRvIHRoZSBjb250cm9sIGdyb3VwLiBUaGVuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBjb3JyZWxhdGUgdGhlIGRhdGEgZnJvbSBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIHdpdGggb3RoZXIgcmVsZXZhbnQgbWV0cmljcywgbGlrZSBJL08gcXVldWUgbGVuZ3RoIGFuZCBDUFUgdXRpbGl6YXRpb24gd2l0aGluIHRoZSBhZmZlY3RlZCBjZ3JvdXAgYW5kIGF0IHRoZSBzeXN0ZW0td2lkZSBsZXZlbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb21tYW5kcyBJIG5lZWQgdG8gcnVuIHRvIGdldCBhIGhvbGlzdGljIHZpZXcuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGFuZCB0aGUgc291cmNlIGNvZGUgaXRzZWxmIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBkYXRhIGlzIGJlaW5nIHNhbXBsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM0Olx0Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG4gMTM1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4gMTM2Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxMzc6XHRcdGhlbHBcbiAxMzg6XHRcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIC5sYXRlbmN5IGludGVyZmFjZSBmb3IgSU8gdGhyb3R0bGluZy5cbiAxMzk6XHRcdFRoZSBJTyBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byBtYWludGFpbiBhdmVyYWdlIElPIGxhdGVuY2llcyBiZWxvd1xuIDE0MDpcdFx0dGhlIGNvbmZpZ3VyZWQgbGF0ZW5jeSB0YXJnZXQsIHRocm90dGxpbmcgYW55Ym9keSB3aXRoIGEgaGlnaGVyIGxhdGVuY3lcbiAxNDE6XHRcdHRhcmdldCB0aGFuIHRoZSB2aWN0aW1pemVkIGdyb3VwLlxuIDE0MjpcdFxuIDE0MzpcdFx0Tm90ZSwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW50ZXJmYWNlIGFuZCBjb3VsZCBiZSBjaGFuZ2VkIHNvbWVkYXkuXG4gMTQ0Olx0XG4gMTQ1Olx0Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbiAxNDY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbiAxNDc6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUCBcdTAwMjZcdTAwMjYgTlZNRV9GQ1xuIDE0ODpcdFx0aGVscFxuIDE0OTpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyB0cmFmZmljIGFjcm9zc1xuIDE1MDpcdFx0ICBjZ3JvdXAgYXBwbGljYXRpb25zLiBJdCBlbmFibGVzIHRoZSBGYWJyaWMgYW5kIHRoZSBzdG9yYWdlIHRhcmdldHMgdG9cbiAxNTE6XHRcdCAgaWRlbnRpZnksIG1vbml0b3IsIGFuZCBoYW5kbGUgRkMgdHJhZmZpYyBiYXNlZCBvbiBWTSB0YWdzIGJ5IGluc2VydGluZ1xuIDE1MjpcdFx0ICBhcHBsaWNhdGlvbiBzcGVjaWZpYyBpZGVudGlmaWNhdGlvbiBpbnRvIHRoZSBGQyBmcmFtZS5cbiAxNTM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIFRocm90dGxpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gV2hhdCYjMzk7cyB0aGUgY3VycmVudCBzdGF0dXMsIGFuZCB3aGVyZSBhcmUgdGhlIHBvdGVudGlhbCBwaXRmYWxscz8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSBvcHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2UgYW5kIHByZXZlbnQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBpbnZvbHZlcyBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHNlZWluZyBob3cgSSBjYW4gbW9uaXRvciB0aGUgYmxvY2sgZGV2aWNlIHRocm90dGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFyY2hpdGVjdHVyYWwgdHJhZGUtb2ZmcyB0aGF0IGhhdmUgdG8gYmUgbWFkZSB3aGVuIGl0IGNvbWVzIHRvIG1lbW9yeSBhbmQgYmxvY2sgZGV2aWNlcy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgY2F1c2luZyB1bm5lY2Vzc2FyeSBibG9jayBkZXZpY2UgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1RIUk9UVExJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9OTc9Y29uZmlnIEJMS19ERVZfWk9ORURcbi0tXG5ibG9jay9LY29uZmlnLTEwNS1cbmJsb2NrL0tjb25maWc6MTA2OmNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbmJsb2NrL0tjb25maWctMTA3LVx0Ym9vbCBcJiMzNDtCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIGRpZyBpbnRvIGBibG9jay9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYEJMS19ERVZfVEhST1RUTElOR2Agb3B0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEkvTyB0aHJvdHRsaW5nLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIFRoaXMgbWVhbnMgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dCBvciBjb21tZW50cyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGNvbmZpZ3VyZXMgYW5kIGNvbnRyb2xzIHRoZXNlIGxpbWl0cy4gSSYjMzk7bSBsaWtlbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaW50ZXJhY3RzIHdpdGggb3RoZXIgYmxvY2sgbGF5ZXIgZmVhdHVyZXMuIERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgdGhpcyBtYXkgbGVhZCBtZSB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCByZWxhdGVkIHNvdXJjZSBjb2RlIGZpbGVzIHRvIHNlZSBob3cgdGhlIGtub2JzIGFyZSB0dXJuZWQuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBvcHRpb24gaW5mbHVlbmNlcyB0aGUgYmxvY2sgSS9PIHNjaGVkdWxlciBhbmQgcmVsYXRlZCBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNjpcdGNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbiAxMDc6XHRcdGJvb2wgXCYjMzQ7QmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydFwmIzM0O1xuIDEwODpcdFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXG4gMTA5Olx0XHRzZWxlY3QgQkxLX0NHUk9VUF9SV1NUQVRcbiAxMTA6XHRcdGhlbHBcbiAxMTE6XHRcdEJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnQuIEl0IGNhbiBiZSB1c2VkIHRvIGxpbWl0XG4gMTEyOlx0XHR0aGUgSU8gcmF0ZSB0byBhIGRldmljZS4gSU8gcmF0ZSBwb2xpY2llcyBhcmUgcGVyIGNncm91cCBhbmRcbiAxMTM6XHRcdG9uZSBuZWVkcyB0byBtb3VudCBhbmQgdXNlIGJsa2lvIGNncm91cCBjb250cm9sbGVyIGZvciBjcmVhdGluZ1xuIDExNDpcdFx0Y2dyb3VwcyBhbmQgc3BlY2lmeWluZyBwZXIgZGV2aWNlIElPIHJhdGUgcG9saWNpZXMuXG4gMTE1Olx0XG4gMTE2Olx0XHRTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gMTE3Olx0XG4gMTE4Olx0Y29uZmlnIEJMS19XQlRcbiAxMTk6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSB3cml0ZWJhY2sgdGhyb3R0bGluZ1wmIzM0O1xuIDEyMDpcdFx0aGVscFxuIDEyMTpcdFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYmxvY2sgbGF5ZXIgdG8gdGhyb3R0bGUgYnVmZmVyZWRcbiAxMjI6XHRcdGJhY2tncm91bmQgd3JpdGViYWNrIGZyb20gdGhlIFZNLCBtYWtpbmcgaXQgbW9yZSBzbW9vdGggYW5kIGhhdmluZ1xuIDEyMzpcdFx0bGVzcyBpbXBhY3Qgb24gZm9yZWdyb3VuZCBvcGVyYXRpb25zLiBUaGUgdGhyb3R0bGluZyBpcyBkb25lXG4gMTI0Olx0XHRkeW5hbWljYWxseSBvbiBhbiBhbGdvcml0aG0gbG9vc2VseSBiYXNlZCBvbiBDb0RlbCwgZmFjdG9yaW5nIGluXG4gMTI1Olx0XHR0aGUgcmVhbHRpbWUgcGVyZm9ybWFuY2Ugb2YgdGhlIGRpc2suXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDU5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBJL08gQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgc3ltYm9scyBhbmQgY29uZmlncyBwb2ludHMgdG8gYSBjbGVhciBhcmVhIG9mIGZvY3VzOiBibG9jayBJL08gbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxldmVyYWdpbmcgY2dyb3Vwcy4gVGhlIGNvcmUgY29uZmlndXJhdGlvbnMgSSYjMzk7bSBzZWVpbmcgKGBCTEtfQ0dST1VQYCwgYElPU0NIRURfQkZRYCwgYEJGUV9HUk9VUF9JT1NDSEVEYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBCTEtfREVWX1RIUk9UVExJTkdgKSBpbW1lZGlhdGVseSBwYWludCBhIHBpY3R1cmUgb2YgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBJL08gc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiBhdCBhIHBlci1jZ3JvdXAgbGV2ZWwuIFdlJiMzOTtyZSBjbGVhcmx5IGRpdmluZyBpbnRvIHRoZSByZWFsbSBvZiBiYW5kd2lkdGggY29udHJvbCwgbGF0ZW5jeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIGludGVncmF0aW9uIHdpdGggdGhlIEJ1ZGdldCBGYWlyIFF1ZXVlIChCRlEpIHNjaGVkdWxlci4KClRoZSBmdW5jdGlvbiBzeW1ib2xzIGxpc3RlZCAtIGBibGtnX2NvbmZfcHJlcGAsIGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLCBgaW9jX3dlaWdodF93cml0ZWAsIGBpb2xhdGVuY3lfc2V0X2xpbWl0YCwgYHRnX3NldF9jb25mYCwgYW5kIGB0Z19zZXRfbGltaXRgIC0gYXJlIHRoZSBzcGVjaWZpYyAmIzM0O2hvb2tzJiMzNDsgdGhhdCBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbmFsaXR5LiBFYWNoIGdpdmVzIGFuIGluZGljYXRpb24gb2YgaG93IGVhY2ggZmVhdHVyZSBpcyBjb25uZWN0ZWQsIHdpdGggYSBjbGVhciBmb2N1cyBvbiBzZXR0aW5ncyBhbmQgY29uZmlndXJhdGlvbi4KCk5vdywgSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBgYmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0YC4gVW5kZXJzdGFuZGluZyB3aGV0aGVyIHRoaXMgaXMgc3RhdGljIG9yIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgYXQgcnVudGltZSBpcyBjcnVjaWFsLiBJdCYjMzk7bGwgZGlyZWN0bHkgaW1wYWN0IGhvdyBmbGV4aWJsZSBhbmQgYWRhcHRpdmUgb3VyIEkvTyBtYW5hZ2VtZW50IHN0cmF0ZWd5IGNhbiBiZS4gSXMgdGhpcyBhIG9uZS10aW1lIHNldHVwLCBvciBjYW4gd2VpZ2h0cyBiZSBhZGp1c3RlZCBpbiByZXNwb25zZSB0byBjaGFuZ2luZyB3b3JrbG9hZCBkZW1hbmRzPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JmcS1jZ3JvdXAuYz0xMDMzPXN0YXRpYyBpbnQgYmZxX2lvX3NldF93ZWlnaHRfbGVnYWN5KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTEwNTgtXG5ibG9jay9iZnEtY2dyb3VwLmM6MTA1OTpzdGF0aWMgc3NpemVfdCBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmZxLWNncm91cC5jLTEwNjAtXHRcdFx0XHRcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmM9MTEwNj1zdGF0aWMgc3NpemVfdCBiZnFfaW9fc2V0X3dlaWdodChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTExMjItXG5ibG9jay9iZnEtY2dyb3VwLmM6MTEyMzpcdHJldHVybiBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHQob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYpO1xuYmxvY2svYmZxLWNncm91cC5jLTExMjQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI0MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqU3RhdGljIFN5bWJvbCBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMsIG15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0aGF0IHRoaXMgc3RhdGljIGVsZW1lbnQgaXNuJiMzOTt0IHN1aXRhYmxlIGFzIGEgZm9jdXMgc3ltYm9sLiBXZSBuZWVkIHNvbWV0aGluZyBkeW5hbWljIGFuZCByZXNwb25zaXZlIHRvIGNoYW5nZXMsIGFuZCBhIHN0YXRpYyB2YWx1ZSBqdXN0IGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQuIFdlIG5lZWQgc29tZXRoaW5nIHRoYXQgY2FuIHRyYWNrIHRoZSBzdGF0ZSBvciB0aGUgY2hhbmdlIGl0c2VsZi4KCk9rYXksIGxldCYjMzk7cyBwaXZvdC4gV2hhdCBhYm91dCBgaW9jX3dlaWdodF93cml0ZWA/IFBlcmhhcHMgdGhhdCBjb250YWlucyB0aGUgbmVjZXNzYXJ5IGR5bmFtaWMgYmVoYXZpb3IuIFdlIHNob3VsZCBiZSBleGFtaW5pbmcgd2hhdCB0aGlzIHBvdGVudGlhbCBzeW1ib2wgZG9lcyAtIGRvZXMgaXQgZ2l2ZSB1cyBhIGNoYW5naW5nIHRhcmdldCB0byBmb2xsb3c/IEl0JiMzOTtzIHRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlIGlmIHRoYXQgd2lsbCB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2Nfd2VpZ2h0X3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvY29zdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2Nvc3QuYz0zMTI3PXN0YXRpYyBpbnQgaW9jX3dlaWdodF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTMxMzctXG5ibG9jay9ibGstaW9jb3N0LmM6MzEzODpzdGF0aWMgc3NpemVfdCBpb2Nfd2VpZ2h0X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuYmxvY2svYmxrLWlvY29zdC5jLTMxMzktXHRcdFx0XHRzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYz0zNTY3PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGlvY19maWxlc1tdID0ge1xuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTcxLVx0XHQuc2VxX3Nob3cgPSBpb2Nfd2VpZ2h0X3Nob3csXG5ibG9jay9ibGstaW9jb3N0LmM6MzU3MjpcdFx0LndyaXRlID0gaW9jX3dlaWdodF93cml0ZSxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTczLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgbWF0dGVyIG15c2VsZiwgc3VpdGFibGUgZm9yIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFN0YXRpYyBDb25maWd1cmF0aW9uIElzc3VlKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBzdGF0aWMgY29tcG9uZW50LiBTb21ldGhpbmcmIzM5O3MgY2xlYXJseSBhbWlzcy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzdGF0aWMuLi4gYnV0IHdoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3RhdGljIG5hdHVyZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvYmxlbS4gV2hhdCBleGFjdGx5IGlzIHRoaXMgcmlnaWRpdHkgcHJldmVudGluZz8KCk5vdywgSSByZWNhbGwgYSBmdW5jdGlvbiwgYGJsa2dfY29uZl9wcmVwYC4gSXMgdGhhdCByZWxldmFudCB0byB0aGlzIHNpdHVhdGlvbj8gSXQgc2VlbXMgcG90ZW50aWFsbHkgdXNlZnVsIGhlcmUuIEl0JiMzOTtzIG9mdGVuIHVzZWQgaW4gcmVsYXRlZCBibG9ja3Mgb2YgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGJsa2dfY29uZl9wcmVwYCBmdW5jdGlvbnMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGlzIGNvbXBvbmVudC4gUGVyaGFwcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYz03NDc9RVhQT1JUX1NZTUJPTF9HUEwoX19ibGtnX3ByZmlsbF91NjQpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy03NTUtICogT25jZSBpbml0aWFsaXplZCwgQGN0eCBjYW4gYmUgdXNlZCB3aXRoIGJsa2dfY29uZl9vcGVuX2JkZXYoKSBhbmRcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3NTY6ICogYmxrZ19jb25mX3ByZXAoKS5cbmJsb2NrL2Jsay1jZ3JvdXAuYy03NTctICovXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTgxMT1FWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfb3Blbl9iZGV2KTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtODEzLS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjgxNDogKiBibGtnX2NvbmZfcHJlcCAtIHBhcnNlIGFuZCBwcmVwYXJlIGZvciBwZXItYmxrZyBjb25maWcgdXBkYXRlXG5ibG9jay9ibGstY2dyb3VwLmMtODE1LSAqIEBibGtjZzogdGFyZ2V0IGJsb2NrIGNncm91cFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjctICovXG5ibG9jay9ibGstY2dyb3VwLmM6ODI4OmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG5ibG9jay9ibGstY2dyb3VwLmMtODI5LVx0XHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzAtfVxuYmxvY2svYmxrLWNncm91cC5jOjkzMTpFWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfcHJlcCk7XG5ibG9jay9ibGstY2dyb3VwLmMtOTMyLVxuYmxvY2svYmxrLWNncm91cC5jLTkzMy0vKipcbmJsb2NrL2Jsay1jZ3JvdXAuYzo5MzQ6ICogYmxrZ19jb25mX3VucHJlcCAtIGNvdW50ZXJwYXJ0IG9mIGJsa2dfY29uZl9wcmVwKClcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzUtICogQGN0eDogYmxrZ19jb25mX2N0eCBpbml0aWFsaXplZCB3aXRoIGJsa2dfY29uZl9pbml0KClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNjMKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBJTyBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgRGVhZGxvY2sgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBibGtnX2NvbmZfcHJlcGAgZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBzb2xpZCBmb2N1cyBzeW1ib2wgZm9yIHRoaXMgYW5hbHlzaXMsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIGNhbGwgaXQsIGp1c3QgdG8gYmUgc3VyZSwgbm9wZSwgaXQmIzM5O3MgY2FsbGVkIGJ5IHN0YXRpYyBjZ3JvdXAgZmlsZSBoYW5kbGVycywgc28gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN0YW5kcy4KClJpZ2h0LCBzbyBgYmxrZ19jb25mX3ByZXBgIGlzIHRoZSBwcmltYXJ5IGZvY2FsIHBvaW50LiBOb3csIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGlzIGFyZWEuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgcmVsYXRlZCBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkIGJ5IGNvbmZpZ3MuIEkgc2VlIGBCTEtfQ0dST1VQYCBkZXBlbmRzIG9uIGBCTE9DS2AsIGBJT1NDSEVEX0JGUWAgYWxzbyBkZXBlbmRzIG9uIGBCTE9DS2AuIFRoZW4gYEJGUV9HUk9VUF9JT1NDSEVEYCByZXF1aXJlcyBib3RoIGBJT1NDSEVEX0JGUWAgKmFuZCogYEJMS19DR1JPVVBgLiBGdXJ0aGVybW9yZSwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBCTEtfREVWX1RIUk9UVExJTkdgIGFsbCBkZXBlbmQgb24gYEJMS19DR1JPVVBgLiBTbywgYSBzdW1tYXJ5IG9mIHJlbGF0ZWQgY29uZmlncyBpczoKYEJMS19DR1JPVVBgLCBgSU9TQ0hFRF9CRlFgLCBgQkZRX0dST1VQX0lPU0NIRURgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgYEJMS19ERVZfVEhST1RUTElOR2AuCgpPaywgc28gd2l0aCB0aGF0IGNvbnRleHQsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgaW4gdGhlIGBibGtnX2NvbmZfcHJlcGAgZnVuY3Rpb24gaXRzZWxmLCB3aGVyZSBgR0ZQX0tFUk5FTGAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgR0ZQX05PSU9gIHdpdGhpbiB0aGUgYHJhZGl4X3RyZWVfcHJlbG9hZGAgY2FsbC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZml4LiBCeSB1c2luZyBgR0ZQX05PSU9gIGluc3RlYWQgb2YgYEdGUF9LRVJORUxgLCB3ZSYjMzk7cmUgZWZmZWN0aXZlbHkgcHJldmVudGluZyBhIHBvdGVudGlhbCBkZWFkbG9jay4gV2UgYXJlIHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGFsbG9jYXRpbmcgbWVtb3J5IGluIGEgY29udGV4dCB3aGVyZSBob2xkaW5nIGEgbG9jaywgb3Igd2hlcmUgcGVyZm9ybWluZyBJTyB3b3VsZCBjcmVhdGUgaXNzdWVzLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IEkgc2hvdWxkIGZvY3VzIG9uIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLCBhbmQgc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCRlFfR1JPVVBfSU9TQ0hFRCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1RIUk9UVExJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtnX2NvbmZfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBgYmxrZ19jb25mX3ByZXBgIGJ5IGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCBkdXJpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgY2dyb3VwIGNvbmZpZ3VyYXRpb24gcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCRlFfR1JPVVBfSU9TQ0hFRCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1RIUk9UVExJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtnX2NvbmZfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBgYmxrZ19jb25mX3ByZXBgIGJ5IGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCBkdXJpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgY2dyb3VwIGNvbmZpZ3VyYXRpb24gcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnIGluIGByYWRpeF90cmVlX3ByZWxvYWRgIGZyb20gYEdGUF9LRVJORUxgIHRvIGBHRlBfTk9JT2AgdG8gbWF0Y2ggdGhlIHByZWNlZGluZyBgYmxrZ19hbGxvY2AgY2FsbCBhbmQgYXZvaWQgcG90ZW50aWFsIG1lbW9yeSByZWNsYWltIGRlYWRsb2NrcyBpbiB0aGUgYmxvY2sgbGF5ZXIuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGxvY2tpbmcvcmVjbGFpbSBpc3N1ZSAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAgb3Igc3RhbmRhcmQgdGVzdGluZykgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBkMTlkZjdkNjUyZWY2OGRkYWU1MDcyYTVhYjk1OThiYjVlN2QxMGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAyMToyMjowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwppbmRleCBkOTY3NjEyNmM1YjVkLi5iOTgxYTgwYmJkOTQzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNncm91cC5jCkBAIC04NjcsNyAmIzQzOzg2Nyw2IEBAIGludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsCiAJCQlwYXJlbnQgPSBibGtjZ19wYXJlbnQocGFyZW50KTsKIAkJfQogCi0JCS8qIERyb3AgbG9ja3MgdG8gZG8gbmV3IGJsa2cgYWxsb2NhdGlvbiB3aXRoIEdGUF9LRVJORUwuICovCiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3EtJmd0O3F1ZXVlX2xvY2spOwogCiAJCW5ld19ibGtnID0gYmxrZ19hbGxvYyhwb3MsIGRpc2ssIEdGUF9OT0lPKTsKQEAgLTg3Niw3ICYjNDM7ODc1LDcgQEAgaW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCwKIAkJCWdvdG8gZmFpbF9leGl0OwogCQl9CiAKLQkJaWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKSkgewomIzQzOwkJaWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9JTykpIHsKIAkJCWJsa2dfZnJlZShuZXdfYmxrZyk7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBmYWlsX2V4aXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3CgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDU3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9ibGstY2dyb3VwLmNgIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgYSBjaGFuZ2UgaW4gbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MuIFNwZWNpZmljYWxseSwgaW4gYGJsa2dfY29uZl9wcmVwYCwgaXQmIzM5O3Mgc3dpdGNoaW5nIGByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTClgIHRvIGByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX05PSU8pYC4gVGhlIGNvbW1lbnQgdGhhdCB3YXMgcmVtb3ZlZCwgdGhlIG9uZSBhYm91dCBkcm9wcGluZyBsb2NrcyBiZWZvcmUgYSBgR0ZQX0tFUk5FTGAgYWxsb2NhdGlvbiwgcGlxdWVkIG15IGludGVyZXN0LiBUaGF0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2tkZXAgaXNzdWUgd2FzIHRoZSBkcml2aW5nIGZhY3Rvciwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGFuIGF2b2lkYW5jZSBvZiBhbGxvY2F0aW5nIG1lbW9yeSB3aXRoIGBHRlBfS0VSTkVMYCBpbiBhIGNvbnRleHQgd2hlcmUgaXQmIzM5O3Mgbm90IHNhZmUuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgbWVudGlvbmVkIGRyb3BwaW5nIGxvY2tzIGZpcnN0LCB3aXRoIGBzcGluX3VubG9ja19pcnEoJmFtcDtxLSZndDtxdWV1ZV9sb2NrKTtgIHJpZ2h0IGFib3ZlLgoKU28sIHRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MsIGdvaW5nIGZyb20gdGhlIHBvdGVudGlhbGx5IGJsb2NraW5nIGBHRlBfS0VSTkVMYCB0byB0aGUgbm9uLWJsb2NraW5nIGBHRlBfTk9JT2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7Q291bGQgdGhpcyBiZSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyYjMzQ7IE5vcGUsIGNvbXBsZXRlbHkgZGlmZmVyZW50LiBLTVNBTiBpcyB0aGUgdG9vbCBmb3IgdGhhdCwgYW5kIEtBU0FOIGNvdmVycyBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBlaXRoZXIgb2YgdGhvc2UgaXNzdWVzLgoKTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZmIHRvIGNvbmZpcm0gd2hhdCBJIHdhcyB0aGlua2luZy4gWWVwLCBgbmV3X2Jsa2dgIHdhcyAqYWxyZWFkeSogYmVpbmcgYWxsb2NhdGVkIHdpdGggYEdGUF9OT0lPYC4gU28sIHRoZSBpbmNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIGBuZXdfYmxrZ2AgYWxsb2NhdGlvbiBhbmQgdGhlIGByYWRpeF90cmVlX3ByZWxvYWRgIHByZWxvYWQsIHVzaW5nIGBHRlBfS0VSTkVMYCwgaXMgdGhlIGtleSBpc3N1ZSBoZXJlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYEdGUF9LRVJORUxgIHRvIHByZWxvYWQgdGhlIHJhZGl4IHRyZWUsIHdoaWNoIGNvdWxkIGJlIHByb2JsZW1hdGljIGlmIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgd2l0aGluIHRoZSBibG9jayBJL08gcGF0aC4gUmVjdXJzaW9uIGludG8gdGhlIGJsb2NrIGxheWVyIGNvdWxkIG9jY3VyIGlmIGBHRlBfS0VSTkVMYCB3ZXJlIHVzZWQuCgpJbiBlc3NlbmNlLCB0aGlzIGlzIGZpeGluZyBhIHBvdGVudGlhbCBkZWFkbG9jayBvciByZWNsYWltIGlzc3VlLiBCeSBjaGFuZ2luZyB0byBgR0ZQX05PSU9gLCB3ZSBhdm9pZCBhbnkgcHJvYmxlbWF0aWMgYmxvY2tpbmcgYmVoYXZpb3IuIFRoaXMgaXNuJiMzOTt0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcgaW4gYHJhZGl4X3RyZWVfcHJlbG9hZGAgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCB0byBtYXRjaCB0aGUgcHJlY2VkaW5nIGBibGtnX2FsbG9jYCBjYWxsIGFuZCBhdm9pZCBwb3RlbnRpYWwgbWVtb3J5IHJlY2xhaW0gZGVhZGxvY2tzIGluIHRoZSBibG9jayBsYXllci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9yZWNsYWltIGlzc3VlICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBzdGFuZGFyZCB0ZXN0aW5nKSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcgaW4gYHJhZGl4X3RyZWVfcHJlbG9hZGAgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCB0byBtYXRjaCB0aGUgcHJlY2VkaW5nIGBibGtnX2FsbG9jYCBjYWxsIGFuZCBhdm9pZCBwb3RlbnRpYWwgbWVtb3J5IHJlY2xhaW0gZGVhZGxvY2tzIGluIHRoZSBibG9jayBsYXllci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9yZWNsYWltIGlzc3VlICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBzdGFuZGFyZCB0ZXN0aW5nKSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MDYuMDAxNDU1NTg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNzY3MTg3NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCRlFfR1JPVVBfSU9TQ0hFRFwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtnX2NvbmZfcHJlcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZyBpbiBgcmFkaXhfdHJlZV9wcmVsb2FkYCBmcm9tIGBHRlBfS0VSTkVMYCB0byBgR0ZQX05PSU9gIHRvIG1hdGNoIHRoZSBwcmVjZWRpbmcgYGJsa2dfYWxsb2NgIGNhbGwgYW5kIGF2b2lkIHBvdGVudGlhbCBtZW1vcnkgcmVjbGFpbSBkZWFkbG9ja3MgaW4gdGhlIGJsb2NrIGxheWVyLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBsb2NraW5nL3JlY2xhaW0gaXNzdWUgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIG9yIHN0YW5kYXJkIHRlc3RpbmcpIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRlYWRsb2NrIGluIGBibGtnX2NvbmZfcHJlcGAgYnkgY2hhbmdpbmcgdGhlIGFsbG9jYXRpb24gY29udGV4dCBmcm9tIGBHRlBfS0VSTkVMYCB0byBgR0ZQX05PSU9gIGR1cmluZyBgcmFkaXhfdHJlZV9wcmVsb2FkYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBjZ3JvdXAgY29uZmlndXJhdGlvbiBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjowNi4wMDE0NjA3ODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNDk0NTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBkMTlkZjdkNjUyZWY2OGRkYWU1MDcyYTVhYjk1OThiYjVlN2QxMGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMjE6MjI6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXFxuaW5kZXggZDk2NzYxMjZjNWI1ZC4uYjk4MWE4MGJiZDk0MyAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcXG4rKysgYi9ibG9jay9ibGstY2dyb3VwLmNcXG5AQCAtODY3LDcgKzg2Nyw2IEBAIGludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuIFxcdFxcdFxcdHBhcmVudCA9IGJsa2NnX3BhcmVudChwYXJlbnQpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHQvKiBEcm9wIGxvY2tzIHRvIGRvIG5ldyBibGtnIGFsbG9jYXRpb24gd2l0aCBHRlBfS0VSTkVMLiAqL1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbiBcXG4gXFx0XFx0bmV3X2Jsa2cgPSBibGtnX2FsbG9jKHBvcywgZGlzaywgR0ZQX05PSU8pO1xcbkBAIC04NzYsNyArODc1LDcgQEAgaW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcXG4gXFx0XFx0XFx0Z290byBmYWlsX2V4aXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCkpIHtcXG4rXFx0XFx0aWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9JTykpIHtcXG4gXFx0XFx0XFx0YmxrZ19mcmVlKG5ld19ibGtnKTtcXG4gXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0Z290byBmYWlsX2V4aXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIyOjA2LjQwNzEyNjEzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMzA3OTM3NDk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJJT1NDSEVEX0JGUVwiLFxuICAgIFwiQkZRX0dST1VQX0lPU0NIRURcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrZ19jb25mX3ByZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBgYmxrZ19jb25mX3ByZXBgIGJ5IGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCBkdXJpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgY2dyb3VwIGNvbmZpZ3VyYXRpb24gcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGQxOWRmN2Q2NTJlZjY4ZGRhZTUwNzJhNWFiOTU5OGJiNWU3ZDEwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIxOjIyOjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXG5pbmRleCBkOTY3NjEyNmM1YjVkLi5iOTgxYTgwYmJkOTQzIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXG4rKysgYi9ibG9jay9ibGstY2dyb3VwLmNcbkBAIC04NjcsNyArODY3LDYgQEAgaW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbiBcdFx0XHRwYXJlbnQgPSBibGtjZ19wYXJlbnQocGFyZW50KTtcbiBcdFx0fVxuIFxuLVx0XHQvKiBEcm9wIGxvY2tzIHRvIGRvIG5ldyBibGtnIGFsbG9jYXRpb24gd2l0aCBHRlBfS0VSTkVMLiAqL1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbiBcbiBcdFx0bmV3X2Jsa2cgPSBibGtnX2FsbG9jKHBvcywgZGlzaywgR0ZQX05PSU8pO1xuQEAgLTg3Niw3ICs4NzUsNyBAQCBpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxuIFx0XHRcdGdvdG8gZmFpbF9leGl0O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCkpIHtcbitcdFx0aWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9JTykpIHtcbiBcdFx0XHRibGtnX2ZyZWUobmV3X2Jsa2cpO1xuIFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0Z290byBmYWlsX2V4aXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjowNi40MDcxMjc3MzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjAzMDMzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgcGF0Y2ggZmxvYXRpbmcgYXJvdW5kLCBhbmQgaXQncyBtYWtpbmcgYSBzZWVtaW5nbHkgc21hbGwgYnV0IHBvdGVudGlhbGx5IGNydWNpYWwgY2hhbmdlOiBzd2FwcGluZyBgR0ZQX0tFUk5FTGAgZm9yIGBHRlBfTk9JT2AgaW4gdGhlIGBibGtnX2NvbmZfcHJlcGAgZnVuY3Rpb24gd2l0aGluIGBibG9jay9ibGstY2dyb3VwLmNgLiBNeSBleHBlcnQgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGFkanVzdG1lbnQsIGxpa2VseSBhaW1lZCBhdCBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRleHQgaXNzdWUuIFRoYXQncyBhIGNsYXNzaWMgc2NlbmFyaW8sIGFuZCB0aGUgYGJsay1jZ3JvdXBgIGFyZWEgaXMgZGVmaW5pdGVseSBvbmUgdG8gYmUgY2FyZWZ1bCB3aXRoLiBUaGlzIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuIExldCdzIGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBgYmxrZ19jb25mX3ByZXBgIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhbmQgd2h5IHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeSBhbmQgZWZmZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjowOS42MTAxNjQ0MTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMDUwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrZ19jb25mX3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLWNncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz03NDc9RVhQT1JUX1NZTUJPTF9HUEwoX19ibGtnX3ByZmlsbF91NjQpO1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTc1NS0gKiBPbmNlIGluaXRpYWxpemVkLCBAY3R4IGNhbiBiZSB1c2VkIHdpdGggYmxrZ19jb25mX29wZW5fYmRldigpIGFuZFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3NTY6ICogYmxrZ19jb25mX3ByZXAoKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtNzU3LSAqL1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTgxMT1FWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfb3Blbl9iZGV2KTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MTMtLyoqXFxuYmxvY2svYmxrLWNncm91cC5jOjgxNDogKiBibGtnX2NvbmZfcHJlcCAtIHBhcnNlIGFuZCBwcmVwYXJlIGZvciBwZXItYmxrZyBjb25maWcgdXBkYXRlXFxuYmxvY2svYmxrLWNncm91cC5jLTgxNS0gKiBAYmxrY2c6IHRhcmdldCBibG9jayBjZ3JvdXBcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjctICovXFxuYmxvY2svYmxrLWNncm91cC5jOjgyODppbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjktXFx0XFx0ICAgc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzAtfVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo5MzE6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19jb25mX3ByZXApO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzItXFxuYmxvY2svYmxrLWNncm91cC5jLTkzMy0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6OTM0OiAqIGJsa2dfY29uZl91bnByZXAgLSBjb3VudGVycGFydCBvZiBibGtnX2NvbmZfcHJlcCgpXFxuYmxvY2svYmxrLWNncm91cC5jLTkzNS0gKiBAY3R4OiBibGtnX2NvbmZfY3R4IGluaXRpYWxpemVkIHdpdGggYmxrZ19jb25mX2luaXQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjowOS42NTYzNzM2MTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI5MDAxMzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGJsa2dfY29uZl9wcmVwYCoqXG5cbk9rYXksIHNvIGBibGtnX2NvbmZfcHJlcGAgaXMgZXhwb3J0ZWQuIFRoYXQgbWVhbnMgaXQncyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0g4oCTIGl0J3MgYSBwdWJsaWMgaW50ZXJmYWNlLCBlc3NlbnRpYWxseS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0cyBpbXBhY3QuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCo/IFVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODEyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MTIuNzg1Mzc3OTk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzIzNzA0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrZ19jb25mX3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JmcS1jZ3JvdXAuYz0xMDU5PXN0YXRpYyBzc2l6ZV90IGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTA3NC1cXG5ibG9jay9iZnEtY2dyb3VwLmM6MTA3NTpcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV9iZnEsIFxcdTAwMjZjdHgpO1xcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMDc2LVxcdGlmIChyZXQpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9NzQ3PUVYUE9SVF9TWU1CT0xfR1BMKF9fYmxrZ19wcmZpbGxfdTY0KTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy03NTUtICogT25jZSBpbml0aWFsaXplZCwgQGN0eCBjYW4gYmUgdXNlZCB3aXRoIGJsa2dfY29uZl9vcGVuX2JkZXYoKSBhbmRcXG5ibG9jay9ibGstY2dyb3VwLmM6NzU2OiAqIGJsa2dfY29uZl9wcmVwKCkuXFxuYmxvY2svYmxrLWNncm91cC5jLTc1Ny0gKi9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz04MTE9RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19jb25mX29wZW5fYmRldik7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtODEzLS8qKlxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo4MTQ6ICogYmxrZ19jb25mX3ByZXAgLSBwYXJzZSBhbmQgcHJlcGFyZSBmb3IgcGVyLWJsa2cgY29uZmlnIHVwZGF0ZVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MTUtICogQGJsa2NnOiB0YXJnZXQgYmxvY2sgY2dyb3VwXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtODI3LSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzo4Mjg6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcXG5ibG9jay9ibGstY2dyb3VwLmMtODI5LVxcdFxcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtOTMwLX1cXG5ibG9jay9ibGstY2dyb3VwLmM6OTMxOkVYUE9SVF9TWU1CT0xfR1BMKGJsa2dfY29uZl9wcmVwKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtOTMyLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzMtLyoqXFxuYmxvY2svYmxrLWNncm91cC5jOjkzNDogKiBibGtnX2NvbmZfdW5wcmVwIC0gY291bnRlcnBhcnQgb2YgYmxrZ19jb25mX3ByZXAoKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzUtICogQGN0eDogYmxrZ19jb25mX2N0eCBpbml0aWFsaXplZCB3aXRoIGJsa2dfY29uZl9pbml0KClcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMjM9aW50IGJsa2dfY29uZl9vcGVuX2JkZXYoc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcXG5ibG9jay9ibGstY2dyb3VwLmgtMjI0LVxcdF9fY29uZF9hY3F1aXJlcygwLCBcXHUwMDI2Y3R4LVxcdTAwM2ViZGV2LVxcdTAwM2ViZF9xdWV1ZS1cXHUwMDNlcnFfcW9zX211dGV4KTtcXG5ibG9jay9ibGstY2dyb3VwLmg6MjI1OmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuYmxvY2svYmxrLWNncm91cC5oLTIyNi1cXHRcXHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTMxMzg9c3RhdGljIHNzaXplX3QgaW9jX3dlaWdodF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zMTgwLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYzozMTgxOlxcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcXHUwMDI2YmxrY2dfcG9saWN5X2lvY29zdCwgXFx1MDAyNmN0eCk7XFxuYmxvY2svYmxrLWlvY29zdC5jLTMxODItXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz04Mjc9c3RhdGljIHNzaXplX3QgaW9sYXRlbmN5X3NldF9saW1pdChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04NTQtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjg1NTpcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3ksIFxcdTAwMjZjdHgpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04NTYtXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTEzNTI9c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTM3Mi1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMzczOlxcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCwgXFx1MDAyNmN0eCk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTM3NC1cXHRpZiAocmV0KVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9MTU0MD1zdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTU2MC1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNTYxOlxcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCwgXFx1MDAyNmN0eCk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTU2Mi1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjoxNS4xMTc3NTQ0MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzgwODU4NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBzcG90dGVkIHRoaXMgcGllY2Ugb2YgY29kZSDigJMgaXQncyB1c2VkIGluIGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLCBgaW9jX3dlaWdodF93cml0ZWAsIGBpb2xhdGVuY3lfc2V0X2xpbWl0YCwgYHRnX3NldF9jb25mYCwgYW5kIGB0Z19zZXRfbGltaXRgLiBSaWdodCBhd2F5LCBJIHJlY29nbml6ZSB0aGVzZSBhcyBjZ3JvdXAgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYmxvY2sgZGV2aWNlcy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGtub3cgdGhpcyBpcyBwcmltZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIGJsb2NrIGRldmljZSBjZ3JvdXAgY29uZmlndXJhdGlvbnMgbWVhbnMgaXTigJlzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29yZSBhcmVhIHRoYXQgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcgYXR0ZW50aW9uLlxuXG5Ob3csIGJlZm9yZSBJIGRpdmUgaW50byBmdXp6aW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBldmVuIGNvbXBpbGVkIGluLiBMZXQncyBzdGFydCB3aXRoIGBibG9jay9ibGstY2dyb3VwLmNgIOKAkyBJIHNlZSBpdCdzIG9ubHkgaW5jbHVkZWQgd2hlbiBgQ09ORklHX0JMS19DR1JPVVBgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgdGhlIGBibG9jay9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHByb2NlZWQgY29uZmlkZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MTkuODk4NjE1NDQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzA2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay1jZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9MTg9b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHTElCKVxcdCs9IGJzZy1saWIub1xcbmJsb2NrL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CTEtfQ0dST1VQKVxcdCs9IGJsay1jZ3JvdXAub1xcbmJsb2NrL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CTEtfQ0dST1VQX1JXU1RBVClcXHQrPSBibGstY2dyb3VwLXJ3c3RhdC5vXFxuYmxvY2svTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICs9IGJsay1jZ3JvdXAtZmMtYXBwaWQub1xcbmJsb2NrL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXFx0Kz0gYmxrLXRocm90dGxlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MTkuOTQzMzI3Mjk4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwODg5MTk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJsb2NrIEkvTyBDZ3JvdXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYENPTkZJR19CTEtfQ0dST1VQYCwgZ29vZC4gTm93LCBsZXQncyBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGludm9sdmVkLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBpbiB0aGUgYGJsa2dfY29uZl9wcmVwYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGJsa2dfY29uZl9wcmVwYCBpdHNlbGYgYW5kIGl0cyBkaXJlY3QgY2FsbGVycywgd2hpY2ggY291bGQgaW5jbHVkZSBmdW5jdGlvbnMgbGlrZSBgYmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0YCwgYGlvY193ZWlnaHRfd3JpdGVgLCBgaW9sYXRlbmN5X3NldF9saW1pdGAsIGB0Z19zZXRfY29uZmAsIGFuZCBgdGdfc2V0X2xpbWl0YC4gQnV0IHdhaXQgYSBtaW51dGUsIHRoZSBjb2RlIHNwZWNpZmljYWxseSBtZW50aW9ucyB0aGF0IGBibGtnX2NvbmZfcHJlcGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkLCBzbyBsZXQncyBzdGFydCB0aGVyZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYGJsa2dfY29uZl9wcmVwYCBtb3JlIGNsb3NlbHksIHNwZWNpZmljYWxseSB3aXRoaW4gYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbW9kaWZpY2F0aW9uIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MjQuNDUyMjIxMzczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODI4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgyODpcXHRpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbiA4Mjk6XFx0XFx0XFx0ICAgc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcXG4gODMwOlxcdHtcXG4gODMxOlxcdFxcdHN0cnVjdCBnZW5kaXNrICpkaXNrO1xcbiA4MzI6XFx0XFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnE7XFxuIDgzMzpcXHRcXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2c7XFxuIDgzNDpcXHRcXHRpbnQgcmV0O1xcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFjdHgtXFx1MDAzZWJkZXYpKVxcbiA4Mzc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdGRpc2sgPSBjdHgtXFx1MDAzZWJkZXYtXFx1MDAzZWJkX2Rpc2s7XFxuIDg0MDpcXHRcXHRxID0gZGlzay1cXHUwMDNlcXVldWU7XFxuIDg0MTpcXHRcXG4gODQyOlxcdFxcdC8qIFByZXZlbnQgY29uY3VycmVudCB3aXRoIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCkgKi9cXG4gODQzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4gODQ0OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbiA4NDU6XFx0XFxuIDg0NjpcXHRcXHRpZiAoIWJsa2NnX3BvbGljeV9lbmFibGVkKHEsIHBvbCkpIHtcXG4gODQ3OlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbiA4NDg6XFx0XFx0XFx0Z290byBmYWlsX3VubG9jaztcXG4gODQ5OlxcdFxcdH1cXG4gODUwOlxcdFxcbiA4NTE6XFx0XFx0YmxrZyA9IGJsa2dfbG9va3VwKGJsa2NnLCBxKTtcXG4gODUyOlxcdFxcdGlmIChibGtnKVxcbiA4NTM6XFx0XFx0XFx0Z290byBzdWNjZXNzO1xcbiA4NTQ6XFx0XFxuIDg1NTpcXHRcXHQvKlxcbiA4NTY6XFx0XFx0ICogQ3JlYXRlIGJsa2dzIHdhbGtpbmcgZG93biBmcm9tIGJsa2NnX3Jvb3QgdG8gQGJsa2NnLCBzbyB0aGF0IGFsbFxcbiA4NTc6XFx0XFx0ICogbm9uLXJvb3QgYmxrZ3MgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgcGFyZW50cy5cXG4gODU4OlxcdFxcdCAqL1xcbiA4NTk6XFx0XFx0d2hpbGUgKHRydWUpIHtcXG4gODYwOlxcdFxcdFxcdHN0cnVjdCBibGtjZyAqcG9zID0gYmxrY2c7XFxuIDg2MTpcXHRcXHRcXHRzdHJ1Y3QgYmxrY2cgKnBhcmVudDtcXG4gODYyOlxcdFxcdFxcdHN0cnVjdCBibGtjZ19ncSAqbmV3X2Jsa2c7XFxuIDg2MzpcXHRcXG4gODY0OlxcdFxcdFxcdHBhcmVudCA9IGJsa2NnX3BhcmVudChibGtjZyk7XFxuIDg2NTpcXHRcXHRcXHR3aGlsZSAocGFyZW50IFxcdTAwMjZcXHUwMDI2ICFibGtnX2xvb2t1cChwYXJlbnQsIHEpKSB7XFxuIDg2NjpcXHRcXHRcXHRcXHRwb3MgPSBwYXJlbnQ7XFxuIDg2NzpcXHRcXHRcXHRcXHRwYXJlbnQgPSBibGtjZ19wYXJlbnQocGFyZW50KTtcXG4gODY4OlxcdFxcdFxcdH1cXG4gODY5OlxcdFxcbiA4NzA6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZxLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gODcxOlxcdFxcbiA4NzI6XFx0XFx0XFx0bmV3X2Jsa2cgPSBibGtnX2FsbG9jKHBvcywgZGlzaywgR0ZQX05PSU8pO1xcbiA4NzM6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFuZXdfYmxrZykpIHtcXG4gODc0OlxcdFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDg3NTpcXHRcXHRcXHRcXHRnb3RvIGZhaWxfZXhpdDtcXG4gODc2OlxcdFxcdFxcdH1cXG4gODc3OlxcdFxcbiA4Nzg6XFx0XFx0XFx0aWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9JTykpIHtcXG4gODc5OlxcdFxcdFxcdFxcdGJsa2dfZnJlZShuZXdfYmxrZyk7XFxuIDg4MDpcXHRcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiA4ODE6XFx0XFx0XFx0XFx0Z290byBmYWlsX2V4aXQ7XFxuIDg4MjpcXHRcXHRcXHR9XFxuIDg4MzpcXHRcXG4gODg0OlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbiA4ODU6XFx0XFxuIDg4NjpcXHRcXHRcXHRpZiAoIWJsa2NnX3BvbGljeV9lbmFibGVkKHEsIHBvbCkpIHtcXG4gODg3OlxcdFxcdFxcdFxcdGJsa2dfZnJlZShuZXdfYmxrZyk7XFxuIDg4ODpcXHRcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4gODg5OlxcdFxcdFxcdFxcdGdvdG8gZmFpbF9wcmVsb2FkZWQ7XFxuIDg5MDpcXHRcXHRcXHR9XFxuIDg5MTpcXHRcXG4gODkyOlxcdFxcdFxcdGJsa2cgPSBibGtnX2xvb2t1cChwb3MsIHEpO1xcbiA4OTM6XFx0XFx0XFx0aWYgKGJsa2cpIHtcXG4gODk0OlxcdFxcdFxcdFxcdGJsa2dfZnJlZShuZXdfYmxrZyk7XFxuIDg5NTpcXHRcXHRcXHR9IGVsc2Uge1xcbiA4OTY6XFx0XFx0XFx0XFx0YmxrZyA9IGJsa2dfY3JlYXRlKHBvcywgZGlzaywgbmV3X2Jsa2cpO1xcbiA4OTc6XFx0XFx0XFx0XFx0aWYgKElTX0VSUihibGtnKSkge1xcbiA4OTg6XFx0XFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihibGtnKTtcXG4gODk5OlxcdFxcdFxcdFxcdFxcdGdvdG8gZmFpbF9wcmVsb2FkZWQ7XFxuIDkwMDpcXHRcXHRcXHRcXHR9XFxuIDkwMTpcXHRcXHRcXHR9XFxuIDkwMjpcXHRcXG4gOTAzOlxcdFxcdFxcdHJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTtcXG4gOTA0OlxcdFxcbiA5MDU6XFx0XFx0XFx0aWYgKHBvcyA9PSBibGtjZylcXG4gOTA2OlxcdFxcdFxcdFxcdGdvdG8gc3VjY2VzcztcXG4gOTA3OlxcdFxcdH1cXG4gOTA4OlxcdHN1Y2Nlc3M6XFxuIDkwOTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4gOTEwOlxcdFxcdGN0eC1cXHUwMDNlYmxrZyA9IGJsa2c7XFxuIDkxMTpcXHRcXHRyZXR1cm4gMDtcXG4gOTEyOlxcdFxcbiA5MTM6XFx0ZmFpbF9wcmVsb2FkZWQ6XFxuIDkxNDpcXHRcXHRyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7XFxuIDkxNTpcXHRmYWlsX3VubG9jazpcXG4gOTE2OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cS1cXHUwMDNlcXVldWVfbG9jayk7XFxuIDkxNzpcXHRmYWlsX2V4aXQ6XFxuIDkxODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4gOTE5OlxcdFxcdC8qXFxuIDkyMDpcXHRcXHQgKiBJZiBxdWV1ZSB3YXMgYnlwYXNzaW5nLCB3ZSBzaG91bGQgcmV0cnkuICBEbyBzbyBhZnRlciBhXFxuIDkyMTpcXHRcXHQgKiBzaG9ydCBtc2xlZXAoKS4gIEl0IGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgcXVldWVcXG4gOTIyOlxcdFxcdCAqIGNhbiBiZSBieXBhc3NpbmcgZm9yIHNvbWUgdGltZSBhbmQgaXQncyBhbHdheXMgbmljZSB0b1xcbiA5MjM6XFx0XFx0ICogYXZvaWQgYnVzeSBsb29waW5nLlxcbiA5MjQ6XFx0XFx0ICovXFxuIDkyNTpcXHRcXHRpZiAocmV0ID09IC1FQlVTWSkge1xcbiA5MjY6XFx0XFx0XFx0bXNsZWVwKDEwKTtcXG4gOTI3OlxcdFxcdFxcdHJldCA9IHJlc3RhcnRfc3lzY2FsbCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjoyNC40NTIzNjMxMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjAxMjc1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBibGtnX2NvbmZfcHJlcGAgRnVuY3Rpb24gYW5kIGl0cyBDb25maWd1cmF0aW9uIENvbnRleHQqKlxuXG5Pa2F5LCBzbyB0aGUgYGJsa2dfY29uZl9wcmVwYCBmdW5jdGlvbiBpcyB0aGUga2V5IGFyZWEgSSBuZWVkIHRvIGZvY3VzIG9uLiBCYXNlZCBvbiB0aGUgY2FsbCBncmFwaCwgaXQncyBiZWluZyB1c2VkIGJ5IGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLCBgaW9jX3dlaWdodF93cml0ZWAsIGBpb2xhdGVuY3lfc2V0X2xpbWl0YCwgYHRnX3NldF9jb25mYCwgYW5kIGB0Z19zZXRfbGltaXRgLiBSaWdodCwgYWxsIG9mIHRob3NlIGFyZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGJsb2NrIGNncm91cHMg4oCTIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gR2l2ZW4gaXRzIGNlbnRyYWwgcm9sZSBpbiB0aGVzZSBjb25maWd1cmF0aW9uIHBhdGh3YXlzLCBpdCBtYWtlcyBzZW5zZSB0byBpbmNsdWRlIGBibGtnX2NvbmZfcHJlcGAgaW4gRm9jdXNTeW1ib2xzIGZvciBjbGFyaXR5IGFuZCBxdWljayBhY2Nlc3MuIEZ1cnRoZXJtb3JlLCBJIG5lZWQgdG8gYWRkIGBCTEtfQ0dST1VQYCBpbiBjb25maWdzIHRvby5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIGFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gY2hlY2sgaWYgYEJMS19DR1JPVVBgIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBsb29rIGludG8gdGhhdCBub3cuIFRoaXMgbWlnaHQgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIGFueSBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMgb3IgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjoyOC4yMTQzNzg1MTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTkxMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MjguMjYyOTc2MzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3MjgwMTA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqQ29uZmlndXJhdGlvbiBDaGVja3BvaW50OiBCTEtfQ0dST1VQKipcblxuT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBhYm91dCBzb21ldGhpbmcgY3J1Y2lhbC4gSSdtIGZvY3VzaW5nIG9uIGJsb2NrIGRldmljZSBjZ3JvdXBzLCBhbmQgSSBoYXZlIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBzcGVjaWZpY2FsbHkgYEJMS19DR1JPVVBgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgdGhlIGBibG9jay9LY29uZmlnYCBmaWxlLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYmxvY2sgbGF5ZXIgY29uZmlndXJhdGlvbiwgYW5kIEkgY2FuJ3QgYWZmb3JkIGFueSBhc3N1bXB0aW9ucyBoZXJlLiBHb3R0YSBiZSBwcmVjaXNlLiBBIHF1aWNrIGdsYW5jZSBhdCB0aGF0IEtjb25maWcgZmlsZSB3aWxsIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgQkxLX0NHUk9VUGAgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBwcmVyZXF1aXNpdGUgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBkaXZpbmcgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9yIGFueSByZWxhdGVkIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIwNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIyOjMxLjEzNTc3OTYyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0ODI5MzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG4tLVxcbmluaXQvS2NvbmZpZz0xMDk5PWNvbmZpZyBNRU1DR19WMVxcbi0tXFxuaW5pdC9LY29uZmlnLTExMTUtXFxuaW5pdC9LY29uZmlnOjExMTY6Y29uZmlnIEJMS19DR1JPVVBcXG5pbml0L0tjb25maWctMTExNy1cXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjozMy4zODQwNzY4MDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMjM4NzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gdGhlIGlzc3VlIHNlZW1zIHRvIGJlIGNvbmZpZ3VyYXRpb24tcmVsYXRlZC4gTXkgaW5pdGlhbCBpbnR1aXRpb24gcG9pbnRzIG1lIHRvd2FyZHMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kLCBiYXNlZCBvbiBleHBlcmllbmNlLCBteSBtb25leSdzIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBzcG90IGZvciBpbml0aWFsaXppbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGRlZmluZWQgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgb3B0aW9uIGRlZmluaXRpb24gb3IgYSBsaWtlbHkgaW5jbHVkZSBmaWxlIHJlbGF0ZWQgdG8gbXkgcHJvYmxlbS4gTGV0J3Mgc2VlIGlmIHRoZSBjb25maWd1cmF0aW9uIGtleSBpcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MzYuMzA2NDY3MTcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTExMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTExMDpcXHRcXHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcXG4xMTExOlxcdFxcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxcbjExMTI6XFx0XFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXFxuMTExMzpcXHRcXG4xMTE0OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjExMTU6XFx0XFxuMTExNjpcXHRjb25maWcgQkxLX0NHUk9VUFxcbjExMTc6XFx0XFx0Ym9vbCBcXFwiSU8gY29udHJvbGxlclxcXCJcXG4xMTE4OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4xMTE5OlxcdFxcdGRlZmF1bHQgblxcbjExMjA6XFx0XFx0aGVscFxcbjExMjE6XFx0XFx0R2VuZXJpYyBibG9jayBJTyBjb250cm9sbGVyIGNncm91cCBpbnRlcmZhY2UuIFRoaXMgaXMgdGhlIGNvbW1vblxcbjExMjI6XFx0XFx0Y2dyb3VwIGludGVyZmFjZSB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB2YXJpb3VzIElPIGNvbnRyb2xsaW5nXFxuMTEyMzpcXHRcXHRwb2xpY2llcy5cXG4xMTI0OlxcdFxcbjExMjU6XFx0XFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxcbjExMjY6XFx0XFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxcbjExMjc6XFx0XFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXFxuMTEyODpcXHRcXHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXFxuMTEyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MzYuMzA2Njc1NTgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjM5ODk5OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlcGVuZGVuY2llcyBhbmQgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBCTEtfQ0dST1VQYCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGJ1aWx0IG9uIHRvcCBvZiBgQkxPQ0tgLiBNYWtlcyBzZW5zZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29udGV4dC4gR290dGEgYmUgdGhvcm91Z2guIE5vdywgbGV0J3Mgc2VlLCB3aGF0IG1vZHVsZXMgYXJlIGFjdHVhbGx5ICp1c2luZyogdGhpcz8gUmlnaHQsIHRoZSBjb2RlIGZvciBgYmxrZ19jb25mX3ByZXBgIGlzIGluIGBibG9jay9iZnEtY2dyb3VwLmNgLCBgYmxvY2svYmxrLWlvY29zdC5jYCwgYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AsIGFuZCBgYmxvY2svYmxrLXRocm90dGxlLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhlc2UgZmlsZXMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhvc2UgZmlsZXMgdG8gdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgdHJpZ2dlciB0aGVtLCB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgYXJlLiBUaGF0J2xsIHRlbGwgbWUgd2hlbiBhbmQgd2h5IHRoZXNlIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6NDkuNTQ2NTc5MDI2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI1Njc0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiZnEtY2dyb3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTI3PW9iai0kKENPTkZJR19NUV9JT1NDSEVEX0tZQkVSKVxcdCs9IGt5YmVyLWlvc2NoZWQub1xcbmJsb2NrL01ha2VmaWxlOjI4OmJmcS15XFx0XFx0XFx0XFx0Oj0gYmZxLWlvc2NoZWQubyBiZnEtd2YycS5vIGJmcS1jZ3JvdXAub1xcbmJsb2NrL01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19JT1NDSEVEX0JGUSlcXHQrPSBiZnEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjo0OS41OTI4NDA0NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MDkwMTUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkluaXRpYWwgVGhvdWdodHMgb24gQ09ORklHX0lPU0NIRURfQkZRKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfSU9TQ0hFRF9CRlFgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgbGV0J3MgYnJlYWsgaXQgZG93bi4gSXQncyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgQnVkZ2V0IEZhaXIgUXVldWVpbmcgSS9PIHNjaGVkdWxlciDigJMgQkZRLiBUaGUgaW1wb3J0YW5jZSBpcyBjbGVhcjogaXTigJlzIGFib3V0IGNvbnRyb2xsaW5nIGhvdyBJL08gcmVxdWVzdHMgYXJlIHByaW9yaXRpemVkIGFuZCBoYW5kbGVkIGF0IHRoZSBibG9jayBsYXllci4gTm93LCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGUgbnVhbmNlcyBoZXJlLiBBY3RpdmF0aW5nIHRoaXMgaW1wbGllcyB3ZSB3YW50IHRvIGxldmVyYWdlIEJGUeKAmXMgc3RyZW5ndGggaW4gaGFuZGxpbmcgaGVhdnkgSS9PIHdvcmtsb2FkcywgZXNwZWNpYWxseSB0aG9zZSBjb21tb24gaW4gaW50ZXJhY3RpdmUgZGVza3RvcCBlbnZpcm9ubWVudHMgb3IgY29udGFpbmVyaXplZCBzZXR1cHMuIEl0J3MgYWJvdXQgZW5zdXJpbmcgZmFpcm5lc3MgYW5kIHJlc3BvbnNpdmVuZXNzLCBldmVuIHdoZW4gdGhlcmUncyBpbnRlbnNlIGRpc2sgY29udGVudGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gcGVyZm9ybWFuY2UsIGxhdGVuY3ksIGFuZCBvdmVyYWxsIHRocm91Z2hwdXQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSB3b3JrbG9hZCBjaGFyYWN0ZXJpc3RpY3MgYmVmb3JlIGVuYWJsaW5nIHRoaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGV2ZW4gdGhvdWdoIHRoaXMgaXMgZW5hYmxlZCB0aHJvdWdoIGEgY29uZmlnIG9wdGlvbiwgaXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBib290IHBhcmFtZXRlcnMuIFVsdGltYXRlbHksIGVuYWJsaW5nIHRoaXMgY29uZmlnIG9wdGlvbiBpcyB0aGUgZmlyc3Qgc3RlcCwgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcHMgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBob3cgdG8gb3B0aW1pemUgYW5kIG1vbml0b3IgdGhpcyBzY2hlZHVsZXIgZm9yIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6NTIuOTMzNzQ0NTU3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAzNzI0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGstaW9jb3N0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcXHQrPSBibGstaW9sYXRlbmN5Lm9cXG5ibG9jay9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QpXFx0Kz0gYmxrLWlvY29zdC5vXFxuYmxvY2svTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX01RX0lPU0NIRURfREVBRExJTkUpXFx0Kz0gbXEtZGVhZGxpbmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjo1Mi45Nzk3ODY4NjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzNTQ0OTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqQmxvY2sgSS9PIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RgLCBgQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGlzIHNjcmVhbWluZyBcInRocm90dGxpbmchXCIgYW5kIGl0J3MgcHVsbGluZyBtZSB0b3dhcmRzIHRoZSBhcmVhIG9mIGJsb2NrIEkvTyBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY2dyb3VwcyBhbmQgdGhyb3R0bGluZyBtZWNoYW5pc21zLiBHaXZlbiB0aGVzZSB0aHJlZSBjb25maWcgb3B0aW9ucywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZmluZCB0aGUgYmxvY2sgSS9PIHRocm90dGxlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggYSBzdGFuZGFyZCBwb2ludCBvZiByZWZlcmVuY2UsIHRoZSBgYmxvY2svTWFrZWZpbGVgLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBgYmxrLXRocm90dGxlYCBtb2R1bGUsIG9yIHJlbGF0ZWQgbG9naWMsIHNob3VsZCBiZSBkZWZpbmVkIG9yIGF0IGxlYXN0IHJlZmVyZW5jZWQgd2l0aGluIHRoZSBgTWFrZWZpbGVgIGl0c2VsZi4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGNvbXBpbGVkIGFuZCBsaW5rZWQsIGFuZCBob3cgdGhlc2UgY29uZmlnIG9wdGlvbnMgcGxheSBhIHBhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNDMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjo1Ni40MTUyMzkyNzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTU2MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay10aHJvdHRsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9NYWtlZmlsZT0yMT1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9GQ19BUFBJRCkgKz0gYmxrLWNncm91cC1mYy1hcHBpZC5vXFxuYmxvY2svTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0JMS19ERVZfVEhST1RUTElORylcXHQrPSBibGstdGhyb3R0bGUub1xcbmJsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcXHQrPSBibGstaW9wcmlvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6NTYuNDYxMjAzMDIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODkzODc3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbnM6IGBCTEtfQ0dST1VQYCwgYElPU0NIRURfQkZRYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBCTEtfREVWX1RIUk9UVExJTkdgLiBUaGV5IHNlZW0gbGlrZSBhIHJlbGV2YW50IHNldCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBjZ3JvdXBzIGFuZCBJL08gc2NoZWR1bGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byBlYWNoIG90aGVyLCBzbyBmaXJzdCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBkZXBlbmRlbmN5IGNoZWNrcy4gQXJlIGFueSBvZiB0aGVzZSByZWxpYW50IG9uIGFub3RoZXI/IEFueSBjYXNjYWRpbmcgZWZmZWN0cyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzICpjcnVjaWFsKiBiZWZvcmUgSSBzdGFydCBtYWtpbmcgY2hhbmdlcyBvciBpbnRlZ3JhdGluZyB0aGVtIGludG8gYSBuZXcgc3lzdGVtLiBUaGlzIHdpbGwgaGVscCBtZSBhdm9pZCBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb3IgaW5jb21wYXRpYmlsaXRpZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIyOjU5LjU1MDU5MzEzNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5OTc0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPU0NIRURfQkZRXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWcuaW9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnLmlvc2NoZWQ9MTA9Y29uZmlnIE1RX0lPU0NIRURfS1lCRVJcXG4tLVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0xOC1cXG5ibG9jay9LY29uZmlnLmlvc2NoZWQ6MTk6Y29uZmlnIElPU0NIRURfQkZRXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTIwLVxcdHRyaXN0YXRlIFxcXCJCRlEgSS9PIHNjaGVkdWxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6NTkuNTk2NTk3MzQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTI4OTU1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgS2NvbmZpZy5pb3NjaGVkYCBhbmQgdGhlIEJGUSBTY2hlZHVsZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBibG9jay9LY29uZmlnLmlvc2NoZWRgLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCRlEgKEJ1ZGdldCBGYWlyIFF1ZXVlaW5nKSBJL08gc2NoZWR1bGVyIGlzIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBzZWUgaG93IGl0cyBhdmFpbGFiaWxpdHkgaXMgY29udHJvbGxlZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIEkvTyBzY2hlZHVsZXIgb3B0aW9ucy4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzbyBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgcXVpY2sgc2Nhbi4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgbnVhbmNlcyBpbiB0aGUgY29uZGl0aW9ucyBmb3IgZW5hYmxpbmcgQkZRIOKAkyBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9yIGtlcm5lbCBmZWF0dXJlIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogXCJpZiBCTE9DS18uLi4gXCIsIFwiZGVwZW5kcyBvbi4uLlwiLCBhbmQgXCJzZWxlY3QuLi5cIiBzdGF0ZW1lbnRzLiBLbm93aW5nIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjcnVjaWFsIGZvciBhbnkgZXhwZXJ0IHR1bmluZyBvciB0cm91Ymxlc2hvb3RpbmcgZWZmb3J0cyBkb3duIHRoZSBsaW5lLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIG1lbnRhbCBtYXAgb2YgQkZRJ3Mgcm9sZSBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODg1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MDMuMzg5NDk2MDU4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL0tjb25maWcuaW9zY2hlZFwiLFxuICBcIkZpcnN0TGluZVwiOiAxOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxOTpcXHRjb25maWcgSU9TQ0hFRF9CRlFcXG4gIDIwOlxcdFxcdHRyaXN0YXRlIFxcXCJCRlEgSS9PIHNjaGVkdWxlclxcXCJcXG4gIDIxOlxcdFxcdHNlbGVjdCBCTEtfSUNRXFxuICAyMjpcXHRcXHRoZWxwXFxuICAyMzpcXHRcXHRCRlEgSS9PIHNjaGVkdWxlciBmb3IgQkxLLU1RLiBCRlEgZGlzdHJpYnV0ZXMgdGhlIGJhbmR3aWR0aCBvZlxcbiAgMjQ6XFx0XFx0b2YgdGhlIGRldmljZSBhbW9uZyBhbGwgcHJvY2Vzc2VzIGFjY29yZGluZyB0byB0aGVpciB3ZWlnaHRzLFxcbiAgMjU6XFx0XFx0cmVnYXJkbGVzcyBvZiB0aGUgZGV2aWNlIHBhcmFtZXRlcnMgYW5kIHdpdGggYW55IHdvcmtsb2FkLiBJdFxcbiAgMjY6XFx0XFx0YWxzbyBndWFyYW50ZWVzIGEgbG93IGxhdGVuY3kgdG8gaW50ZXJhY3RpdmUgYW5kIHNvZnRcXG4gIDI3OlxcdFxcdHJlYWwtdGltZSBhcHBsaWNhdGlvbnMuICBEZXRhaWxzIGluXFxuICAyODpcXHRcXHREb2N1bWVudGF0aW9uL2Jsb2NrL2JmcS1pb3NjaGVkLnJzdFxcbiAgMjk6XFx0XFxuICAzMDpcXHRjb25maWcgQkZRX0dST1VQX0lPU0NIRURcXG4gIDMxOlxcdCAgICAgICBib29sIFxcXCJCRlEgaGllcmFyY2hpY2FsIHNjaGVkdWxpbmcgc3VwcG9ydFxcXCJcXG4gIDMyOlxcdCAgICAgICBkZXBlbmRzIG9uIElPU0NIRURfQkZRIFxcdTAwMjZcXHUwMDI2IEJMS19DR1JPVVBcXG4gIDMzOlxcdCAgICAgICBkZWZhdWx0IHlcXG4gIDM0OlxcdCAgICAgICBzZWxlY3QgQkxLX0NHUk9VUF9SV1NUQVRcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcbiAgMzc6XFx0ICAgICAgIEVuYWJsZSBoaWVyYXJjaGljYWwgc2NoZWR1bGluZyBpbiBCRlEsIHVzaW5nIHRoZSBibGtpb1xcbiAgMzg6XFx0ICAgICAgIChjZ3JvdXBzLXYxKSBvciBpbyAoY2dyb3Vwcy12MikgY29udHJvbGxlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MDMuMzg5NTYzNTg4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTE4NDk1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBEZXBlbmRlbmNpZXM6IEJGUSBhbmQgY2dyb3VwcyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgYEJGUV9HUk9VUF9JT1NDSEVEYCBmbGFnLiBNeSBicmFpbiBpbW1lZGlhdGVseSBjb25uZWN0cyB0aGF0IHRvIGBiZnEtY2dyb3VwLm9gLiBIbW0sIHdvbmRlciBpZiBpdCdzIGEgZGlyZWN0IGRlcGVuZGVuY3k/IEJldHRlciB0byBjb25maXJtLCBlc3BlY2lhbGx5IHdpdGggaG93IHRoZXNlIHRoaW5ncyB0ZW5kIHRvIGdldCBpbnRlcnR3aW5lZCBpbiB0aGUga2VybmVsLiBMZXQgbWUganVzdCBxdWlja2x5IGRpdmUgaW50byB0aGUgYGJsb2NrL01ha2VmaWxlYCBhbmQgY29uZmlybSB3aGV0aGVyIG9yIG5vdCBJJ20gcmlnaHQuIFRoaXMgaXMgdXN1YWxseSB3aGVyZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBpcyBleHBsaWNpdGx5IHN0YXRlZC4gTm8gcG9pbnQgaW4gd2FzdGluZyB0aW1lIHVubGVzcyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDY3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzowNi40NDE0MTYzNzNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzQwNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJmcS1jZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX01RX0lPU0NIRURfS1lCRVIpXFx0Kz0ga3liZXItaW9zY2hlZC5vXFxuYmxvY2svTWFrZWZpbGU6Mjg6YmZxLXlcXHRcXHRcXHRcXHQ6PSBiZnEtaW9zY2hlZC5vIGJmcS13ZjJxLm8gYmZxLWNncm91cC5vXFxuYmxvY2svTWFrZWZpbGUtMjktb2JqLSQoQ09ORklHX0lPU0NIRURfQkZRKVxcdCs9IGJmcS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjA2LjQ4ODE2MjE2OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODMwMzIyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIERlcGVuZGVuY3kgb2YgYGJmcS1jZ3JvdXAub2AqKlxuXG5IbW0sIHNvIGl0IHNlZW1zIGxpa2UgYGJmcS1jZ3JvdXAub2AgaXMgKmFsd2F5cyogZ2V0dGluZyBidWlsdCBpZiB0aGUgYElPU0NIRURfQkZRYCBvcHRpb24gaXMgdHVybmVkIG9uLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IGJldHRlci4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHRoZSBzb3VyY2UgZmlsZSBpdHNlbGYsIHJpZ2h0PyBMZXQncyB0YWtlIGEgbG9vayBhdCBgYmxvY2svYmZxLWNncm91cC5jYCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgYW5kIGZpZ3VyZSBvdXQgd2h5LiBJdCdzIGxpa2VseSBpbiB0aGVyZSwgcmlnaHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MDkuMzE4NDg4MDI3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9iZnEtY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIGNncm91cHMgc3VwcG9ydCBmb3IgdGhlIEJGUSBJL08gc2NoZWR1bGVyLlxcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jsa2Rldi5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aW1lLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmJ0cmVlLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wcmlvLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2JpdG1hcC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdCNpbmNsdWRlIFxcXCJlbGV2YXRvci5oXFxcIlxcbiAgMTY6XFx0I2luY2x1ZGUgXFxcImJmcS1pb3NjaGVkLmhcXFwiXFxuICAxNzpcXHRcXG4gIDE4OlxcdCNpZmRlZiBDT05GSUdfQkZRX0NHUk9VUF9ERUJVR1xcbiAgMTk6XFx0c3RhdGljIGludCBiZnFfc3RhdF9pbml0KHN0cnVjdCBiZnFfc3RhdCAqc3RhdCwgZ2ZwX3QgZ2ZwKVxcbiAgMjA6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzowOS4zMTg2MTgyODdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNjE5NjM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzIGFuZCBibG9jayBJL08gc2NoZWR1bGluZzpcblxuKipDaGVja2luZyBmb3IgQkZRIEdyb3VwIFNjaGVkdWxpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIHplcm8gaW4gb24gYGJmcS1jZ3JvdXAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIEJGUSAoQnVkZ2V0IEZhaXIgUXVldWVpbmcpIEkvTyBzY2hlZHVsZXIncyBjZ3JvdXAtcmVsYXRlZCBsb2dpYyBzaG91bGQgcmVzaWRlLiBOb3csIHRoZSBrZXkgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgQkZRJ3MgZ3JvdXAgc2NoZWR1bGluZyBmZWF0dXJlcyBhcmUgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGJ1aWxkLiBUaGUgYCNpZmRlZiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXMgdGhlIHRlbGwuIEl0J3MgdGhlIGdhdGVrZWVwZXIuIEl0IGRldGVybWluZXMgd2hldGhlciBhIHNpZ25pZmljYW50IGNodW5rIG9mIHRoZSBjb2RlLCBsaWtlbHkgaW5jbHVkaW5nIHRoZSBjb3JlIG9mIGhvdyBCRlEgaW50ZXJhY3RzIHdpdGggY2dyb3VwcywgaXMgaW5jbHVkZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiBTbywgSSBuZWVkIHRvIGNoZWNrIGlmIHRoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyBhY3RpdmUuIFRoYXQgd2lsbCBkZWNpZGUgbXkgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjEyLjcyNDgxNzczNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NDEyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2JmcS1jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZnEtY2dyb3VwLmM9MjYyPXZvaWQgYmZxZ19zdGF0c19zZXRfc3RhcnRfaWRsZV90aW1lKHN0cnVjdCBiZnFfZ3JvdXAgKmJmcWcpIHsgfVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTI2NS1cXG5ibG9jay9iZnEtY2dyb3VwLmM6MjY2OiNpZmRlZiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURcXG5ibG9jay9iZnEtY2dyb3VwLmMtMjY3LVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jPTE0MDU9c3RydWN0IGNmdHlwZSBiZnFfYmxrZ19maWxlc1tdID0ge1xcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTE0MTQtXFxuYmxvY2svYmZxLWNncm91cC5jOjE0MTU6I2Vsc2VcXHQvKiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQgKi9cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQxNi1cXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNDU0PXN0cnVjdCBiZnFfZ3JvdXAgKmJmcV9jcmVhdGVfZ3JvdXBfaGllcmFyY2h5KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgaW50IG5vZGUpXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQ2Ny19XFxuYmxvY2svYmZxLWNncm91cC5jOjE0Njg6I2VuZGlmXFx0LyogQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjEyLjc3MjU2MzM4MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYwMjMwMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipCRlEgR3JvdXAgSS9PIFNjaGVkdWxlciBDb25maXJtYXRpb24qKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQgYENPTkZJR19CRlFfR1JPVVBfSU9TQ0hFRGAgZmxhZyBpcyBkZWZpbml0ZWx5IG5lY2Vzc2FyeS4gVGhhdCdzIGEgZ2l2ZW47IGl0J3MgdGhlIGZvdW5kYXRpb24gd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIE5vdywgc2luY2Ugd2UncmUgZGl2aW5nIGludG8gdGhlIHdlZWRzIHdpdGggSS9PIHNjaGVkdWxpbmcgYW5kIHRoZSBudWFuY2VzIG9mIEJGUSwgbGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgQkxLX0NHUk9VUF9JT0NPU1RgIGlzIGVuYWJsZWQgdG9vLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSBmb3IgcHJvcGVyIGNncm91cCBpbnRlZ3JhdGlvbiBhbmQgYWNjb3VudGluZy4gSXQncyBiZXN0IHRvIGJlIHRob3JvdWdoIHNpbmNlLCBhcyB3ZSBrbm93LCB0aGUgaW50ZWdyYXRpb24gb2YgQkZRIHdpdGggY2dyb3VwcyBpcyBjcml0aWNhbCB0byBnZXR0aW5nIGEgcHJvcGVybHkgYmFsYW5jZWQgSS9PIHByb2ZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODQxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MTYuMTMyNzk2OTY0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU0MjAxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTE0NT1jb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNTMtXFxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuYmxvY2svS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjE2LjE4MTM0Nzg4OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ2MTA4MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQmxvY2svS2NvbmZpZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBibG9jay9LY29uZmlnYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGFyZWEgYXJvdW5kIGBCTEtfQ0dST1VQX0lPQ09TVGAuIFJpZ2h0LCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBibG9jayBJL08gY29zdCBhY2NvdW50aW5nIHN0dWZmIGlzIGNvbmZpZ3VyZWQuIEkga25vdyB0aGlzIG1vZHVsZSwgYnV0IEkgd2FudCB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCBpdCwgb3IgbWF5YmUgSeKAmW0gdGhpbmtpbmcgYWJvdXQgc29tZSBzcGVjaWZpYyBjb2RlIHBhdGgsIG9yIGNvbnNpZGVyaW5nIGEgbmV3IGZlYXR1cmUsIG9yIGRlYnVnZ2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBJL08gYWNjb3VudGluZyB1c2luZyBjZ3JvdXBzLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGVuYWJsZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgY29uZmxpY3RzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgS2NvbmZpZyBvcHRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBibG9jayBsYXllci4gTGV0IG1lIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIGFuZCBzZWUgd2hlcmUgaXQgZml0cyB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkL2Rpc2FibGVkIGFuZCB3aHkuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaW1wYWN0IG9uIHN5c3RlbSBwZXJmb3JtYW5jZSwgb3Igd2hhdCBvdGhlciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGl0IHRvIHdvcmsuIExldCBtZSBjaGVjayB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaWYgYXZhaWxhYmxlIGFzIHdlbGwsIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnN3ZXJzIHRvIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuXG4qICAgV2hhdCBhcmUgdGhlIGRlZmF1bHQgc2V0dGluZ3M/XG4qICAgQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/XG4qICAgV2hhdCBkb2VzIHRoZSBoZWxwIHRleHQgc2F5IGFib3V0IHRoZSBmZWF0dXJlP1xuKiAgIEhvdyBpcyB0aGlzIGZlYXR1cmUgcmVsYXRlZCB0byBvdGhlciBmZWF0dXJlcz9cbiogICBXaGF0IGFyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjE5LjgyNzQ1OTk2M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1NDpcXHRjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG4gMTU1OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXFxcIlxcbiAxNTY6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDE1NzpcXHRcXHRzZWxlY3QgQkxLX1JRX0FMTE9DX1RJTUVcXG4gMTU4OlxcdFxcdGhlbHBcXG4gMTU5OlxcdFxcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIC53ZWlnaHQgaW50ZXJmYWNlIGZvciBjb3N0XFxuIDE2MDpcXHRcXHRtb2RlbCBiYXNlZCBwcm9wb3J0aW9uYWwgSU8gY29udHJvbC4gIFRoZSBJTyBjb250cm9sbGVyXFxuIDE2MTpcXHRcXHRkaXN0cmlidXRlcyBJTyBjYXBhY2l0eSBiZXR3ZWVuIGRpZmZlcmVudCBncm91cHMgYmFzZWQgb25cXG4gMTYyOlxcdFxcdHRoZWlyIHNoYXJlIG9mIHRoZSBvdmVyYWxsIHdlaWdodCBkaXN0cmlidXRpb24uXFxuIDE2MzpcXHRcXG4gMTY0OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbiAxNjU6XFx0XFx0Ym9vbCBcXFwiQ2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXFxcIlxcbiAxNjY6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDE2NzpcXHRcXHRoZWxwXFxuIDE2ODpcXHRcXHRFbmFibGUgdGhlIC5wcmlvIGludGVyZmFjZSBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzcyB0b1xcbiAxNjk6XFx0XFx0cmVxdWVzdHMuIFRoZSBJL08gcHJpb3JpdHkgY2xhc3MgYWZmZWN0cyB0aGUgb3JkZXIgaW4gd2hpY2ggYW4gSS9PXFxuIDE3MDpcXHRcXHRzY2hlZHVsZXIgYW5kIGJsb2NrIGRldmljZXMgcHJvY2VzcyByZXF1ZXN0cy4gT25seSBzb21lIEkvTyBzY2hlZHVsZXJzXFxuIDE3MTpcXHRcXHRhbmQgc29tZSBibG9jayBkZXZpY2VzIHN1cHBvcnQgSS9PIHByaW9yaXRpZXMuXFxuIDE3MjpcXHRcXG4gMTczOlxcdGNvbmZpZyBCTEtfREVCVUdfRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MTkuODI3NTQ1MTMzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTIxOTEzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGlzc3VlLiBMZXQncyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtOiBsYXRlbmN5IHdpdGhpbiBjZ3JvdXBzIGFuZCBzcGVjaWZpY2FsbHkgaG93IEkvTyBpcyBnZXR0aW5nIHNjaGVkdWxlZC4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoYXQgdGhpcyBjZ3JvdXAgbWV0cmljIGlzICphY3R1YWxseSogbWVhc3VyaW5nLiBJcyBpdCBwdXJlLCBvciBpcyBpdCBnb2luZyB0byBoYXZlIHNvbWUgY2F2ZWF0cz8gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IHZlcnNpb24gb2YgdGhlIGtlcm5lbCBhbSBJIG9uPyBBcmUgd2UgZGVhbGluZyB3aXRoIGJsb2NrIGRldmljZXMsIGFuZCBtb3JlIHNwZWNpZmljYWxseSB3aGF0IGlzIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2U/XG5cbkknbSB0aGlua2luZzogSG93IHdlbGwgaXMgdGhlIEkvTyBzY2hlZHVsZXIgYmVoYXZpbmcgd2l0aGluIHRoZSBjZ3JvdXAgaGllcmFyY2h5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3MsIG9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIG51YW5jZWQsIHBlcmhhcHMgaW52b2x2aW5nIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGxheWVycz8gSXMgdGhpcyBhbiBhYnNvbHV0ZSBtZXRyaWMsIG9yIGFyZSB3ZSBqdXN0IGxvb2tpbmcgYXQgdGhlIGRlbHRhcz8gRG9lcyB0aGlzIG1ldHJpYyBhY2NvdW50IGZvciByZWFkcyAqYW5kKiB3cml0ZXM/XG5cblJpZ2h0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyB0aGUgYmFzZWxpbmUgbWVhc3VyZW1lbnRzIGFuZCBzdGFydCB0byBjb21wYXJlIHRvIHRoZSBjb250cm9sIGdyb3VwLiBUaGVuIEknbSBnb2luZyB0byB3YW50IHRvIGNvcnJlbGF0ZSB0aGUgZGF0YSBmcm9tIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAgd2l0aCBvdGhlciByZWxldmFudCBtZXRyaWNzLCBsaWtlIEkvTyBxdWV1ZSBsZW5ndGggYW5kIENQVSB1dGlsaXphdGlvbiB3aXRoaW4gdGhlIGFmZmVjdGVkIGNncm91cCBhbmQgYXQgdGhlIHN5c3RlbS13aWRlIGxldmVsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbW1hbmRzIEkgbmVlZCB0byBydW4gdG8gZ2V0IGEgaG9saXN0aWMgdmlldy4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gYW5kIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgc2FtcGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjI0LjYzOTczOTM5N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzNDpcXHRjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXFxcIlxcbiAxMzY6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDEzNzpcXHRcXHRoZWxwXFxuIDEzODpcXHRcXHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSAubGF0ZW5jeSBpbnRlcmZhY2UgZm9yIElPIHRocm90dGxpbmcuXFxuIDEzOTpcXHRcXHRUaGUgSU8gY29udHJvbGxlciB3aWxsIGF0dGVtcHQgdG8gbWFpbnRhaW4gYXZlcmFnZSBJTyBsYXRlbmNpZXMgYmVsb3dcXG4gMTQwOlxcdFxcdHRoZSBjb25maWd1cmVkIGxhdGVuY3kgdGFyZ2V0LCB0aHJvdHRsaW5nIGFueWJvZHkgd2l0aCBhIGhpZ2hlciBsYXRlbmN5XFxuIDE0MTpcXHRcXHR0YXJnZXQgdGhhbiB0aGUgdmljdGltaXplZCBncm91cC5cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0Tm90ZSwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW50ZXJmYWNlIGFuZCBjb3VsZCBiZSBjaGFuZ2VkIHNvbWVkYXkuXFxuIDE0NDpcXHRcXG4gMTQ1OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuIDE0NjpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1xcXCJcXG4gMTQ3OlxcdFxcdGRlcGVuZHMgb24gQkxLX0NHUk9VUCBcXHUwMDI2XFx1MDAyNiBOVk1FX0ZDXFxuIDE0ODpcXHRcXHRoZWxwXFxuIDE0OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIHRyYWZmaWMgYWNyb3NzXFxuIDE1MDpcXHRcXHQgIGNncm91cCBhcHBsaWNhdGlvbnMuIEl0IGVuYWJsZXMgdGhlIEZhYnJpYyBhbmQgdGhlIHN0b3JhZ2UgdGFyZ2V0cyB0b1xcbiAxNTE6XFx0XFx0ICBpZGVudGlmeSwgbW9uaXRvciwgYW5kIGhhbmRsZSBGQyB0cmFmZmljIGJhc2VkIG9uIFZNIHRhZ3MgYnkgaW5zZXJ0aW5nXFxuIDE1MjpcXHRcXHQgIGFwcGxpY2F0aW9uIHNwZWNpZmljIGlkZW50aWZpY2F0aW9uIGludG8gdGhlIEZDIGZyYW1lLlxcbiAxNTM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjI0LjYzOTgyNjA3N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDcxMzkwNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIFRocm90dGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgYEJMS19ERVZfVEhST1RUTElOR2AuIFdoYXQncyB0aGUgY3VycmVudCBzdGF0dXMsIGFuZCB3aGVyZSBhcmUgdGhlIHBvdGVudGlhbCBwaXRmYWxscz8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSBvcHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2UgYW5kIHByZXZlbnQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBpbnZvbHZlcyBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHNlZWluZyBob3cgSSBjYW4gbW9uaXRvciB0aGUgYmxvY2sgZGV2aWNlIHRocm90dGxpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCB0cmFkZS1vZmZzIHRoYXQgaGF2ZSB0byBiZSBtYWRlIHdoZW4gaXQgY29tZXMgdG8gbWVtb3J5IGFuZCBibG9jayBkZXZpY2VzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBjYXVzaW5nIHVubmVjZXNzYXJ5IGJsb2NrIGRldmljZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjI3LjcxMTIyMDM1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI5NTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz05Nz1jb25maWcgQkxLX0RFVl9aT05FRFxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMDUtXFxuYmxvY2svS2NvbmZpZzoxMDY6Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbmJsb2NrL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIkJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjI3Ljc1NjUyMjcyNloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIxOTYwOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIFRocm90dGxpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIGRpZyBpbnRvIGBibG9jay9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYEJMS19ERVZfVEhST1RUTElOR2Agb3B0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEkvTyB0aHJvdHRsaW5nLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIFRoaXMgbWVhbnMgSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgYW55IGFzc29jaWF0ZWQgaGVscCB0ZXh0IG9yIGNvbW1lbnRzIHRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgY29uZmlndXJlcyBhbmQgY29udHJvbHMgdGhlc2UgbGltaXRzLiBJJ20gbGlrZWx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGludGVyYWN0cyB3aXRoIG90aGVyIGJsb2NrIGxheWVyIGZlYXR1cmVzLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoaXMgbWF5IGxlYWQgbWUgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggcmVsYXRlZCBzb3VyY2UgY29kZSBmaWxlcyB0byBzZWUgaG93IHRoZSBrbm9icyBhcmUgdHVybmVkLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgb3B0aW9uIGluZmx1ZW5jZXMgdGhlIGJsb2NrIEkvTyBzY2hlZHVsZXIgYW5kIHJlbGF0ZWQgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzozMS40Nzg0ODYzOTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDY6XFx0Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbiAxMDc6XFx0XFx0Ym9vbCBcXFwiQmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydFxcXCJcXG4gMTA4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxcbiAxMDk6XFx0XFx0c2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXFxuIDExMDpcXHRcXHRoZWxwXFxuIDExMTpcXHRcXHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxcbiAxMTI6XFx0XFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXFxuIDExMzpcXHRcXHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcXG4gMTE0OlxcdFxcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuIDExNzpcXHRcXG4gMTE4OlxcdGNvbmZpZyBCTEtfV0JUXFxuIDExOTpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHdyaXRlYmFjayB0aHJvdHRsaW5nXFxcIlxcbiAxMjA6XFx0XFx0aGVscFxcbiAxMjE6XFx0XFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYmxvY2sgbGF5ZXIgdG8gdGhyb3R0bGUgYnVmZmVyZWRcXG4gMTIyOlxcdFxcdGJhY2tncm91bmQgd3JpdGViYWNrIGZyb20gdGhlIFZNLCBtYWtpbmcgaXQgbW9yZSBzbW9vdGggYW5kIGhhdmluZ1xcbiAxMjM6XFx0XFx0bGVzcyBpbXBhY3Qgb24gZm9yZWdyb3VuZCBvcGVyYXRpb25zLiBUaGUgdGhyb3R0bGluZyBpcyBkb25lXFxuIDEyNDpcXHRcXHRkeW5hbWljYWxseSBvbiBhbiBhbGdvcml0aG0gbG9vc2VseSBiYXNlZCBvbiBDb0RlbCwgZmFjdG9yaW5nIGluXFxuIDEyNTpcXHRcXHR0aGUgcmVhbHRpbWUgcGVyZm9ybWFuY2Ugb2YgdGhlIGRpc2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjMxLjQ3ODU1NjY3MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjAzMTc4OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbG9jayBJL08gQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN5bWJvbHMgYW5kIGNvbmZpZ3MgcG9pbnRzIHRvIGEgY2xlYXIgYXJlYSBvZiBmb2N1czogYmxvY2sgSS9PIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBsZXZlcmFnaW5nIGNncm91cHMuIFRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEknbSBzZWVpbmcgKGBCTEtfQ0dST1VQYCwgYElPU0NIRURfQkZRYCwgYEJGUV9HUk9VUF9JT1NDSEVEYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBCTEtfREVWX1RIUk9UVExJTkdgKSBpbW1lZGlhdGVseSBwYWludCBhIHBpY3R1cmUgb2YgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBJL08gc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiBhdCBhIHBlci1jZ3JvdXAgbGV2ZWwuIFdlJ3JlIGNsZWFybHkgZGl2aW5nIGludG8gdGhlIHJlYWxtIG9mIGJhbmR3aWR0aCBjb250cm9sLCBsYXRlbmN5IG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgaW50ZWdyYXRpb24gd2l0aCB0aGUgQnVkZ2V0IEZhaXIgUXVldWUgKEJGUSkgc2NoZWR1bGVyLlxuXG5UaGUgZnVuY3Rpb24gc3ltYm9scyBsaXN0ZWQgLSBgYmxrZ19jb25mX3ByZXBgLCBgYmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0YCwgYGlvY193ZWlnaHRfd3JpdGVgLCBgaW9sYXRlbmN5X3NldF9saW1pdGAsIGB0Z19zZXRfY29uZmAsIGFuZCBgdGdfc2V0X2xpbWl0YCAtIGFyZSB0aGUgc3BlY2lmaWMgXCJob29rc1wiIHRoYXQgaW1wbGVtZW50IHRoaXMgZnVuY3Rpb25hbGl0eS4gRWFjaCBnaXZlcyBhbiBpbmRpY2F0aW9uIG9mIGhvdyBlYWNoIGZlYXR1cmUgaXMgY29ubmVjdGVkLCB3aXRoIGEgY2xlYXIgZm9jdXMgb24gc2V0dGluZ3MgYW5kIGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLiBVbmRlcnN0YW5kaW5nIHdoZXRoZXIgdGhpcyBpcyBzdGF0aWMgb3IgZHluYW1pY2FsbHkgY29uZmlndXJlZCBhdCBydW50aW1lIGlzIGNydWNpYWwuIEl0J2xsIGRpcmVjdGx5IGltcGFjdCBob3cgZmxleGlibGUgYW5kIGFkYXB0aXZlIG91ciBJL08gbWFuYWdlbWVudCBzdHJhdGVneSBjYW4gYmUuIElzIHRoaXMgYSBvbmUtdGltZSBzZXR1cCwgb3IgY2FuIHdlaWdodHMgYmUgYWRqdXN0ZWQgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgd29ya2xvYWQgZGVtYW5kcz8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzozNi4wODE3Mzc5NTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjc1OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJmcV9pb19zZXRfZGV2aWNlX3dlaWdodFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9iZnEtY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmZxLWNncm91cC5jPTEwMzM9c3RhdGljIGludCBiZnFfaW9fc2V0X3dlaWdodF9sZWdhY3koc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMDU4LVxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMDU5OnN0YXRpYyBzc2l6ZV90IGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuYmxvY2svYmZxLWNncm91cC5jLTEwNjAtXFx0XFx0XFx0XFx0XFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jPTExMDY9c3RhdGljIHNzaXplX3QgYmZxX2lvX3NldF93ZWlnaHQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTExMjItXFxuYmxvY2svYmZxLWNncm91cC5jOjExMjM6XFx0cmV0dXJuIGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodChvZiwgYnVmLCBuYnl0ZXMsIG9mZik7XFxuYmxvY2svYmZxLWNncm91cC5jLTExMjQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzozNi4xMjYwMTk4MzNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MDYzOTczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipTdGF0aWMgU3ltYm9sIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGlzLCBteSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIHN0YXRpYyBlbGVtZW50IGlzbid0IHN1aXRhYmxlIGFzIGEgZm9jdXMgc3ltYm9sLiBXZSBuZWVkIHNvbWV0aGluZyBkeW5hbWljIGFuZCByZXNwb25zaXZlIHRvIGNoYW5nZXMsIGFuZCBhIHN0YXRpYyB2YWx1ZSBqdXN0IGlzbid0IGdvaW5nIHRvIGN1dCBpdC4gV2UgbmVlZCBzb21ldGhpbmcgdGhhdCBjYW4gdHJhY2sgdGhlIHN0YXRlIG9yIHRoZSBjaGFuZ2UgaXRzZWxmLlxuXG5Pa2F5LCBsZXQncyBwaXZvdC4gV2hhdCBhYm91dCBgaW9jX3dlaWdodF93cml0ZWA/IFBlcmhhcHMgdGhhdCBjb250YWlucyB0aGUgbmVjZXNzYXJ5IGR5bmFtaWMgYmVoYXZpb3IuIFdlIHNob3VsZCBiZSBleGFtaW5pbmcgd2hhdCB0aGlzIHBvdGVudGlhbCBzeW1ib2wgZG9lcyAtIGRvZXMgaXQgZ2l2ZSB1cyBhIGNoYW5naW5nIHRhcmdldCB0byBmb2xsb3c/IEl0J3MgdGltZSB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhhdCB3aWxsIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjQyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MzkuMTE2NjYyMTU0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE3MjExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2Nfd2VpZ2h0X3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1pb2Nvc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstaW9jb3N0LmM9MzEyNz1zdGF0aWMgaW50IGlvY193ZWlnaHRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTMxMzctXFxuYmxvY2svYmxrLWlvY29zdC5jOjMxMzg6c3RhdGljIHNzaXplX3QgaW9jX3dlaWdodF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5ibG9jay9ibGstaW9jb3N0LmMtMzEzOS1cXHRcXHRcXHRcXHRzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTM1Njc9c3RhdGljIHN0cnVjdCBjZnR5cGUgaW9jX2ZpbGVzW10gPSB7XFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtMzU3MS1cXHRcXHQuc2VxX3Nob3cgPSBpb2Nfd2VpZ2h0X3Nob3csXFxuYmxvY2svYmxrLWlvY29zdC5jOjM1NzI6XFx0XFx0LndyaXRlID0gaW9jX3dlaWdodF93cml0ZSxcXG5ibG9jay9ibGstaW9jb3N0LmMtMzU3My1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzozOS4xNjE4NDExNzlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1ODc2ODc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBtYXR0ZXIgbXlzZWxmLCBzdWl0YWJsZSBmb3IgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBTdGF0aWMgQ29uZmlndXJhdGlvbiBJc3N1ZSoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIHN0YXRpYyBjb21wb25lbnQuIFNvbWV0aGluZydzIGNsZWFybHkgYW1pc3MuIEl0IGxvb2tzIGxpa2UgaXQncyBzdGF0aWMuLi4gYnV0IHdoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3RhdGljIG5hdHVyZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvYmxlbS4gV2hhdCBleGFjdGx5IGlzIHRoaXMgcmlnaWRpdHkgcHJldmVudGluZz9cblxuTm93LCBJIHJlY2FsbCBhIGZ1bmN0aW9uLCBgYmxrZ19jb25mX3ByZXBgLiBJcyB0aGF0IHJlbGV2YW50IHRvIHRoaXMgc2l0dWF0aW9uPyBJdCBzZWVtcyBwb3RlbnRpYWxseSB1c2VmdWwgaGVyZS4gSXQncyBvZnRlbiB1c2VkIGluIHJlbGF0ZWQgYmxvY2tzIG9mIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBibGtnX2NvbmZfcHJlcGAgZnVuY3Rpb25zIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhpcyBjb21wb25lbnQuIFBlcmhhcHMgdGhhdCdzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEknbGwgbmVlZCB0byBhbmFseXplIGl0cyBiZWhhdmlvciBpbiB0aGlzIGNvbnRleHQuIEl0J3MgbGlrZWx5IGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjQyLjEyMDYxMzM2NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5Nzk3MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrZ19jb25mX3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLWNncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz03NDc9RVhQT1JUX1NZTUJPTF9HUEwoX19ibGtnX3ByZmlsbF91NjQpO1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTc1NS0gKiBPbmNlIGluaXRpYWxpemVkLCBAY3R4IGNhbiBiZSB1c2VkIHdpdGggYmxrZ19jb25mX29wZW5fYmRldigpIGFuZFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3NTY6ICogYmxrZ19jb25mX3ByZXAoKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtNzU3LSAqL1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTgxMT1FWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfb3Blbl9iZGV2KTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MTMtLyoqXFxuYmxvY2svYmxrLWNncm91cC5jOjgxNDogKiBibGtnX2NvbmZfcHJlcCAtIHBhcnNlIGFuZCBwcmVwYXJlIGZvciBwZXItYmxrZyBjb25maWcgdXBkYXRlXFxuYmxvY2svYmxrLWNncm91cC5jLTgxNS0gKiBAYmxrY2c6IHRhcmdldCBibG9jayBjZ3JvdXBcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjctICovXFxuYmxvY2svYmxrLWNncm91cC5jOjgyODppbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjktXFx0XFx0ICAgc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzAtfVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo5MzE6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19jb25mX3ByZXApO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzItXFxuYmxvY2svYmxrLWNncm91cC5jLTkzMy0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6OTM0OiAqIGJsa2dfY29uZl91bnByZXAgLSBjb3VudGVycGFydCBvZiBibGtnX2NvbmZfcHJlcCgpXFxuYmxvY2svYmxrLWNncm91cC5jLTkzNS0gKiBAY3R4OiBibGtnX2NvbmZfY3R4IGluaXRpYWxpemVkIHdpdGggYmxrZ19jb25mX2luaXQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzo0Mi4xNjc1OTc2NloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQxOTAxODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBJTyBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgRGVhZGxvY2sgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgYmxrZ19jb25mX3ByZXBgIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGl0J3MgZXhwb3J0ZWQgaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBzb2xpZCBmb2N1cyBzeW1ib2wgZm9yIHRoaXMgYW5hbHlzaXMsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgY2FsbCBpdCwganVzdCB0byBiZSBzdXJlLCBub3BlLCBpdCdzIGNhbGxlZCBieSBzdGF0aWMgY2dyb3VwIGZpbGUgaGFuZGxlcnMsIHNvIG15IGluaXRpYWwgYXNzZXNzbWVudCBzdGFuZHMuXG5cblJpZ2h0LCBzbyBgYmxrZ19jb25mX3ByZXBgIGlzIHRoZSBwcmltYXJ5IGZvY2FsIHBvaW50LiBOb3csIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoaXMgYXJlYS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYWxsIHRoZSByZWxhdGVkIGZlYXR1cmVzIHRoYXQgYXJlIGVuYWJsZWQgYnkgY29uZmlncy4gSSBzZWUgYEJMS19DR1JPVVBgIGRlcGVuZHMgb24gYEJMT0NLYCwgYElPU0NIRURfQkZRYCBhbHNvIGRlcGVuZHMgb24gYEJMT0NLYC4gVGhlbiBgQkZRX0dST1VQX0lPU0NIRURgIHJlcXVpcmVzIGJvdGggYElPU0NIRURfQkZRYCAqYW5kKiBgQkxLX0NHUk9VUGAuIEZ1cnRoZXJtb3JlLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgYEJMS19ERVZfVEhST1RUTElOR2AgYWxsIGRlcGVuZCBvbiBgQkxLX0NHUk9VUGAuIFNvLCBhIHN1bW1hcnkgb2YgcmVsYXRlZCBjb25maWdzIGlzOlxuYEJMS19DR1JPVVBgLCBgSU9TQ0hFRF9CRlFgLCBgQkZRX0dST1VQX0lPU0NIRURgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgYEJMS19ERVZfVEhST1RUTElOR2AuXG5cbk9rLCBzbyB3aXRoIHRoYXQgY29udGV4dCwgdGhlIGNyaXRpY2FsIGNoYW5nZSBpcyBpbiB0aGUgYGJsa2dfY29uZl9wcmVwYCBmdW5jdGlvbiBpdHNlbGYsIHdoZXJlIGBHRlBfS0VSTkVMYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBHRlBfTk9JT2Agd2l0aGluIHRoZSBgcmFkaXhfdHJlZV9wcmVsb2FkYCBjYWxsLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmaXguIEJ5IHVzaW5nIGBHRlBfTk9JT2AgaW5zdGVhZCBvZiBgR0ZQX0tFUk5FTGAsIHdlJ3JlIGVmZmVjdGl2ZWx5IHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgZGVhZGxvY2suIFdlIGFyZSBwcmV2ZW50aW5nIHRoZSBzeXN0ZW0gZnJvbSBhbGxvY2F0aW5nIG1lbW9yeSBpbiBhIGNvbnRleHQgd2hlcmUgaG9sZGluZyBhIGxvY2ssIG9yIHdoZXJlIHBlcmZvcm1pbmcgSU8gd291bGQgY3JlYXRlIGlzc3Vlcy4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBJIHNob3VsZCBmb2N1cyBvbiBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0bmVzcywgYW5kIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNjMsIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjQ5LjQwOTUwMjM3M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTk1NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJJT1NDSEVEX0JGUVwiLFxuICAgIFwiQkZRX0dST1VQX0lPU0NIRURcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrZ19jb25mX3ByZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBgYmxrZ19jb25mX3ByZXBgIGJ5IGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCBkdXJpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgY2dyb3VwIGNvbmZpZ3VyYXRpb24gcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJJT1NDSEVEX0JGUVwiLFxuICAgIFwiQkZRX0dST1VQX0lPU0NIRURcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrZ19jb25mX3ByZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBgYmxrZ19jb25mX3ByZXBgIGJ5IGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCBkdXJpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgY2dyb3VwIGNvbmZpZ3VyYXRpb24gcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6NDkuNDg2NTA1ODk1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjgyMTI3NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6NDkuNDg3MTUxMDg1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkyODE0NzkxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcgaW4gYHJhZGl4X3RyZWVfcHJlbG9hZGAgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCB0byBtYXRjaCB0aGUgcHJlY2VkaW5nIGBibGtnX2FsbG9jYCBjYWxsIGFuZCBhdm9pZCBwb3RlbnRpYWwgbWVtb3J5IHJlY2xhaW0gZGVhZGxvY2tzIGluIHRoZSBibG9jayBsYXllci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9yZWNsYWltIGlzc3VlICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBzdGFuZGFyZCB0ZXN0aW5nKSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZDE5ZGY3ZDY1MmVmNjhkZGFlNTA3MmE1YWI5NTk4YmI1ZTdkMTBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMjE6MjI6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IGQ5Njc2MTI2YzViNWQuLmI5ODFhODBiYmQ5NDMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTg2Nyw3ICs4NjcsNiBAQCBpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxuIFx0XHRcdHBhcmVudCA9IGJsa2NnX3BhcmVudChwYXJlbnQpO1xuIFx0XHR9XG4gXG4tXHRcdC8qIERyb3AgbG9ja3MgdG8gZG8gbmV3IGJsa2cgYWxsb2NhdGlvbiB3aXRoIEdGUF9LRVJORUwuICovXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0XHRuZXdfYmxrZyA9IGJsa2dfYWxsb2MocG9zLCBkaXNrLCBHRlBfTk9JTyk7XG5AQCAtODc2LDcgKzg3NSw3IEBAIGludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG4gXHRcdFx0Z290byBmYWlsX2V4aXQ7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKSkge1xuK1x0XHRpZiAocmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9OT0lPKSkge1xuIFx0XHRcdGJsa2dfZnJlZShuZXdfYmxrZyk7XG4gXHRcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGZhaWxfZXhpdDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjQ5LjQ4NzE1MjExNVoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjgxNDYwNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJsb2NrIExheWVyIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9ibGstY2dyb3VwLmNgIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgYSBjaGFuZ2UgaW4gbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MuIFNwZWNpZmljYWxseSwgaW4gYGJsa2dfY29uZl9wcmVwYCwgaXQncyBzd2l0Y2hpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKWAgdG8gYHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9JTylgLiBUaGUgY29tbWVudCB0aGF0IHdhcyByZW1vdmVkLCB0aGUgb25lIGFib3V0IGRyb3BwaW5nIGxvY2tzIGJlZm9yZSBhIGBHRlBfS0VSTkVMYCBhbGxvY2F0aW9uLCBwaXF1ZWQgbXkgaW50ZXJlc3QuIFRoYXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZGVhZGxvY2sgb3IgbG9ja2RlcCBpc3N1ZSB3YXMgdGhlIGRyaXZpbmcgZmFjdG9yLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYW4gYXZvaWRhbmNlIG9mIGFsbG9jYXRpbmcgbWVtb3J5IHdpdGggYEdGUF9LRVJORUxgIGluIGEgY29udGV4dCB3aGVyZSBpdCdzIG5vdCBzYWZlLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IG1lbnRpb25lZCBkcm9wcGluZyBsb2NrcyBmaXJzdCwgd2l0aCBgc3Bpbl91bmxvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7YCByaWdodCBhYm92ZS5cblxuU28sIHRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MsIGdvaW5nIGZyb20gdGhlIHBvdGVudGlhbGx5IGJsb2NraW5nIGBHRlBfS0VSTkVMYCB0byB0aGUgbm9uLWJsb2NraW5nIGBHRlBfTk9JT2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiQ291bGQgdGhpcyBiZSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1wiIE5vcGUsIGNvbXBsZXRlbHkgZGlmZmVyZW50LiBLTVNBTiBpcyB0aGUgdG9vbCBmb3IgdGhhdCwgYW5kIEtBU0FOIGNvdmVycyBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiBUaGlzIGlzbid0IGFib3V0IGVpdGhlciBvZiB0aG9zZSBpc3N1ZXMuXG5cbkxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZmIHRvIGNvbmZpcm0gd2hhdCBJIHdhcyB0aGlua2luZy4gWWVwLCBgbmV3X2Jsa2dgIHdhcyAqYWxyZWFkeSogYmVpbmcgYWxsb2NhdGVkIHdpdGggYEdGUF9OT0lPYC4gU28sIHRoZSBpbmNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIGBuZXdfYmxrZ2AgYWxsb2NhdGlvbiBhbmQgdGhlIGByYWRpeF90cmVlX3ByZWxvYWRgIHByZWxvYWQsIHVzaW5nIGBHRlBfS0VSTkVMYCwgaXMgdGhlIGtleSBpc3N1ZSBoZXJlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYEdGUF9LRVJORUxgIHRvIHByZWxvYWQgdGhlIHJhZGl4IHRyZWUsIHdoaWNoIGNvdWxkIGJlIHByb2JsZW1hdGljIGlmIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgd2l0aGluIHRoZSBibG9jayBJL08gcGF0aC4gUmVjdXJzaW9uIGludG8gdGhlIGJsb2NrIGxheWVyIGNvdWxkIG9jY3VyIGlmIGBHRlBfS0VSTkVMYCB3ZXJlIHVzZWQuXG5cbkluIGVzc2VuY2UsIHRoaXMgaXMgZml4aW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIHJlY2xhaW0gaXNzdWUuIEJ5IGNoYW5naW5nIHRvIGBHRlBfTk9JT2AsIHdlIGF2b2lkIGFueSBwcm9ibGVtYXRpYyBibG9ja2luZyBiZWhhdmlvci4gVGhpcyBpc24ndCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk3LCJPdXRwdXRUb2tlbnMiOjEyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjU4Ljc2ODYxNTUwOFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZyBpbiBgcmFkaXhfdHJlZV9wcmVsb2FkYCBmcm9tIGBHRlBfS0VSTkVMYCB0byBgR0ZQX05PSU9gIHRvIG1hdGNoIHRoZSBwcmVjZWRpbmcgYGJsa2dfYWxsb2NgIGNhbGwgYW5kIGF2b2lkIHBvdGVudGlhbCBtZW1vcnkgcmVjbGFpbSBkZWFkbG9ja3MgaW4gdGhlIGJsb2NrIGxheWVyLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBsb2NraW5nL3JlY2xhaW0gaXNzdWUgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIG9yIHN0YW5kYXJkIHRlc3RpbmcpIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcgaW4gYHJhZGl4X3RyZWVfcHJlbG9hZGAgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCB0byBtYXRjaCB0aGUgcHJlY2VkaW5nIGBibGtnX2FsbG9jYCBjYWxsIGFuZCBhdm9pZCBwb3RlbnRpYWwgbWVtb3J5IHJlY2xhaW0gZGVhZGxvY2tzIGluIHRoZSBibG9jayBsYXllci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9yZWNsYWltIGlzc3VlICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBzdGFuZGFyZCB0ZXN0aW5nKSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowktnrk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 21:04:36 +0000 UTC FinishedAt: 2026-08-11 21:24:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED", "BLK_CGROUP_IOCOST", "BLK_CGROUP_IOLATENCY", "BLK_DEV_THROTTLING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED", "BLK_CGROUP_IOCOST", "BLK_CGROUP_IOLATENCY", "BLK_DEV_THROTTLING" ], "series_id": "ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blkg_conf_prep" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7SU9TQ0hFRF9CRlEmIzM0OywKICAgICYjMzQ7QkZRX0dST1VQX0lPU0NIRUQmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0NPU1QmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0xBVEVOQ1kmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrZ19jb25mX3ByZXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnIGluIGByYWRpeF90cmVlX3ByZWxvYWRgIGZyb20gYEdGUF9LRVJORUxgIHRvIGBHRlBfTk9JT2AgdG8gbWF0Y2ggdGhlIHByZWNlZGluZyBgYmxrZ19hbGxvY2AgY2FsbCBhbmQgYXZvaWQgcG90ZW50aWFsIG1lbW9yeSByZWNsYWltIGRlYWRsb2NrcyBpbiB0aGUgYmxvY2sgbGF5ZXIuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGxvY2tpbmcvcmVjbGFpbSBpc3N1ZSAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAgb3Igc3RhbmRhcmQgdGVzdGluZykgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRlYWRsb2NrIGluIGBibGtnX2NvbmZfcHJlcGAgYnkgY2hhbmdpbmcgdGhlIGFsbG9jYXRpb24gY29udGV4dCBmcm9tIGBHRlBfS0VSTkVMYCB0byBgR0ZQX05PSU9gIGR1cmluZyBgcmFkaXhfdHJlZV9wcmVsb2FkYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBjZ3JvdXAgY29uZmlndXJhdGlvbiBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGQxOWRmN2Q2NTJlZjY4ZGRhZTUwNzJhNWFiOTU5OGJiNWU3ZDEwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIxOjIyOjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuaW5kZXggZDk2NzYxMjZjNWI1ZC4uYjk4MWE4MGJiZDk0MyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNncm91cC5jXG5AQCAtODY3LDcgJiM0Mzs4NjcsNiBAQCBpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxuIFx0XHRcdHBhcmVudCA9IGJsa2NnX3BhcmVudChwYXJlbnQpO1xuIFx0XHR9XG4gXG4tXHRcdC8qIERyb3AgbG9ja3MgdG8gZG8gbmV3IGJsa2cgYWxsb2NhdGlvbiB3aXRoIEdGUF9LRVJORUwuICovXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0XHRuZXdfYmxrZyA9IGJsa2dfYWxsb2MocG9zLCBkaXNrLCBHRlBfTk9JTyk7XG5AQCAtODc2LDcgJiM0Mzs4NzUsNyBAQCBpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxuIFx0XHRcdGdvdG8gZmFpbF9leGl0O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCkpIHtcbiYjNDM7XHRcdGlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX05PSU8pKSB7XG4gXHRcdFx0YmxrZ19mcmVlKG5ld19ibGtnKTtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZmFpbF9leGl0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JGUV9HUk9VUF9JT1NDSEVEJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19ERVZfVEhST1RUTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRlYWRsb2NrIGluIGBibGtnX2NvbmZfcHJlcGAgYnkgY2hhbmdpbmcgdGhlIGFsbG9jYXRpb24gY29udGV4dCBmcm9tIGBHRlBfS0VSTkVMYCB0byBgR0ZQX05PSU9gIGR1cmluZyBgcmFkaXhfdHJlZV9wcmVsb2FkYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBjZ3JvdXAgY29uZmlndXJhdGlvbiBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGQxOWRmN2Q2NTJlZjY4ZGRhZTUwNzJhNWFiOTU5OGJiNWU3ZDEwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDIxOjIyOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IGQ5Njc2MTI2YzViNWQuLmI5ODFhODBiYmQ5NDMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTg2Nyw3ICYjNDM7ODY3LDYgQEAgaW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCwKIAkJCXBhcmVudCA9IGJsa2NnX3BhcmVudChwYXJlbnQpOwogCQl9CiAKLQkJLyogRHJvcCBsb2NrcyB0byBkbyBuZXcgYmxrZyBhbGxvY2F0aW9uIHdpdGggR0ZQX0tFUk5FTC4gKi8KIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiAKIAkJbmV3X2Jsa2cgPSBibGtnX2FsbG9jKHBvcywgZGlzaywgR0ZQX05PSU8pOwpAQCAtODc2LDcgJiM0Mzs4NzUsNyBAQCBpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLAogCQkJZ290byBmYWlsX2V4aXQ7CiAJCX0KIAotCQlpZiAocmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpKSB7CiYjNDM7CQlpZiAocmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9OT0lPKSkgewogCQkJYmxrZ19mcmVlKG5ld19ibGtnKTsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGZhaWxfZXhpdDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBwYXRjaCBmbG9hdGluZyBhcm91bmQsIGFuZCBpdCYjMzk7cyBtYWtpbmcgYSBzZWVtaW5nbHkgc21hbGwgYnV0IHBvdGVudGlhbGx5IGNydWNpYWwgY2hhbmdlOiBzd2FwcGluZyBgR0ZQX0tFUk5FTGAgZm9yIGBHRlBfTk9JT2AgaW4gdGhlIGBibGtnX2NvbmZfcHJlcGAgZnVuY3Rpb24gd2l0aGluIGBibG9jay9ibGstY2dyb3VwLmNgLiBNeSBleHBlcnQgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGFkanVzdG1lbnQsIGxpa2VseSBhaW1lZCBhdCBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRleHQgaXNzdWUuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNjZW5hcmlvLCBhbmQgdGhlIGBibGstY2dyb3VwYCBhcmVhIGlzIGRlZmluaXRlbHkgb25lIHRvIGJlIGNhcmVmdWwgd2l0aC4gVGhpcyBuZWVkcyB0byBiZSB1bmRlcnN0b29kLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBibGtnX2NvbmZfcHJlcGAgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhbmQgd2h5IHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeSBhbmQgZWZmZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYz03NDc9RVhQT1JUX1NZTUJPTF9HUEwoX19ibGtnX3ByZmlsbF91NjQpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy03NTUtICogT25jZSBpbml0aWFsaXplZCwgQGN0eCBjYW4gYmUgdXNlZCB3aXRoIGJsa2dfY29uZl9vcGVuX2JkZXYoKSBhbmRcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3NTY6ICogYmxrZ19jb25mX3ByZXAoKS5cbmJsb2NrL2Jsay1jZ3JvdXAuYy03NTctICovXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTgxMT1FWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfb3Blbl9iZGV2KTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtODEzLS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjgxNDogKiBibGtnX2NvbmZfcHJlcCAtIHBhcnNlIGFuZCBwcmVwYXJlIGZvciBwZXItYmxrZyBjb25maWcgdXBkYXRlXG5ibG9jay9ibGstY2dyb3VwLmMtODE1LSAqIEBibGtjZzogdGFyZ2V0IGJsb2NrIGNncm91cFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjctICovXG5ibG9jay9ibGstY2dyb3VwLmM6ODI4OmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG5ibG9jay9ibGstY2dyb3VwLmMtODI5LVx0XHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzAtfVxuYmxvY2svYmxrLWNncm91cC5jOjkzMTpFWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfcHJlcCk7XG5ibG9jay9ibGstY2dyb3VwLmMtOTMyLVxuYmxvY2svYmxrLWNncm91cC5jLTkzMy0vKipcbmJsb2NrL2Jsay1jZ3JvdXAuYzo5MzQ6ICogYmxrZ19jb25mX3VucHJlcCAtIGNvdW50ZXJwYXJ0IG9mIGJsa2dfY29uZl9wcmVwKClcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzUtICogQGN0eDogYmxrZ19jb25mX2N0eCBpbml0aWFsaXplZCB3aXRoIGJsa2dfY29uZl9pbml0KClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODEyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBibGtnX2NvbmZfcHJlcGAqKgoKT2theSwgc28gYGJsa2dfY29uZl9wcmVwYCBpcyBleHBvcnRlZC4gVGhhdCBtZWFucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0g4oCTIGl0JiMzOTtzIGEgcHVibGljIGludGVyZmFjZSwgZXNzZW50aWFsbHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgaW1wYWN0LiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGJlaW5nICpjYWxsZWQqPyBVbmRlcnN0YW5kaW5nIGl0cyB1c2FnZSBpcyBjcnVjaWFsIHRvIGdyYXNwaW5nIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZ19jb25mX3ByZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jPTEwNTk9c3RhdGljIHNzaXplX3QgYmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMTA3NC1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMDc1Olx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFx1MDAyNmJsa2NnX3BvbGljeV9iZnEsIFx1MDAyNmN0eCk7XG5ibG9jay9iZnEtY2dyb3VwLmMtMTA3Ni1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTc0Nz1FWFBPUlRfU1lNQk9MX0dQTChfX2Jsa2dfcHJmaWxsX3U2NCk7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTc1NS0gKiBPbmNlIGluaXRpYWxpemVkLCBAY3R4IGNhbiBiZSB1c2VkIHdpdGggYmxrZ19jb25mX29wZW5fYmRldigpIGFuZFxuYmxvY2svYmxrLWNncm91cC5jOjc1NjogKiBibGtnX2NvbmZfcHJlcCgpLlxuYmxvY2svYmxrLWNncm91cC5jLTc1Ny0gKi9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9ODExPUVYUE9SVF9TWU1CT0xfR1BMKGJsa2dfY29uZl9vcGVuX2JkZXYpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy04MTMtLyoqXG5ibG9jay9ibGstY2dyb3VwLmM6ODE0OiAqIGJsa2dfY29uZl9wcmVwIC0gcGFyc2UgYW5kIHByZXBhcmUgZm9yIHBlci1ibGtnIGNvbmZpZyB1cGRhdGVcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MTUtICogQGJsa2NnOiB0YXJnZXQgYmxvY2sgY2dyb3VwXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTgyNy0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzo4Mjg6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjktXHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTkzMC19XG5ibG9jay9ibGstY2dyb3VwLmM6OTMxOkVYUE9SVF9TWU1CT0xfR1BMKGJsa2dfY29uZl9wcmVwKTtcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzItXG5ibG9jay9ibGstY2dyb3VwLmMtOTMzLS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjkzNDogKiBibGtnX2NvbmZfdW5wcmVwIC0gY291bnRlcnBhcnQgb2YgYmxrZ19jb25mX3ByZXAoKVxuYmxvY2svYmxrLWNncm91cC5jLTkzNS0gKiBAY3R4OiBibGtnX2NvbmZfY3R4IGluaXRpYWxpemVkIHdpdGggYmxrZ19jb25mX2luaXQoKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMjM9aW50IGJsa2dfY29uZl9vcGVuX2JkZXYoc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjQtXHRfX2NvbmRfYWNxdWlyZXMoMCwgXHUwMDI2Y3R4LVx1MDAzZWJkZXYtXHUwMDNlYmRfcXVldWUtXHUwMDNlcnFfcW9zX211dGV4KTtcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMjU6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjYtXHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jPTMxMzg9c3RhdGljIHNzaXplX3QgaW9jX3dlaWdodF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtMzE4MC1cbmJsb2NrL2Jsay1pb2Nvc3QuYzozMTgxOlx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFx1MDAyNmJsa2NnX3BvbGljeV9pb2Nvc3QsIFx1MDAyNmN0eCk7XG5ibG9jay9ibGstaW9jb3N0LmMtMzE4Mi1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTgyNz1zdGF0aWMgc3NpemVfdCBpb2xhdGVuY3lfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04NTQtXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6ODU1Olx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3ksIFx1MDAyNmN0eCk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODU2LVx0aWYgKHJldClcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMzUyPXN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzcyLVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTM3MzpcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLCBcdTAwMjZjdHgpO1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTM3NC1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTU0MD1zdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE1NjAtXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNTYxOlx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIFx1MDAyNmN0eCk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNTYyLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTU2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIHNwb3R0ZWQgdGhpcyBwaWVjZSBvZiBjb2RlIOKAkyBpdCYjMzk7cyB1c2VkIGluIGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLCBgaW9jX3dlaWdodF93cml0ZWAsIGBpb2xhdGVuY3lfc2V0X2xpbWl0YCwgYHRnX3NldF9jb25mYCwgYW5kIGB0Z19zZXRfbGltaXRgLiBSaWdodCBhd2F5LCBJIHJlY29nbml6ZSB0aGVzZSBhcyBjZ3JvdXAgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYmxvY2sgZGV2aWNlcy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGtub3cgdGhpcyBpcyBwcmltZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBibG9jayBkZXZpY2UgY2dyb3VwIGNvbmZpZ3VyYXRpb25zIG1lYW5zIGl04oCZcyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGNvcmUgYXJlYSB0aGF0IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi4KCk5vdywgYmVmb3JlIEkgZGl2ZSBpbnRvIGZ1enppbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBldmVuIGNvbXBpbGVkIGluLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYmxvY2svYmxrLWNncm91cC5jYCDigJMgSSBzZWUgaXQmIzM5O3Mgb25seSBpbmNsdWRlZCB3aGVuIGBDT05GSUdfQkxLX0NHUk9VUGAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayB0aGUgYGJsb2NrL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gcHJvY2VlZCBjb25maWRlbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstY2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9MTg9b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHTElCKVx0JiM0Mzs9IGJzZy1saWIub1xuYmxvY2svTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0JMS19DR1JPVVApXHQmIzQzOz0gYmxrLWNncm91cC5vXG5ibG9jay9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQkxLX0NHUk9VUF9SV1NUQVQpXHQmIzQzOz0gYmxrLWNncm91cC1yd3N0YXQub1xuYmxvY2svTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICYjNDM7PSBibGstY2dyb3VwLWZjLWFwcGlkLm9cbmJsb2NrL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXHQmIzQzOz0gYmxrLXRocm90dGxlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBDT05GSUdfQkxLX0NHUk9VUGAsIGdvb2QuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW52b2x2ZWQuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBgYmxrZ19jb25mX3ByZXBgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYmxrZ19jb25mX3ByZXBgIGl0c2VsZiBhbmQgaXRzIGRpcmVjdCBjYWxsZXJzLCB3aGljaCBjb3VsZCBpbmNsdWRlIGZ1bmN0aW9ucyBsaWtlIGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLCBgaW9jX3dlaWdodF93cml0ZWAsIGBpb2xhdGVuY3lfc2V0X2xpbWl0YCwgYHRnX3NldF9jb25mYCwgYW5kIGB0Z19zZXRfbGltaXRgLiBCdXQgd2FpdCBhIG1pbnV0ZSwgdGhlIGNvZGUgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoYXQgYGJsa2dfY29uZl9wcmVwYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgbW9kaWZpZWQsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGBibGtnX2NvbmZfcHJlcGAgbW9yZSBjbG9zZWx5LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBibG9jay9ibGstY2dyb3VwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIG1vZGlmaWNhdGlvbiB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyODpcdGludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG4gODI5Olx0XHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXG4gODMwOlx0e1xuIDgzMTpcdFx0c3RydWN0IGdlbmRpc2sgKmRpc2s7XG4gODMyOlx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTtcbiA4MzM6XHRcdHN0cnVjdCBibGtjZ19ncSAqYmxrZztcbiA4MzQ6XHRcdGludCByZXQ7XG4gODM1Olx0XG4gODM2Olx0XHRpZiAoV0FSTl9PTl9PTkNFKCFjdHgtXHUwMDNlYmRldikpXG4gODM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgzODpcdFxuIDgzOTpcdFx0ZGlzayA9IGN0eC1cdTAwM2ViZGV2LVx1MDAzZWJkX2Rpc2s7XG4gODQwOlx0XHRxID0gZGlzay1cdTAwM2VxdWV1ZTtcbiA4NDE6XHRcbiA4NDI6XHRcdC8qIFByZXZlbnQgY29uY3VycmVudCB3aXRoIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCkgKi9cbiA4NDM6XHRcdG11dGV4X2xvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gODQ0Olx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4gODQ1Olx0XG4gODQ2Olx0XHRpZiAoIWJsa2NnX3BvbGljeV9lbmFibGVkKHEsIHBvbCkpIHtcbiA4NDc6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gODQ4Olx0XHRcdGdvdG8gZmFpbF91bmxvY2s7XG4gODQ5Olx0XHR9XG4gODUwOlx0XG4gODUxOlx0XHRibGtnID0gYmxrZ19sb29rdXAoYmxrY2csIHEpO1xuIDg1MjpcdFx0aWYgKGJsa2cpXG4gODUzOlx0XHRcdGdvdG8gc3VjY2VzcztcbiA4NTQ6XHRcbiA4NTU6XHRcdC8qXG4gODU2Olx0XHQgKiBDcmVhdGUgYmxrZ3Mgd2Fsa2luZyBkb3duIGZyb20gYmxrY2dfcm9vdCB0byBAYmxrY2csIHNvIHRoYXQgYWxsXG4gODU3Olx0XHQgKiBub24tcm9vdCBibGtncyBoYXZlIGFjY2VzcyB0byB0aGVpciBwYXJlbnRzLlxuIDg1ODpcdFx0ICovXG4gODU5Olx0XHR3aGlsZSAodHJ1ZSkge1xuIDg2MDpcdFx0XHRzdHJ1Y3QgYmxrY2cgKnBvcyA9IGJsa2NnO1xuIDg2MTpcdFx0XHRzdHJ1Y3QgYmxrY2cgKnBhcmVudDtcbiA4NjI6XHRcdFx0c3RydWN0IGJsa2NnX2dxICpuZXdfYmxrZztcbiA4NjM6XHRcbiA4NjQ6XHRcdFx0cGFyZW50ID0gYmxrY2dfcGFyZW50KGJsa2NnKTtcbiA4NjU6XHRcdFx0d2hpbGUgKHBhcmVudCBcdTAwMjZcdTAwMjYgIWJsa2dfbG9va3VwKHBhcmVudCwgcSkpIHtcbiA4NjY6XHRcdFx0XHRwb3MgPSBwYXJlbnQ7XG4gODY3Olx0XHRcdFx0cGFyZW50ID0gYmxrY2dfcGFyZW50KHBhcmVudCk7XG4gODY4Olx0XHRcdH1cbiA4Njk6XHRcbiA4NzA6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4gODcxOlx0XG4gODcyOlx0XHRcdG5ld19ibGtnID0gYmxrZ19hbGxvYyhwb3MsIGRpc2ssIEdGUF9OT0lPKTtcbiA4NzM6XHRcdFx0aWYgKHVubGlrZWx5KCFuZXdfYmxrZykpIHtcbiA4NzQ6XHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDg3NTpcdFx0XHRcdGdvdG8gZmFpbF9leGl0O1xuIDg3NjpcdFx0XHR9XG4gODc3Olx0XG4gODc4Olx0XHRcdGlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX05PSU8pKSB7XG4gODc5Olx0XHRcdFx0YmxrZ19mcmVlKG5ld19ibGtnKTtcbiA4ODA6XHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDg4MTpcdFx0XHRcdGdvdG8gZmFpbF9leGl0O1xuIDg4MjpcdFx0XHR9XG4gODgzOlx0XG4gODg0Olx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbiA4ODU6XHRcbiA4ODY6XHRcdFx0aWYgKCFibGtjZ19wb2xpY3lfZW5hYmxlZChxLCBwb2wpKSB7XG4gODg3Olx0XHRcdFx0YmxrZ19mcmVlKG5ld19ibGtnKTtcbiA4ODg6XHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiA4ODk6XHRcdFx0XHRnb3RvIGZhaWxfcHJlbG9hZGVkO1xuIDg5MDpcdFx0XHR9XG4gODkxOlx0XG4gODkyOlx0XHRcdGJsa2cgPSBibGtnX2xvb2t1cChwb3MsIHEpO1xuIDg5MzpcdFx0XHRpZiAoYmxrZykge1xuIDg5NDpcdFx0XHRcdGJsa2dfZnJlZShuZXdfYmxrZyk7XG4gODk1Olx0XHRcdH0gZWxzZSB7XG4gODk2Olx0XHRcdFx0YmxrZyA9IGJsa2dfY3JlYXRlKHBvcywgZGlzaywgbmV3X2Jsa2cpO1xuIDg5NzpcdFx0XHRcdGlmIChJU19FUlIoYmxrZykpIHtcbiA4OTg6XHRcdFx0XHRcdHJldCA9IFBUUl9FUlIoYmxrZyk7XG4gODk5Olx0XHRcdFx0XHRnb3RvIGZhaWxfcHJlbG9hZGVkO1xuIDkwMDpcdFx0XHRcdH1cbiA5MDE6XHRcdFx0fVxuIDkwMjpcdFxuIDkwMzpcdFx0XHRyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7XG4gOTA0Olx0XG4gOTA1Olx0XHRcdGlmIChwb3MgPT0gYmxrY2cpXG4gOTA2Olx0XHRcdFx0Z290byBzdWNjZXNzO1xuIDkwNzpcdFx0fVxuIDkwODpcdHN1Y2Nlc3M6XG4gOTA5Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gOTEwOlx0XHRjdHgtXHUwMDNlYmxrZyA9IGJsa2c7XG4gOTExOlx0XHRyZXR1cm4gMDtcbiA5MTI6XHRcbiA5MTM6XHRmYWlsX3ByZWxvYWRlZDpcbiA5MTQ6XHRcdHJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTtcbiA5MTU6XHRmYWlsX3VubG9jazpcbiA5MTY6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIDkxNzpcdGZhaWxfZXhpdDpcbiA5MTg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbiA5MTk6XHRcdC8qXG4gOTIwOlx0XHQgKiBJZiBxdWV1ZSB3YXMgYnlwYXNzaW5nLCB3ZSBzaG91bGQgcmV0cnkuICBEbyBzbyBhZnRlciBhXG4gOTIxOlx0XHQgKiBzaG9ydCBtc2xlZXAoKS4gIEl0IGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IHF1ZXVlXG4gOTIyOlx0XHQgKiBjYW4gYmUgYnlwYXNzaW5nIGZvciBzb21lIHRpbWUgYW5kIGl0JiMzOTtzIGFsd2F5cyBuaWNlIHRvXG4gOTIzOlx0XHQgKiBhdm9pZCBidXN5IGxvb3BpbmcuXG4gOTI0Olx0XHQgKi9cbiA5MjU6XHRcdGlmIChyZXQgPT0gLUVCVVNZKSB7XG4gOTI2Olx0XHRcdG1zbGVlcCgxMCk7XG4gOTI3Olx0XHRcdHJldCA9IHJlc3RhcnRfc3lzY2FsbCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGJsa2dfY29uZl9wcmVwYCBGdW5jdGlvbiBhbmQgaXRzIENvbmZpZ3VyYXRpb24gQ29udGV4dCoqCgpPa2F5LCBzbyB0aGUgYGJsa2dfY29uZl9wcmVwYCBmdW5jdGlvbiBpcyB0aGUga2V5IGFyZWEgSSBuZWVkIHRvIGZvY3VzIG9uLiBCYXNlZCBvbiB0aGUgY2FsbCBncmFwaCwgaXQmIzM5O3MgYmVpbmcgdXNlZCBieSBgYmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0YCwgYGlvY193ZWlnaHRfd3JpdGVgLCBgaW9sYXRlbmN5X3NldF9saW1pdGAsIGB0Z19zZXRfY29uZmAsIGFuZCBgdGdfc2V0X2xpbWl0YC4gUmlnaHQsIGFsbCBvZiB0aG9zZSBhcmUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgcmVsYXRlZCB0byBibG9jayBjZ3JvdXBzIOKAkyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEdpdmVuIGl0cyBjZW50cmFsIHJvbGUgaW4gdGhlc2UgY29uZmlndXJhdGlvbiBwYXRod2F5cywgaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBgYmxrZ19jb25mX3ByZXBgIGluIEZvY3VzU3ltYm9scyBmb3IgY2xhcml0eSBhbmQgcXVpY2sgYWNjZXNzLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGFkZCBgQkxLX0NHUk9VUGAgaW4gY29uZmlncyB0b28uCgpUaGUgcXVlc3Rpb24gdGhlbiBpcywgYXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBjaGVjayBpZiBgQkxLX0NHUk9VUGAgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGxvb2sgaW50byB0aGF0IG5vdy4gVGhpcyBtaWdodCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggYW55IGZ1cnRoZXIgbW9kaWZpY2F0aW9ucyBvciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4tLVxuYmxvY2svS2NvbmZpZy00MS1cbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXG5ibG9jay9LY29uZmlnLTQzLVx0Ym9vbFxuYmxvY2svS2NvbmZpZy00NC1cbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbmJsb2NrL0tjb25maWctNDYtXHRib29sXG4tLVxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNDQtXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuYmxvY2svS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTYzLVxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXG5ibG9jay9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMDQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipDb25maWd1cmF0aW9uIENoZWNrcG9pbnQ6IEJMS19DR1JPVVAqKgoKT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBhYm91dCBzb21ldGhpbmcgY3J1Y2lhbC4gSSYjMzk7bSBmb2N1c2luZyBvbiBibG9jayBkZXZpY2UgY2dyb3VwcywgYW5kIEkgaGF2ZSB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgc3BlY2lmaWNhbGx5IGBCTEtfQ0dST1VQYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSB0aGUgYGJsb2NrL0tjb25maWdgIGZpbGUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYmxvY2sgbGF5ZXIgY29uZmlndXJhdGlvbiwgYW5kIEkgY2FuJiMzOTt0IGFmZm9yZCBhbnkgYXNzdW1wdGlvbnMgaGVyZS4gR290dGEgYmUgcHJlY2lzZS4gQSBxdWljayBnbGFuY2UgYXQgdGhhdCBLY29uZmlnIGZpbGUgd2lsbCBjb25maXJtIHRoZSBzdGF0dXMgb2YgYEJMS19DR1JPVVBgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGEgY3JpdGljYWwgcHJlcmVxdWlzaXRlIGJlZm9yZSBJIGV2ZW4gY29uc2lkZXIgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBhbnkgcmVsYXRlZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4tLVxuYmxvY2svS2NvbmZpZy00MS1cbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXG5ibG9jay9LY29uZmlnLTQzLVx0Ym9vbFxuYmxvY2svS2NvbmZpZy00NC1cbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbmJsb2NrL0tjb25maWctNDYtXHRib29sXG4tLVxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNDQtXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuYmxvY2svS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTYzLVxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXG5ibG9jay9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnPTEwOTk9Y29uZmlnIE1FTUNHX1YxXG4tLVxuaW5pdC9LY29uZmlnLTExMTUtXG5pbml0L0tjb25maWc6MTExNjpjb25maWcgQkxLX0NHUk9VUFxuaW5pdC9LY29uZmlnLTExMTctXHRib29sIFwmIzM0O0lPIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgY29uZmlndXJhdGlvbi1yZWxhdGVkLiBNeSBpbml0aWFsIGludHVpdGlvbiBwb2ludHMgbWUgdG93YXJkcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIG15IG1vbmV5JiMzOTtzIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZ28tdG8gc3BvdCBmb3IgaW5pdGlhbGl6aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBkaXZlIGluIGFuZCB0YWtlIGEgbG9vayBhdCB3aGF0JiMzOTtzIGRlZmluZWQgaW4gdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IG9wdGlvbiBkZWZpbml0aW9uIG9yIGEgbGlrZWx5IGluY2x1ZGUgZmlsZSByZWxhdGVkIHRvIG15IHByb2JsZW0uIExldCYjMzk7cyBzZWUgaWYgdGhlIGNvbmZpZ3VyYXRpb24ga2V5IGlzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTEwOlx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbjExMTE6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTExMjpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4xMTEzOlx0XG4xMTE0Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjExMTU6XHRcbjExMTY6XHRjb25maWcgQkxLX0NHUk9VUFxuMTExNzpcdFx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4xMTE4Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4xMTE5Olx0XHRkZWZhdWx0IG5cbjExMjA6XHRcdGhlbHBcbjExMjE6XHRcdEdlbmVyaWMgYmxvY2sgSU8gY29udHJvbGxlciBjZ3JvdXAgaW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBjb21tb25cbjExMjI6XHRcdGNncm91cCBpbnRlcmZhY2Ugd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdmFyaW91cyBJTyBjb250cm9sbGluZ1xuMTEyMzpcdFx0cG9saWNpZXMuXG4xMTI0Olx0XG4xMTI1Olx0XHRDdXJyZW50bHksIENGUSBJTyBzY2hlZHVsZXIgdXNlcyBpdCB0byByZWNvZ25pemUgdGFzayBncm91cHMgYW5kXG4xMTI2Olx0XHRjb250cm9sIGRpc2sgYmFuZHdpZHRoIGFsbG9jYXRpb24gKHByb3BvcnRpb25hbCB0aW1lIHNsaWNlIGFsbG9jYXRpb24pXG4xMTI3Olx0XHR0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCBpcyBhbHNvIHVzZWQgYnkgYmlvIHRocm90dGxpbmcgbG9naWMgaW5cbjExMjg6XHRcdGJsb2NrIGxheWVyIHRvIGltcGxlbWVudCB1cHBlciBsaW1pdCBpbiBJTyByYXRlcyBvbiBhIGRldmljZS5cbjExMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY2llcyBhbmQgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEJMS19DR1JPVVBgIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJ1aWx0IG9uIHRvcCBvZiBgQkxPQ0tgLiBNYWtlcyBzZW5zZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGNvbnRleHQuIEdvdHRhIGJlIHRob3JvdWdoLiBOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgbW9kdWxlcyBhcmUgYWN0dWFsbHkgKnVzaW5nKiB0aGlzPyBSaWdodCwgdGhlIGNvZGUgZm9yIGBibGtnX2NvbmZfcHJlcGAgaXMgaW4gYGJsb2NrL2JmcS1jZ3JvdXAuY2AsIGBibG9jay9ibGstaW9jb3N0LmNgLCBgYmxvY2svYmxrLWlvbGF0ZW5jeS5jYCwgYW5kIGBibG9jay9ibGstdGhyb3R0bGUuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoaXMsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGVzZSBmaWxlcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aG9zZSBmaWxlcyB0byB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZW0sIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgYXJlLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIHdoZW4gYW5kIHdoeSB0aGVzZSBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JmcS1jZ3JvdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT0yNz1vYmotJChDT05GSUdfTVFfSU9TQ0hFRF9LWUJFUilcdCYjNDM7PSBreWJlci1pb3NjaGVkLm9cbmJsb2NrL01ha2VmaWxlOjI4OmJmcS15XHRcdFx0XHQ6PSBiZnEtaW9zY2hlZC5vIGJmcS13ZjJxLm8gYmZxLWNncm91cC5vXG5ibG9jay9NYWtlZmlsZS0yOS1vYmotJChDT05GSUdfSU9TQ0hFRF9CRlEpXHQmIzQzOz0gYmZxLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODczOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipJbml0aWFsIFRob3VnaHRzIG9uIENPTkZJR19JT1NDSEVEX0JGUSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfSU9TQ0hFRF9CRlFgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIEl0JiMzOTtzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBCdWRnZXQgRmFpciBRdWV1ZWluZyBJL08gc2NoZWR1bGVyIOKAkyBCRlEuIFRoZSBpbXBvcnRhbmNlIGlzIGNsZWFyOiBpdOKAmXMgYWJvdXQgY29udHJvbGxpbmcgaG93IEkvTyByZXF1ZXN0cyBhcmUgcHJpb3JpdGl6ZWQgYW5kIGhhbmRsZWQgYXQgdGhlIGJsb2NrIGxheWVyLiBOb3csIGFzIGFuIGV4cGVydCwgSSBrbm93IHRoZSBudWFuY2VzIGhlcmUuIEFjdGl2YXRpbmcgdGhpcyBpbXBsaWVzIHdlIHdhbnQgdG8gbGV2ZXJhZ2UgQkZR4oCZcyBzdHJlbmd0aCBpbiBoYW5kbGluZyBoZWF2eSBJL08gd29ya2xvYWRzLCBlc3BlY2lhbGx5IHRob3NlIGNvbW1vbiBpbiBpbnRlcmFjdGl2ZSBkZXNrdG9wIGVudmlyb25tZW50cyBvciBjb250YWluZXJpemVkIHNldHVwcy4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgZmFpcm5lc3MgYW5kIHJlc3BvbnNpdmVuZXNzLCBldmVuIHdoZW4gdGhlcmUmIzM5O3MgaW50ZW5zZSBkaXNrIGNvbnRlbnRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHN5c3RlbSBwZXJmb3JtYW5jZSwgbGF0ZW5jeSwgYW5kIG92ZXJhbGwgdGhyb3VnaHB1dC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSB3b3JrbG9hZCBjaGFyYWN0ZXJpc3RpY3MgYmVmb3JlIGVuYWJsaW5nIHRoaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGV2ZW4gdGhvdWdoIHRoaXMgaXMgZW5hYmxlZCB0aHJvdWdoIGEgY29uZmlnIG9wdGlvbiwgaXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBib290IHBhcmFtZXRlcnMuIFVsdGltYXRlbHksIGVuYWJsaW5nIHRoaXMgY29uZmlnIG9wdGlvbiBpcyB0aGUgZmlyc3Qgc3RlcCwgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcHMgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBob3cgdG8gb3B0aW1pemUgYW5kIG1vbml0b3IgdGhpcyBzY2hlZHVsZXIgZm9yIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstaW9jb3N0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZKVx0JiM0Mzs9IGJsay1pb2xhdGVuY3kub1xuYmxvY2svTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUKVx0JiM0Mzs9IGJsay1pb2Nvc3Qub1xuYmxvY2svTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX01RX0lPU0NIRURfREVBRExJTkUpXHQmIzQzOz0gbXEtZGVhZGxpbmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTQzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqQmxvY2sgSS9PIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVGAsIGBDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgYENPTkZJR19CTEtfREVWX1RIUk9UVExJTkdgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gaXMgc2NyZWFtaW5nICYjMzQ7dGhyb3R0bGluZyEmIzM0OyBhbmQgaXQmIzM5O3MgcHVsbGluZyBtZSB0b3dhcmRzIHRoZSBhcmVhIG9mIGJsb2NrIEkvTyBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY2dyb3VwcyBhbmQgdGhyb3R0bGluZyBtZWNoYW5pc21zLiBHaXZlbiB0aGVzZSB0aHJlZSBjb25maWcgb3B0aW9ucywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZmluZCB0aGUgYmxvY2sgSS9PIHRocm90dGxlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc3RhbmRhcmQgcG9pbnQgb2YgcmVmZXJlbmNlLCB0aGUgYGJsb2NrL01ha2VmaWxlYC4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgYGJsay10aHJvdHRsZWAgbW9kdWxlLCBvciByZWxhdGVkIGxvZ2ljLCBzaG91bGQgYmUgZGVmaW5lZCBvciBhdCBsZWFzdCByZWZlcmVuY2VkIHdpdGhpbiB0aGUgYE1ha2VmaWxlYCBpdHNlbGYuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgY29tcGlsZWQgYW5kIGxpbmtlZCwgYW5kIGhvdyB0aGVzZSBjb25maWcgb3B0aW9ucyBwbGF5IGEgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrLXRocm90dGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICYjNDM7PSBibGstY2dyb3VwLWZjLWFwcGlkLm9cbmJsb2NrL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXHQmIzQzOz0gYmxrLXRocm90dGxlLm9cbmJsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcdCYjNDM7PSBibGstaW9wcmlvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbnM6IGBCTEtfQ0dST1VQYCwgYElPU0NIRURfQkZRYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBCTEtfREVWX1RIUk9UVExJTkdgLiBUaGV5IHNlZW0gbGlrZSBhIHJlbGV2YW50IHNldCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBjZ3JvdXBzIGFuZCBJL08gc2NoZWR1bGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byBlYWNoIG90aGVyLCBzbyBmaXJzdCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBkZXBlbmRlbmN5IGNoZWNrcy4gQXJlIGFueSBvZiB0aGVzZSByZWxpYW50IG9uIGFub3RoZXI/IEFueSBjYXNjYWRpbmcgZWZmZWN0cyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzICpjcnVjaWFsKiBiZWZvcmUgSSBzdGFydCBtYWtpbmcgY2hhbmdlcyBvciBpbnRlZ3JhdGluZyB0aGVtIGludG8gYSBuZXcgc3lzdGVtLiBUaGlzIHdpbGwgaGVscCBtZSBhdm9pZCBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb3IgaW5jb21wYXRpYmlsaXRpZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPU0NIRURfQkZRJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcuaW9zY2hlZD0xMD1jb25maWcgTVFfSU9TQ0hFRF9LWUJFUlxuLS1cbmJsb2NrL0tjb25maWcuaW9zY2hlZC0xOC1cbmJsb2NrL0tjb25maWcuaW9zY2hlZDoxOTpjb25maWcgSU9TQ0hFRF9CRlFcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0yMC1cdHRyaXN0YXRlIFwmIzM0O0JGUSBJL08gc2NoZWR1bGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYEtjb25maWcuaW9zY2hlZGAgYW5kIHRoZSBCRlEgU2NoZWR1bGVyKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGJsb2NrL0tjb25maWcuaW9zY2hlZGAuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJGUSAoQnVkZ2V0IEZhaXIgUXVldWVpbmcpIEkvTyBzY2hlZHVsZXIgaXMgY29uZmlndXJlZC4gSSBuZWVkIHRvIHNlZSBob3cgaXRzIGF2YWlsYWJpbGl0eSBpcyBjb250cm9sbGVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgSS9PIHNjaGVkdWxlciBvcHRpb25zLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHNvIEkgZXhwZWN0IHRoaXMgdG8gYmUgYSBxdWljayBzY2FuLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgbnVhbmNlcyBpbiB0aGUgY29uZGl0aW9ucyBmb3IgZW5hYmxpbmcgQkZRIOKAkyBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9yIGtlcm5lbCBmZWF0dXJlIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6ICYjMzQ7aWYgQkxPQ0tfLi4uICYjMzQ7LCAmIzM0O2RlcGVuZHMgb24uLi4mIzM0OywgYW5kICYjMzQ7c2VsZWN0Li4uJiMzNDsgc3RhdGVtZW50cy4gS25vd2luZyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgY3J1Y2lhbCBmb3IgYW55IGV4cGVydCB0dW5pbmcgb3IgdHJvdWJsZXNob290aW5nIGVmZm9ydHMgZG93biB0aGUgbGluZS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgbWVudGFsIG1hcCBvZiBCRlEmIzM5O3Mgcm9sZSBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcuaW9zY2hlZCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTk6XHRjb25maWcgSU9TQ0hFRF9CRlFcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O0JGUSBJL08gc2NoZWR1bGVyXCYjMzQ7XG4gIDIxOlx0XHRzZWxlY3QgQkxLX0lDUVxuICAyMjpcdFx0aGVscFxuICAyMzpcdFx0QkZRIEkvTyBzY2hlZHVsZXIgZm9yIEJMSy1NUS4gQkZRIGRpc3RyaWJ1dGVzIHRoZSBiYW5kd2lkdGggb2ZcbiAgMjQ6XHRcdG9mIHRoZSBkZXZpY2UgYW1vbmcgYWxsIHByb2Nlc3NlcyBhY2NvcmRpbmcgdG8gdGhlaXIgd2VpZ2h0cyxcbiAgMjU6XHRcdHJlZ2FyZGxlc3Mgb2YgdGhlIGRldmljZSBwYXJhbWV0ZXJzIGFuZCB3aXRoIGFueSB3b3JrbG9hZC4gSXRcbiAgMjY6XHRcdGFsc28gZ3VhcmFudGVlcyBhIGxvdyBsYXRlbmN5IHRvIGludGVyYWN0aXZlIGFuZCBzb2Z0XG4gIDI3Olx0XHRyZWFsLXRpbWUgYXBwbGljYXRpb25zLiAgRGV0YWlscyBpblxuICAyODpcdFx0RG9jdW1lbnRhdGlvbi9ibG9jay9iZnEtaW9zY2hlZC5yc3RcbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgQkZRX0dST1VQX0lPU0NIRURcbiAgMzE6XHQgICAgICAgYm9vbCBcJiMzNDtCRlEgaGllcmFyY2hpY2FsIHNjaGVkdWxpbmcgc3VwcG9ydFwmIzM0O1xuICAzMjpcdCAgICAgICBkZXBlbmRzIG9uIElPU0NIRURfQkZRIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4gIDMzOlx0ICAgICAgIGRlZmF1bHQgeVxuICAzNDpcdCAgICAgICBzZWxlY3QgQkxLX0NHUk9VUF9SV1NUQVRcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcbiAgMzc6XHQgICAgICAgRW5hYmxlIGhpZXJhcmNoaWNhbCBzY2hlZHVsaW5nIGluIEJGUSwgdXNpbmcgdGhlIGJsa2lvXG4gIDM4Olx0ICAgICAgIChjZ3JvdXBzLXYxKSBvciBpbyAoY2dyb3Vwcy12MikgY29udHJvbGxlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIERlcGVuZGVuY2llczogQkZRIGFuZCBjZ3JvdXBzKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGBCRlFfR1JPVVBfSU9TQ0hFRGAgZmxhZy4gTXkgYnJhaW4gaW1tZWRpYXRlbHkgY29ubmVjdHMgdGhhdCB0byBgYmZxLWNncm91cC5vYC4gSG1tLCB3b25kZXIgaWYgaXQmIzM5O3MgYSBkaXJlY3QgZGVwZW5kZW5jeT8gQmV0dGVyIHRvIGNvbmZpcm0sIGVzcGVjaWFsbHkgd2l0aCBob3cgdGhlc2UgdGhpbmdzIHRlbmQgdG8gZ2V0IGludGVydHdpbmVkIGluIHRoZSBrZXJuZWwuIExldCBtZSBqdXN0IHF1aWNrbHkgZGl2ZSBpbnRvIHRoZSBgYmxvY2svTWFrZWZpbGVgIGFuZCBjb25maXJtIHdoZXRoZXIgb3Igbm90IEkmIzM5O20gcmlnaHQuIFRoaXMgaXMgdXN1YWxseSB3aGVyZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBpcyBleHBsaWNpdGx5IHN0YXRlZC4gTm8gcG9pbnQgaW4gd2FzdGluZyB0aW1lIHVubGVzcyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JmcS1jZ3JvdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT0yNz1vYmotJChDT05GSUdfTVFfSU9TQ0hFRF9LWUJFUilcdCYjNDM7PSBreWJlci1pb3NjaGVkLm9cbmJsb2NrL01ha2VmaWxlOjI4OmJmcS15XHRcdFx0XHQ6PSBiZnEtaW9zY2hlZC5vIGJmcS13ZjJxLm8gYmZxLWNncm91cC5vXG5ibG9jay9NYWtlZmlsZS0yOS1vYmotJChDT05GSUdfSU9TQ0hFRF9CRlEpXHQmIzQzOz0gYmZxLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIERlcGVuZGVuY3kgb2YgYGJmcS1jZ3JvdXAub2AqKgoKSG1tLCBzbyBpdCBzZWVtcyBsaWtlIGBiZnEtY2dyb3VwLm9gIGlzICphbHdheXMqIGdldHRpbmcgYnVpbHQgaWYgdGhlIGBJT1NDSEVEX0JGUWAgb3B0aW9uIGlzIHR1cm5lZCBvbi4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBiZXR0ZXIuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgc291cmNlIGZpbGUgaXRzZWxmLCByaWdodD8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBibG9jay9iZnEtY2dyb3VwLmNgIHRvIGNvbmZpcm0gdGhpcyBiZWhhdmlvciBhbmQgZmlndXJlIG91dCB3aHkuIEl0JiMzOTtzIGxpa2VseSBpbiB0aGVyZSwgcmlnaHQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIGNncm91cHMgc3VwcG9ydCBmb3IgdGhlIEJGUSBJL08gc2NoZWR1bGVyLlxuICAgNDpcdCAqL1xuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aW1lLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yYnRyZWUuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcHJpby5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2JpdG1hcC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICAxNDpcdFxuICAxNTpcdCNpbmNsdWRlIFwmIzM0O2VsZXZhdG9yLmhcJiMzNDtcbiAgMTY6XHQjaW5jbHVkZSBcJiMzNDtiZnEtaW9zY2hlZC5oXCYjMzQ7XG4gIDE3Olx0XG4gIDE4Olx0I2lmZGVmIENPTkZJR19CRlFfQ0dST1VQX0RFQlVHXG4gIDE5Olx0c3RhdGljIGludCBiZnFfc3RhdF9pbml0KHN0cnVjdCBiZnFfc3RhdCAqc3RhdCwgZ2ZwX3QgZ2ZwKVxuICAyMDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFscyBhbmQgYmxvY2sgSS9PIHNjaGVkdWxpbmc6CgoqKkNoZWNraW5nIGZvciBCRlEgR3JvdXAgU2NoZWR1bGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgemVybyBpbiBvbiBgYmZxLWNncm91cC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgQkZRIChCdWRnZXQgRmFpciBRdWV1ZWluZykgSS9PIHNjaGVkdWxlciYjMzk7cyBjZ3JvdXAtcmVsYXRlZCBsb2dpYyBzaG91bGQgcmVzaWRlLiBOb3csIHRoZSBrZXkgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgQkZRJiMzOTtzIGdyb3VwIHNjaGVkdWxpbmcgZmVhdHVyZXMgYXJlIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4gVGhlIGAjaWZkZWYgQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIHRoZSB0ZWxsLiBJdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlci4gSXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgdGhlIGNvZGUsIGxpa2VseSBpbmNsdWRpbmcgdGhlIGNvcmUgb2YgaG93IEJGUSBpbnRlcmFjdHMgd2l0aCBjZ3JvdXBzLCBpcyBpbmNsdWRlZCBkdXJpbmcgY29tcGlsYXRpb24uIFNvLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIGFjdGl2ZS4gVGhhdCB3aWxsIGRlY2lkZSBteSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9iZnEtY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jPTI2Mj12b2lkIGJmcWdfc3RhdHNfc2V0X3N0YXJ0X2lkbGVfdGltZShzdHJ1Y3QgYmZxX2dyb3VwICpiZnFnKSB7IH1cbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMjY1LVxuYmxvY2svYmZxLWNncm91cC5jOjI2NjojaWZkZWYgQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEXG5ibG9jay9iZnEtY2dyb3VwLmMtMjY3LVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNDA1PXN0cnVjdCBjZnR5cGUgYmZxX2Jsa2dfZmlsZXNbXSA9IHtcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQxNC1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxNDE1OiNlbHNlXHQvKiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQgKi9cbmJsb2NrL2JmcS1jZ3JvdXAuYy0xNDE2LVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNDU0PXN0cnVjdCBiZnFfZ3JvdXAgKmJmcV9jcmVhdGVfZ3JvdXBfaGllcmFyY2h5KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgaW50IG5vZGUpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTE0NjctfVxuYmxvY2svYmZxLWNncm91cC5jOjE0Njg6I2VuZGlmXHQvKiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipCRlEgR3JvdXAgSS9PIFNjaGVkdWxlciBDb25maXJtYXRpb24qKgoKQWxyaWdodCwgeWVwLCB0aGF0IGBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURgIGZsYWcgaXMgZGVmaW5pdGVseSBuZWNlc3NhcnkuIFRoYXQmIzM5O3MgYSBnaXZlbjsgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBOb3csIHNpbmNlIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGUgd2VlZHMgd2l0aCBJL08gc2NoZWR1bGluZyBhbmQgdGhlIG51YW5jZXMgb2YgQkZRLCBsZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgQkxLX0NHUk9VUF9JT0NPU1RgIGlzIGVuYWJsZWQgdG9vLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSBmb3IgcHJvcGVyIGNncm91cCBpbnRlZ3JhdGlvbiBhbmQgYWNjb3VudGluZy4gSXQmIzM5O3MgYmVzdCB0byBiZSB0aG9yb3VnaCBzaW5jZSwgYXMgd2Uga25vdywgdGhlIGludGVncmF0aW9uIG9mIEJGUSB3aXRoIGNncm91cHMgaXMgY3JpdGljYWwgdG8gZ2V0dGluZyBhIHByb3Blcmx5IGJhbGFuY2VkIEkvTyBwcm9maWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUF9JT0NPU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MTQ1PWNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBCbG9jay9LY29uZmlnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYmxvY2svS2NvbmZpZ2AgYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBhcmVhIGFyb3VuZCBgQkxLX0NHUk9VUF9JT0NPU1RgLiBSaWdodCwgc28gdGhpcyBpcyB3aGVyZSB0aGUgYmxvY2sgSS9PIGNvc3QgYWNjb3VudGluZyBzdHVmZiBpcyBjb25maWd1cmVkLiBJIGtub3cgdGhpcyBtb2R1bGUsIGJ1dCBJIHdhbnQgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggaXQsIG9yIG1heWJlIEnigJltIHRoaW5raW5nIGFib3V0IHNvbWUgc3BlY2lmaWMgY29kZSBwYXRoLCBvciBjb25zaWRlcmluZyBhIG5ldyBmZWF0dXJlLCBvciBkZWJ1Z2dpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSS9PIGFjY291bnRpbmcgdXNpbmcgY2dyb3Vwcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgY29uZmxpY3RzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgS2NvbmZpZyBvcHRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBibG9jayBsYXllci4gTGV0IG1lIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIGFuZCBzZWUgd2hlcmUgaXQgZml0cyB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkL2Rpc2FibGVkIGFuZCB3aHkuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGltcGFjdCBvbiBzeXN0ZW0gcGVyZm9ybWFuY2UsIG9yIHdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBpdCB0byB3b3JrLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGlmIGF2YWlsYWJsZSBhcyB3ZWxsLCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgYW5zd2VycyB0byB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy4KCiogICBXaGF0IGFyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncz8KKiAgIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPwoqICAgV2hhdCBkb2VzIHRoZSBoZWxwIHRleHQgc2F5IGFib3V0IHRoZSBmZWF0dXJlPwoqICAgSG93IGlzIHRoaXMgZmVhdHVyZSByZWxhdGVkIHRvIG90aGVyIGZlYXR1cmVzPwoqICAgV2hhdCBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTQ6XHRjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbiAxNTU6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbiAxNTY6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDE1NzpcdFx0c2VsZWN0IEJMS19SUV9BTExPQ19USU1FXG4gMTU4Olx0XHRoZWxwXG4gMTU5Olx0XHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSAud2VpZ2h0IGludGVyZmFjZSBmb3IgY29zdFxuIDE2MDpcdFx0bW9kZWwgYmFzZWQgcHJvcG9ydGlvbmFsIElPIGNvbnRyb2wuICBUaGUgSU8gY29udHJvbGxlclxuIDE2MTpcdFx0ZGlzdHJpYnV0ZXMgSU8gY2FwYWNpdHkgYmV0d2VlbiBkaWZmZXJlbnQgZ3JvdXBzIGJhc2VkIG9uXG4gMTYyOlx0XHR0aGVpciBzaGFyZSBvZiB0aGUgb3ZlcmFsbCB3ZWlnaHQgZGlzdHJpYnV0aW9uLlxuIDE2MzpcdFxuIDE2NDpcdGNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xuIDE2NTpcdFx0Ym9vbCBcJiMzNDtDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcJiMzNDtcbiAxNjY6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDE2NzpcdFx0aGVscFxuIDE2ODpcdFx0RW5hYmxlIHRoZSAucHJpbyBpbnRlcmZhY2UgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3MgdG9cbiAxNjk6XHRcdHJlcXVlc3RzLiBUaGUgSS9PIHByaW9yaXR5IGNsYXNzIGFmZmVjdHMgdGhlIG9yZGVyIGluIHdoaWNoIGFuIEkvT1xuIDE3MDpcdFx0c2NoZWR1bGVyIGFuZCBibG9jayBkZXZpY2VzIHByb2Nlc3MgcmVxdWVzdHMuIE9ubHkgc29tZSBJL08gc2NoZWR1bGVyc1xuIDE3MTpcdFx0YW5kIHNvbWUgYmxvY2sgZGV2aWNlcyBzdXBwb3J0IEkvTyBwcmlvcml0aWVzLlxuIDE3MjpcdFxuIDE3MzpcdGNvbmZpZyBCTEtfREVCVUdfRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGlzc3VlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgYXBwcm9hY2guIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgZnVuZGFtZW50YWwgcHJvYmxlbTogbGF0ZW5jeSB3aXRoaW4gY2dyb3VwcyBhbmQgc3BlY2lmaWNhbGx5IGhvdyBJL08gaXMgZ2V0dGluZyBzY2hlZHVsZWQuIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IHRoaXMgY2dyb3VwIG1ldHJpYyBpcyAqYWN0dWFsbHkqIG1lYXN1cmluZy4gSXMgaXQgcHVyZSwgb3IgaXMgaXQgZ29pbmcgdG8gaGF2ZSBzb21lIGNhdmVhdHM/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgdmVyc2lvbiBvZiB0aGUga2VybmVsIGFtIEkgb24/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYmxvY2sgZGV2aWNlcywgYW5kIG1vcmUgc3BlY2lmaWNhbGx5IHdoYXQgaXMgdGhlIHVuZGVybHlpbmcgc3RvcmFnZT8KCkkmIzM5O20gdGhpbmtpbmc6IEhvdyB3ZWxsIGlzIHRoZSBJL08gc2NoZWR1bGVyIGJlaGF2aW5nIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzLCBvciBpcyBpdCBzb21ldGhpbmcgbW9yZSBudWFuY2VkLCBwZXJoYXBzIGludm9sdmluZyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBsYXllcnM/IElzIHRoaXMgYW4gYWJzb2x1dGUgbWV0cmljLCBvciBhcmUgd2UganVzdCBsb29raW5nIGF0IHRoZSBkZWx0YXM/IERvZXMgdGhpcyBtZXRyaWMgYWNjb3VudCBmb3IgcmVhZHMgKmFuZCogd3JpdGVzPwoKUmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyB0aGUgYmFzZWxpbmUgbWVhc3VyZW1lbnRzIGFuZCBzdGFydCB0byBjb21wYXJlIHRvIHRoZSBjb250cm9sIGdyb3VwLiBUaGVuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBjb3JyZWxhdGUgdGhlIGRhdGEgZnJvbSBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIHdpdGggb3RoZXIgcmVsZXZhbnQgbWV0cmljcywgbGlrZSBJL08gcXVldWUgbGVuZ3RoIGFuZCBDUFUgdXRpbGl6YXRpb24gd2l0aGluIHRoZSBhZmZlY3RlZCBjZ3JvdXAgYW5kIGF0IHRoZSBzeXN0ZW0td2lkZSBsZXZlbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb21tYW5kcyBJIG5lZWQgdG8gcnVuIHRvIGdldCBhIGhvbGlzdGljIHZpZXcuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGFuZCB0aGUgc291cmNlIGNvZGUgaXRzZWxmIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBkYXRhIGlzIGJlaW5nIHNhbXBsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM0Olx0Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG4gMTM1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4gMTM2Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxMzc6XHRcdGhlbHBcbiAxMzg6XHRcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIC5sYXRlbmN5IGludGVyZmFjZSBmb3IgSU8gdGhyb3R0bGluZy5cbiAxMzk6XHRcdFRoZSBJTyBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byBtYWludGFpbiBhdmVyYWdlIElPIGxhdGVuY2llcyBiZWxvd1xuIDE0MDpcdFx0dGhlIGNvbmZpZ3VyZWQgbGF0ZW5jeSB0YXJnZXQsIHRocm90dGxpbmcgYW55Ym9keSB3aXRoIGEgaGlnaGVyIGxhdGVuY3lcbiAxNDE6XHRcdHRhcmdldCB0aGFuIHRoZSB2aWN0aW1pemVkIGdyb3VwLlxuIDE0MjpcdFxuIDE0MzpcdFx0Tm90ZSwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW50ZXJmYWNlIGFuZCBjb3VsZCBiZSBjaGFuZ2VkIHNvbWVkYXkuXG4gMTQ0Olx0XG4gMTQ1Olx0Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbiAxNDY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbiAxNDc6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUCBcdTAwMjZcdTAwMjYgTlZNRV9GQ1xuIDE0ODpcdFx0aGVscFxuIDE0OTpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyB0cmFmZmljIGFjcm9zc1xuIDE1MDpcdFx0ICBjZ3JvdXAgYXBwbGljYXRpb25zLiBJdCBlbmFibGVzIHRoZSBGYWJyaWMgYW5kIHRoZSBzdG9yYWdlIHRhcmdldHMgdG9cbiAxNTE6XHRcdCAgaWRlbnRpZnksIG1vbml0b3IsIGFuZCBoYW5kbGUgRkMgdHJhZmZpYyBiYXNlZCBvbiBWTSB0YWdzIGJ5IGluc2VydGluZ1xuIDE1MjpcdFx0ICBhcHBsaWNhdGlvbiBzcGVjaWZpYyBpZGVudGlmaWNhdGlvbiBpbnRvIHRoZSBGQyBmcmFtZS5cbiAxNTM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIFRocm90dGxpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBgQkxLX0RFVl9USFJPVFRMSU5HYC4gV2hhdCYjMzk7cyB0aGUgY3VycmVudCBzdGF0dXMsIGFuZCB3aGVyZSBhcmUgdGhlIHBvdGVudGlhbCBwaXRmYWxscz8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSBvcHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2UgYW5kIHByZXZlbnQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBpbnZvbHZlcyBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHNlZWluZyBob3cgSSBjYW4gbW9uaXRvciB0aGUgYmxvY2sgZGV2aWNlIHRocm90dGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFyY2hpdGVjdHVyYWwgdHJhZGUtb2ZmcyB0aGF0IGhhdmUgdG8gYmUgbWFkZSB3aGVuIGl0IGNvbWVzIHRvIG1lbW9yeSBhbmQgYmxvY2sgZGV2aWNlcy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgY2F1c2luZyB1bm5lY2Vzc2FyeSBibG9jayBkZXZpY2UgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1RIUk9UVExJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9OTc9Y29uZmlnIEJMS19ERVZfWk9ORURcbi0tXG5ibG9jay9LY29uZmlnLTEwNS1cbmJsb2NrL0tjb25maWc6MTA2OmNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbmJsb2NrL0tjb25maWctMTA3LVx0Ym9vbCBcJiMzNDtCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBUaHJvdHRsaW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIGRpZyBpbnRvIGBibG9jay9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYEJMS19ERVZfVEhST1RUTElOR2Agb3B0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEkvTyB0aHJvdHRsaW5nLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIFRoaXMgbWVhbnMgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dCBvciBjb21tZW50cyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGNvbmZpZ3VyZXMgYW5kIGNvbnRyb2xzIHRoZXNlIGxpbWl0cy4gSSYjMzk7bSBsaWtlbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaW50ZXJhY3RzIHdpdGggb3RoZXIgYmxvY2sgbGF5ZXIgZmVhdHVyZXMuIERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgdGhpcyBtYXkgbGVhZCBtZSB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCByZWxhdGVkIHNvdXJjZSBjb2RlIGZpbGVzIHRvIHNlZSBob3cgdGhlIGtub2JzIGFyZSB0dXJuZWQuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBvcHRpb24gaW5mbHVlbmNlcyB0aGUgYmxvY2sgSS9PIHNjaGVkdWxlciBhbmQgcmVsYXRlZCBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNjpcdGNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbiAxMDc6XHRcdGJvb2wgXCYjMzQ7QmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydFwmIzM0O1xuIDEwODpcdFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXG4gMTA5Olx0XHRzZWxlY3QgQkxLX0NHUk9VUF9SV1NUQVRcbiAxMTA6XHRcdGhlbHBcbiAxMTE6XHRcdEJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnQuIEl0IGNhbiBiZSB1c2VkIHRvIGxpbWl0XG4gMTEyOlx0XHR0aGUgSU8gcmF0ZSB0byBhIGRldmljZS4gSU8gcmF0ZSBwb2xpY2llcyBhcmUgcGVyIGNncm91cCBhbmRcbiAxMTM6XHRcdG9uZSBuZWVkcyB0byBtb3VudCBhbmQgdXNlIGJsa2lvIGNncm91cCBjb250cm9sbGVyIGZvciBjcmVhdGluZ1xuIDExNDpcdFx0Y2dyb3VwcyBhbmQgc3BlY2lmeWluZyBwZXIgZGV2aWNlIElPIHJhdGUgcG9saWNpZXMuXG4gMTE1Olx0XG4gMTE2Olx0XHRTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gMTE3Olx0XG4gMTE4Olx0Y29uZmlnIEJMS19XQlRcbiAxMTk6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSB3cml0ZWJhY2sgdGhyb3R0bGluZ1wmIzM0O1xuIDEyMDpcdFx0aGVscFxuIDEyMTpcdFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYmxvY2sgbGF5ZXIgdG8gdGhyb3R0bGUgYnVmZmVyZWRcbiAxMjI6XHRcdGJhY2tncm91bmQgd3JpdGViYWNrIGZyb20gdGhlIFZNLCBtYWtpbmcgaXQgbW9yZSBzbW9vdGggYW5kIGhhdmluZ1xuIDEyMzpcdFx0bGVzcyBpbXBhY3Qgb24gZm9yZWdyb3VuZCBvcGVyYXRpb25zLiBUaGUgdGhyb3R0bGluZyBpcyBkb25lXG4gMTI0Olx0XHRkeW5hbWljYWxseSBvbiBhbiBhbGdvcml0aG0gbG9vc2VseSBiYXNlZCBvbiBDb0RlbCwgZmFjdG9yaW5nIGluXG4gMTI1Olx0XHR0aGUgcmVhbHRpbWUgcGVyZm9ybWFuY2Ugb2YgdGhlIGRpc2suXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDU5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBJL08gQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgc3ltYm9scyBhbmQgY29uZmlncyBwb2ludHMgdG8gYSBjbGVhciBhcmVhIG9mIGZvY3VzOiBibG9jayBJL08gbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxldmVyYWdpbmcgY2dyb3Vwcy4gVGhlIGNvcmUgY29uZmlndXJhdGlvbnMgSSYjMzk7bSBzZWVpbmcgKGBCTEtfQ0dST1VQYCwgYElPU0NIRURfQkZRYCwgYEJGUV9HUk9VUF9JT1NDSEVEYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBCTEtfREVWX1RIUk9UVExJTkdgKSBpbW1lZGlhdGVseSBwYWludCBhIHBpY3R1cmUgb2YgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBJL08gc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiBhdCBhIHBlci1jZ3JvdXAgbGV2ZWwuIFdlJiMzOTtyZSBjbGVhcmx5IGRpdmluZyBpbnRvIHRoZSByZWFsbSBvZiBiYW5kd2lkdGggY29udHJvbCwgbGF0ZW5jeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIGludGVncmF0aW9uIHdpdGggdGhlIEJ1ZGdldCBGYWlyIFF1ZXVlIChCRlEpIHNjaGVkdWxlci4KClRoZSBmdW5jdGlvbiBzeW1ib2xzIGxpc3RlZCAtIGBibGtnX2NvbmZfcHJlcGAsIGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLCBgaW9jX3dlaWdodF93cml0ZWAsIGBpb2xhdGVuY3lfc2V0X2xpbWl0YCwgYHRnX3NldF9jb25mYCwgYW5kIGB0Z19zZXRfbGltaXRgIC0gYXJlIHRoZSBzcGVjaWZpYyAmIzM0O2hvb2tzJiMzNDsgdGhhdCBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbmFsaXR5LiBFYWNoIGdpdmVzIGFuIGluZGljYXRpb24gb2YgaG93IGVhY2ggZmVhdHVyZSBpcyBjb25uZWN0ZWQsIHdpdGggYSBjbGVhciBmb2N1cyBvbiBzZXR0aW5ncyBhbmQgY29uZmlndXJhdGlvbi4KCk5vdywgSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBgYmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0YC4gVW5kZXJzdGFuZGluZyB3aGV0aGVyIHRoaXMgaXMgc3RhdGljIG9yIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgYXQgcnVudGltZSBpcyBjcnVjaWFsLiBJdCYjMzk7bGwgZGlyZWN0bHkgaW1wYWN0IGhvdyBmbGV4aWJsZSBhbmQgYWRhcHRpdmUgb3VyIEkvTyBtYW5hZ2VtZW50IHN0cmF0ZWd5IGNhbiBiZS4gSXMgdGhpcyBhIG9uZS10aW1lIHNldHVwLCBvciBjYW4gd2VpZ2h0cyBiZSBhZGp1c3RlZCBpbiByZXNwb25zZSB0byBjaGFuZ2luZyB3b3JrbG9hZCBkZW1hbmRzPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JmcS1jZ3JvdXAuYz0xMDMzPXN0YXRpYyBpbnQgYmZxX2lvX3NldF93ZWlnaHRfbGVnYWN5KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTEwNTgtXG5ibG9jay9iZnEtY2dyb3VwLmM6MTA1OTpzdGF0aWMgc3NpemVfdCBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuYmxvY2svYmZxLWNncm91cC5jLTEwNjAtXHRcdFx0XHRcdGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmM9MTEwNj1zdGF0aWMgc3NpemVfdCBiZnFfaW9fc2V0X3dlaWdodChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTExMjItXG5ibG9jay9iZnEtY2dyb3VwLmM6MTEyMzpcdHJldHVybiBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHQob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYpO1xuYmxvY2svYmZxLWNncm91cC5jLTExMjQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI0MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqU3RhdGljIFN5bWJvbCBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMsIG15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0aGF0IHRoaXMgc3RhdGljIGVsZW1lbnQgaXNuJiMzOTt0IHN1aXRhYmxlIGFzIGEgZm9jdXMgc3ltYm9sLiBXZSBuZWVkIHNvbWV0aGluZyBkeW5hbWljIGFuZCByZXNwb25zaXZlIHRvIGNoYW5nZXMsIGFuZCBhIHN0YXRpYyB2YWx1ZSBqdXN0IGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQuIFdlIG5lZWQgc29tZXRoaW5nIHRoYXQgY2FuIHRyYWNrIHRoZSBzdGF0ZSBvciB0aGUgY2hhbmdlIGl0c2VsZi4KCk9rYXksIGxldCYjMzk7cyBwaXZvdC4gV2hhdCBhYm91dCBgaW9jX3dlaWdodF93cml0ZWA/IFBlcmhhcHMgdGhhdCBjb250YWlucyB0aGUgbmVjZXNzYXJ5IGR5bmFtaWMgYmVoYXZpb3IuIFdlIHNob3VsZCBiZSBleGFtaW5pbmcgd2hhdCB0aGlzIHBvdGVudGlhbCBzeW1ib2wgZG9lcyAtIGRvZXMgaXQgZ2l2ZSB1cyBhIGNoYW5naW5nIHRhcmdldCB0byBmb2xsb3c/IEl0JiMzOTtzIHRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlIGlmIHRoYXQgd2lsbCB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2Nfd2VpZ2h0X3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvY29zdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2Nvc3QuYz0zMTI3PXN0YXRpYyBpbnQgaW9jX3dlaWdodF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTMxMzctXG5ibG9jay9ibGstaW9jb3N0LmM6MzEzODpzdGF0aWMgc3NpemVfdCBpb2Nfd2VpZ2h0X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuYmxvY2svYmxrLWlvY29zdC5jLTMxMzktXHRcdFx0XHRzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYz0zNTY3PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGlvY19maWxlc1tdID0ge1xuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTcxLVx0XHQuc2VxX3Nob3cgPSBpb2Nfd2VpZ2h0X3Nob3csXG5ibG9jay9ibGstaW9jb3N0LmM6MzU3MjpcdFx0LndyaXRlID0gaW9jX3dlaWdodF93cml0ZSxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zNTczLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgbWF0dGVyIG15c2VsZiwgc3VpdGFibGUgZm9yIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFN0YXRpYyBDb25maWd1cmF0aW9uIElzc3VlKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBzdGF0aWMgY29tcG9uZW50LiBTb21ldGhpbmcmIzM5O3MgY2xlYXJseSBhbWlzcy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzdGF0aWMuLi4gYnV0IHdoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3RhdGljIG5hdHVyZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvYmxlbS4gV2hhdCBleGFjdGx5IGlzIHRoaXMgcmlnaWRpdHkgcHJldmVudGluZz8KCk5vdywgSSByZWNhbGwgYSBmdW5jdGlvbiwgYGJsa2dfY29uZl9wcmVwYC4gSXMgdGhhdCByZWxldmFudCB0byB0aGlzIHNpdHVhdGlvbj8gSXQgc2VlbXMgcG90ZW50aWFsbHkgdXNlZnVsIGhlcmUuIEl0JiMzOTtzIG9mdGVuIHVzZWQgaW4gcmVsYXRlZCBibG9ja3Mgb2YgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGJsa2dfY29uZl9wcmVwYCBmdW5jdGlvbnMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGlzIGNvbXBvbmVudC4gUGVyaGFwcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYz03NDc9RVhQT1JUX1NZTUJPTF9HUEwoX19ibGtnX3ByZmlsbF91NjQpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy03NTUtICogT25jZSBpbml0aWFsaXplZCwgQGN0eCBjYW4gYmUgdXNlZCB3aXRoIGJsa2dfY29uZl9vcGVuX2JkZXYoKSBhbmRcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3NTY6ICogYmxrZ19jb25mX3ByZXAoKS5cbmJsb2NrL2Jsay1jZ3JvdXAuYy03NTctICovXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTgxMT1FWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfb3Blbl9iZGV2KTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtODEzLS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjgxNDogKiBibGtnX2NvbmZfcHJlcCAtIHBhcnNlIGFuZCBwcmVwYXJlIGZvciBwZXItYmxrZyBjb25maWcgdXBkYXRlXG5ibG9jay9ibGstY2dyb3VwLmMtODE1LSAqIEBibGtjZzogdGFyZ2V0IGJsb2NrIGNncm91cFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjctICovXG5ibG9jay9ibGstY2dyb3VwLmM6ODI4OmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG5ibG9jay9ibGstY2dyb3VwLmMtODI5LVx0XHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzAtfVxuYmxvY2svYmxrLWNncm91cC5jOjkzMTpFWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfcHJlcCk7XG5ibG9jay9ibGstY2dyb3VwLmMtOTMyLVxuYmxvY2svYmxrLWNncm91cC5jLTkzMy0vKipcbmJsb2NrL2Jsay1jZ3JvdXAuYzo5MzQ6ICogYmxrZ19jb25mX3VucHJlcCAtIGNvdW50ZXJwYXJ0IG9mIGJsa2dfY29uZl9wcmVwKClcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzUtICogQGN0eDogYmxrZ19jb25mX2N0eCBpbml0aWFsaXplZCB3aXRoIGJsa2dfY29uZl9pbml0KClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNjMKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBJTyBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgRGVhZGxvY2sgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBibGtnX2NvbmZfcHJlcGAgZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBzb2xpZCBmb2N1cyBzeW1ib2wgZm9yIHRoaXMgYW5hbHlzaXMsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIGNhbGwgaXQsIGp1c3QgdG8gYmUgc3VyZSwgbm9wZSwgaXQmIzM5O3MgY2FsbGVkIGJ5IHN0YXRpYyBjZ3JvdXAgZmlsZSBoYW5kbGVycywgc28gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN0YW5kcy4KClJpZ2h0LCBzbyBgYmxrZ19jb25mX3ByZXBgIGlzIHRoZSBwcmltYXJ5IGZvY2FsIHBvaW50LiBOb3csIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGlzIGFyZWEuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgcmVsYXRlZCBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkIGJ5IGNvbmZpZ3MuIEkgc2VlIGBCTEtfQ0dST1VQYCBkZXBlbmRzIG9uIGBCTE9DS2AsIGBJT1NDSEVEX0JGUWAgYWxzbyBkZXBlbmRzIG9uIGBCTE9DS2AuIFRoZW4gYEJGUV9HUk9VUF9JT1NDSEVEYCByZXF1aXJlcyBib3RoIGBJT1NDSEVEX0JGUWAgKmFuZCogYEJMS19DR1JPVVBgLiBGdXJ0aGVybW9yZSwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBCTEtfREVWX1RIUk9UVExJTkdgIGFsbCBkZXBlbmQgb24gYEJMS19DR1JPVVBgLiBTbywgYSBzdW1tYXJ5IG9mIHJlbGF0ZWQgY29uZmlncyBpczoKYEJMS19DR1JPVVBgLCBgSU9TQ0hFRF9CRlFgLCBgQkZRX0dST1VQX0lPU0NIRURgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgYEJMS19ERVZfVEhST1RUTElOR2AuCgpPaywgc28gd2l0aCB0aGF0IGNvbnRleHQsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgaW4gdGhlIGBibGtnX2NvbmZfcHJlcGAgZnVuY3Rpb24gaXRzZWxmLCB3aGVyZSBgR0ZQX0tFUk5FTGAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgR0ZQX05PSU9gIHdpdGhpbiB0aGUgYHJhZGl4X3RyZWVfcHJlbG9hZGAgY2FsbC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZml4LiBCeSB1c2luZyBgR0ZQX05PSU9gIGluc3RlYWQgb2YgYEdGUF9LRVJORUxgLCB3ZSYjMzk7cmUgZWZmZWN0aXZlbHkgcHJldmVudGluZyBhIHBvdGVudGlhbCBkZWFkbG9jay4gV2UgYXJlIHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGFsbG9jYXRpbmcgbWVtb3J5IGluIGEgY29udGV4dCB3aGVyZSBob2xkaW5nIGEgbG9jaywgb3Igd2hlcmUgcGVyZm9ybWluZyBJTyB3b3VsZCBjcmVhdGUgaXNzdWVzLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IEkgc2hvdWxkIGZvY3VzIG9uIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLCBhbmQgc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCRlFfR1JPVVBfSU9TQ0hFRCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1RIUk9UVExJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtnX2NvbmZfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBgYmxrZ19jb25mX3ByZXBgIGJ5IGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCBkdXJpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgY2dyb3VwIGNvbmZpZ3VyYXRpb24gcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCRlFfR1JPVVBfSU9TQ0hFRCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1RIUk9UVExJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtnX2NvbmZfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBgYmxrZ19jb25mX3ByZXBgIGJ5IGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCBkdXJpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgY2dyb3VwIGNvbmZpZ3VyYXRpb24gcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjE6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnIGluIGByYWRpeF90cmVlX3ByZWxvYWRgIGZyb20gYEdGUF9LRVJORUxgIHRvIGBHRlBfTk9JT2AgdG8gbWF0Y2ggdGhlIHByZWNlZGluZyBgYmxrZ19hbGxvY2AgY2FsbCBhbmQgYXZvaWQgcG90ZW50aWFsIG1lbW9yeSByZWNsYWltIGRlYWRsb2NrcyBpbiB0aGUgYmxvY2sgbGF5ZXIuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGxvY2tpbmcvcmVjbGFpbSBpc3N1ZSAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAgb3Igc3RhbmRhcmQgdGVzdGluZykgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBkMTlkZjdkNjUyZWY2OGRkYWU1MDcyYTVhYjk1OThiYjVlN2QxMGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAyMToyMjowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwppbmRleCBkOTY3NjEyNmM1YjVkLi5iOTgxYTgwYmJkOTQzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNncm91cC5jCkBAIC04NjcsNyAmIzQzOzg2Nyw2IEBAIGludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsCiAJCQlwYXJlbnQgPSBibGtjZ19wYXJlbnQocGFyZW50KTsKIAkJfQogCi0JCS8qIERyb3AgbG9ja3MgdG8gZG8gbmV3IGJsa2cgYWxsb2NhdGlvbiB3aXRoIEdGUF9LRVJORUwuICovCiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3EtJmd0O3F1ZXVlX2xvY2spOwogCiAJCW5ld19ibGtnID0gYmxrZ19hbGxvYyhwb3MsIGRpc2ssIEdGUF9OT0lPKTsKQEAgLTg3Niw3ICYjNDM7ODc1LDcgQEAgaW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCwKIAkJCWdvdG8gZmFpbF9leGl0OwogCQl9CiAKLQkJaWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKSkgewomIzQzOwkJaWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9JTykpIHsKIAkJCWJsa2dfZnJlZShuZXdfYmxrZyk7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBmYWlsX2V4aXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3CgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDU3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9ibGstY2dyb3VwLmNgIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgYSBjaGFuZ2UgaW4gbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MuIFNwZWNpZmljYWxseSwgaW4gYGJsa2dfY29uZl9wcmVwYCwgaXQmIzM5O3Mgc3dpdGNoaW5nIGByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTClgIHRvIGByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX05PSU8pYC4gVGhlIGNvbW1lbnQgdGhhdCB3YXMgcmVtb3ZlZCwgdGhlIG9uZSBhYm91dCBkcm9wcGluZyBsb2NrcyBiZWZvcmUgYSBgR0ZQX0tFUk5FTGAgYWxsb2NhdGlvbiwgcGlxdWVkIG15IGludGVyZXN0LiBUaGF0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2tkZXAgaXNzdWUgd2FzIHRoZSBkcml2aW5nIGZhY3Rvciwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGFuIGF2b2lkYW5jZSBvZiBhbGxvY2F0aW5nIG1lbW9yeSB3aXRoIGBHRlBfS0VSTkVMYCBpbiBhIGNvbnRleHQgd2hlcmUgaXQmIzM5O3Mgbm90IHNhZmUuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgbWVudGlvbmVkIGRyb3BwaW5nIGxvY2tzIGZpcnN0LCB3aXRoIGBzcGluX3VubG9ja19pcnEoJmFtcDtxLSZndDtxdWV1ZV9sb2NrKTtgIHJpZ2h0IGFib3ZlLgoKU28sIHRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MsIGdvaW5nIGZyb20gdGhlIHBvdGVudGlhbGx5IGJsb2NraW5nIGBHRlBfS0VSTkVMYCB0byB0aGUgbm9uLWJsb2NraW5nIGBHRlBfTk9JT2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7Q291bGQgdGhpcyBiZSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyYjMzQ7IE5vcGUsIGNvbXBsZXRlbHkgZGlmZmVyZW50LiBLTVNBTiBpcyB0aGUgdG9vbCBmb3IgdGhhdCwgYW5kIEtBU0FOIGNvdmVycyBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBlaXRoZXIgb2YgdGhvc2UgaXNzdWVzLgoKTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZmIHRvIGNvbmZpcm0gd2hhdCBJIHdhcyB0aGlua2luZy4gWWVwLCBgbmV3X2Jsa2dgIHdhcyAqYWxyZWFkeSogYmVpbmcgYWxsb2NhdGVkIHdpdGggYEdGUF9OT0lPYC4gU28sIHRoZSBpbmNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIGBuZXdfYmxrZ2AgYWxsb2NhdGlvbiBhbmQgdGhlIGByYWRpeF90cmVlX3ByZWxvYWRgIHByZWxvYWQsIHVzaW5nIGBHRlBfS0VSTkVMYCwgaXMgdGhlIGtleSBpc3N1ZSBoZXJlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYEdGUF9LRVJORUxgIHRvIHByZWxvYWQgdGhlIHJhZGl4IHRyZWUsIHdoaWNoIGNvdWxkIGJlIHByb2JsZW1hdGljIGlmIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgd2l0aGluIHRoZSBibG9jayBJL08gcGF0aC4gUmVjdXJzaW9uIGludG8gdGhlIGJsb2NrIGxheWVyIGNvdWxkIG9jY3VyIGlmIGBHRlBfS0VSTkVMYCB3ZXJlIHVzZWQuCgpJbiBlc3NlbmNlLCB0aGlzIGlzIGZpeGluZyBhIHBvdGVudGlhbCBkZWFkbG9jayBvciByZWNsYWltIGlzc3VlLiBCeSBjaGFuZ2luZyB0byBgR0ZQX05PSU9gLCB3ZSBhdm9pZCBhbnkgcHJvYmxlbWF0aWMgYmxvY2tpbmcgYmVoYXZpb3IuIFRoaXMgaXNuJiMzOTt0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcgaW4gYHJhZGl4X3RyZWVfcHJlbG9hZGAgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCB0byBtYXRjaCB0aGUgcHJlY2VkaW5nIGBibGtnX2FsbG9jYCBjYWxsIGFuZCBhdm9pZCBwb3RlbnRpYWwgbWVtb3J5IHJlY2xhaW0gZGVhZGxvY2tzIGluIHRoZSBibG9jayBsYXllci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9yZWNsYWltIGlzc3VlICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBzdGFuZGFyZCB0ZXN0aW5nKSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcgaW4gYHJhZGl4X3RyZWVfcHJlbG9hZGAgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCB0byBtYXRjaCB0aGUgcHJlY2VkaW5nIGBibGtnX2FsbG9jYCBjYWxsIGFuZCBhdm9pZCBwb3RlbnRpYWwgbWVtb3J5IHJlY2xhaW0gZGVhZGxvY2tzIGluIHRoZSBibG9jayBsYXllci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9yZWNsYWltIGlzc3VlICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBzdGFuZGFyZCB0ZXN0aW5nKSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MDYuMDAxNDU1NTg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNzY3MTg3NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCRlFfR1JPVVBfSU9TQ0hFRFwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtnX2NvbmZfcHJlcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZyBpbiBgcmFkaXhfdHJlZV9wcmVsb2FkYCBmcm9tIGBHRlBfS0VSTkVMYCB0byBgR0ZQX05PSU9gIHRvIG1hdGNoIHRoZSBwcmVjZWRpbmcgYGJsa2dfYWxsb2NgIGNhbGwgYW5kIGF2b2lkIHBvdGVudGlhbCBtZW1vcnkgcmVjbGFpbSBkZWFkbG9ja3MgaW4gdGhlIGJsb2NrIGxheWVyLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBsb2NraW5nL3JlY2xhaW0gaXNzdWUgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIG9yIHN0YW5kYXJkIHRlc3RpbmcpIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRlYWRsb2NrIGluIGBibGtnX2NvbmZfcHJlcGAgYnkgY2hhbmdpbmcgdGhlIGFsbG9jYXRpb24gY29udGV4dCBmcm9tIGBHRlBfS0VSTkVMYCB0byBgR0ZQX05PSU9gIGR1cmluZyBgcmFkaXhfdHJlZV9wcmVsb2FkYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBjZ3JvdXAgY29uZmlndXJhdGlvbiBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjowNi4wMDE0NjA3ODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNDk0NTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBkMTlkZjdkNjUyZWY2OGRkYWU1MDcyYTVhYjk1OThiYjVlN2QxMGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMjE6MjI6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXFxuaW5kZXggZDk2NzYxMjZjNWI1ZC4uYjk4MWE4MGJiZDk0MyAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcXG4rKysgYi9ibG9jay9ibGstY2dyb3VwLmNcXG5AQCAtODY3LDcgKzg2Nyw2IEBAIGludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuIFxcdFxcdFxcdHBhcmVudCA9IGJsa2NnX3BhcmVudChwYXJlbnQpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHQvKiBEcm9wIGxvY2tzIHRvIGRvIG5ldyBibGtnIGFsbG9jYXRpb24gd2l0aCBHRlBfS0VSTkVMLiAqL1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbiBcXG4gXFx0XFx0bmV3X2Jsa2cgPSBibGtnX2FsbG9jKHBvcywgZGlzaywgR0ZQX05PSU8pO1xcbkBAIC04NzYsNyArODc1LDcgQEAgaW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcXG4gXFx0XFx0XFx0Z290byBmYWlsX2V4aXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCkpIHtcXG4rXFx0XFx0aWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9JTykpIHtcXG4gXFx0XFx0XFx0YmxrZ19mcmVlKG5ld19ibGtnKTtcXG4gXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0Z290byBmYWlsX2V4aXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIyOjA2LjQwNzEyNjEzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMzA3OTM3NDk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJJT1NDSEVEX0JGUVwiLFxuICAgIFwiQkZRX0dST1VQX0lPU0NIRURcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrZ19jb25mX3ByZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBgYmxrZ19jb25mX3ByZXBgIGJ5IGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCBkdXJpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgY2dyb3VwIGNvbmZpZ3VyYXRpb24gcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGQxOWRmN2Q2NTJlZjY4ZGRhZTUwNzJhNWFiOTU5OGJiNWU3ZDEwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIxOjIyOjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXG5pbmRleCBkOTY3NjEyNmM1YjVkLi5iOTgxYTgwYmJkOTQzIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXG4rKysgYi9ibG9jay9ibGstY2dyb3VwLmNcbkBAIC04NjcsNyArODY3LDYgQEAgaW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbiBcdFx0XHRwYXJlbnQgPSBibGtjZ19wYXJlbnQocGFyZW50KTtcbiBcdFx0fVxuIFxuLVx0XHQvKiBEcm9wIGxvY2tzIHRvIGRvIG5ldyBibGtnIGFsbG9jYXRpb24gd2l0aCBHRlBfS0VSTkVMLiAqL1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbiBcbiBcdFx0bmV3X2Jsa2cgPSBibGtnX2FsbG9jKHBvcywgZGlzaywgR0ZQX05PSU8pO1xuQEAgLTg3Niw3ICs4NzUsNyBAQCBpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxuIFx0XHRcdGdvdG8gZmFpbF9leGl0O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCkpIHtcbitcdFx0aWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9JTykpIHtcbiBcdFx0XHRibGtnX2ZyZWUobmV3X2Jsa2cpO1xuIFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0Z290byBmYWlsX2V4aXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjowNi40MDcxMjc3MzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjAzMDMzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgcGF0Y2ggZmxvYXRpbmcgYXJvdW5kLCBhbmQgaXQncyBtYWtpbmcgYSBzZWVtaW5nbHkgc21hbGwgYnV0IHBvdGVudGlhbGx5IGNydWNpYWwgY2hhbmdlOiBzd2FwcGluZyBgR0ZQX0tFUk5FTGAgZm9yIGBHRlBfTk9JT2AgaW4gdGhlIGBibGtnX2NvbmZfcHJlcGAgZnVuY3Rpb24gd2l0aGluIGBibG9jay9ibGstY2dyb3VwLmNgLiBNeSBleHBlcnQgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGFkanVzdG1lbnQsIGxpa2VseSBhaW1lZCBhdCBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRleHQgaXNzdWUuIFRoYXQncyBhIGNsYXNzaWMgc2NlbmFyaW8sIGFuZCB0aGUgYGJsay1jZ3JvdXBgIGFyZWEgaXMgZGVmaW5pdGVseSBvbmUgdG8gYmUgY2FyZWZ1bCB3aXRoLiBUaGlzIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuIExldCdzIGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBgYmxrZ19jb25mX3ByZXBgIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhbmQgd2h5IHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeSBhbmQgZWZmZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjowOS42MTAxNjQ0MTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMDUwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrZ19jb25mX3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLWNncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz03NDc9RVhQT1JUX1NZTUJPTF9HUEwoX19ibGtnX3ByZmlsbF91NjQpO1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTc1NS0gKiBPbmNlIGluaXRpYWxpemVkLCBAY3R4IGNhbiBiZSB1c2VkIHdpdGggYmxrZ19jb25mX29wZW5fYmRldigpIGFuZFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3NTY6ICogYmxrZ19jb25mX3ByZXAoKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtNzU3LSAqL1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTgxMT1FWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfb3Blbl9iZGV2KTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MTMtLyoqXFxuYmxvY2svYmxrLWNncm91cC5jOjgxNDogKiBibGtnX2NvbmZfcHJlcCAtIHBhcnNlIGFuZCBwcmVwYXJlIGZvciBwZXItYmxrZyBjb25maWcgdXBkYXRlXFxuYmxvY2svYmxrLWNncm91cC5jLTgxNS0gKiBAYmxrY2c6IHRhcmdldCBibG9jayBjZ3JvdXBcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjctICovXFxuYmxvY2svYmxrLWNncm91cC5jOjgyODppbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjktXFx0XFx0ICAgc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzAtfVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo5MzE6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19jb25mX3ByZXApO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzItXFxuYmxvY2svYmxrLWNncm91cC5jLTkzMy0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6OTM0OiAqIGJsa2dfY29uZl91bnByZXAgLSBjb3VudGVycGFydCBvZiBibGtnX2NvbmZfcHJlcCgpXFxuYmxvY2svYmxrLWNncm91cC5jLTkzNS0gKiBAY3R4OiBibGtnX2NvbmZfY3R4IGluaXRpYWxpemVkIHdpdGggYmxrZ19jb25mX2luaXQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjowOS42NTYzNzM2MTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI5MDAxMzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGJsa2dfY29uZl9wcmVwYCoqXG5cbk9rYXksIHNvIGBibGtnX2NvbmZfcHJlcGAgaXMgZXhwb3J0ZWQuIFRoYXQgbWVhbnMgaXQncyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0g4oCTIGl0J3MgYSBwdWJsaWMgaW50ZXJmYWNlLCBlc3NlbnRpYWxseS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0cyBpbXBhY3QuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCo/IFVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODEyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MTIuNzg1Mzc3OTk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzIzNzA0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrZ19jb25mX3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JmcS1jZ3JvdXAuYz0xMDU5PXN0YXRpYyBzc2l6ZV90IGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTA3NC1cXG5ibG9jay9iZnEtY2dyb3VwLmM6MTA3NTpcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV9iZnEsIFxcdTAwMjZjdHgpO1xcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMDc2LVxcdGlmIChyZXQpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9NzQ3PUVYUE9SVF9TWU1CT0xfR1BMKF9fYmxrZ19wcmZpbGxfdTY0KTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy03NTUtICogT25jZSBpbml0aWFsaXplZCwgQGN0eCBjYW4gYmUgdXNlZCB3aXRoIGJsa2dfY29uZl9vcGVuX2JkZXYoKSBhbmRcXG5ibG9jay9ibGstY2dyb3VwLmM6NzU2OiAqIGJsa2dfY29uZl9wcmVwKCkuXFxuYmxvY2svYmxrLWNncm91cC5jLTc1Ny0gKi9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz04MTE9RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19jb25mX29wZW5fYmRldik7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtODEzLS8qKlxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo4MTQ6ICogYmxrZ19jb25mX3ByZXAgLSBwYXJzZSBhbmQgcHJlcGFyZSBmb3IgcGVyLWJsa2cgY29uZmlnIHVwZGF0ZVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MTUtICogQGJsa2NnOiB0YXJnZXQgYmxvY2sgY2dyb3VwXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtODI3LSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzo4Mjg6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcXG5ibG9jay9ibGstY2dyb3VwLmMtODI5LVxcdFxcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtOTMwLX1cXG5ibG9jay9ibGstY2dyb3VwLmM6OTMxOkVYUE9SVF9TWU1CT0xfR1BMKGJsa2dfY29uZl9wcmVwKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtOTMyLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzMtLyoqXFxuYmxvY2svYmxrLWNncm91cC5jOjkzNDogKiBibGtnX2NvbmZfdW5wcmVwIC0gY291bnRlcnBhcnQgb2YgYmxrZ19jb25mX3ByZXAoKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzUtICogQGN0eDogYmxrZ19jb25mX2N0eCBpbml0aWFsaXplZCB3aXRoIGJsa2dfY29uZl9pbml0KClcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMjM9aW50IGJsa2dfY29uZl9vcGVuX2JkZXYoc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcXG5ibG9jay9ibGstY2dyb3VwLmgtMjI0LVxcdF9fY29uZF9hY3F1aXJlcygwLCBcXHUwMDI2Y3R4LVxcdTAwM2ViZGV2LVxcdTAwM2ViZF9xdWV1ZS1cXHUwMDNlcnFfcW9zX211dGV4KTtcXG5ibG9jay9ibGstY2dyb3VwLmg6MjI1OmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuYmxvY2svYmxrLWNncm91cC5oLTIyNi1cXHRcXHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTMxMzg9c3RhdGljIHNzaXplX3QgaW9jX3dlaWdodF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zMTgwLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYzozMTgxOlxcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcXHUwMDI2YmxrY2dfcG9saWN5X2lvY29zdCwgXFx1MDAyNmN0eCk7XFxuYmxvY2svYmxrLWlvY29zdC5jLTMxODItXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz04Mjc9c3RhdGljIHNzaXplX3QgaW9sYXRlbmN5X3NldF9saW1pdChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04NTQtXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjg1NTpcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3ksIFxcdTAwMjZjdHgpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy04NTYtXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTEzNTI9c3RhdGljIHNzaXplX3QgdGdfc2V0X2NvbmYoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTM3Mi1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMzczOlxcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCwgXFx1MDAyNmN0eCk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTM3NC1cXHRpZiAocmV0KVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9MTU0MD1zdGF0aWMgc3NpemVfdCB0Z19zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTU2MC1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxNTYxOlxcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCwgXFx1MDAyNmN0eCk7XFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTU2Mi1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjoxNS4xMTc3NTQ0MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzgwODU4NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBzcG90dGVkIHRoaXMgcGllY2Ugb2YgY29kZSDigJMgaXQncyB1c2VkIGluIGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLCBgaW9jX3dlaWdodF93cml0ZWAsIGBpb2xhdGVuY3lfc2V0X2xpbWl0YCwgYHRnX3NldF9jb25mYCwgYW5kIGB0Z19zZXRfbGltaXRgLiBSaWdodCBhd2F5LCBJIHJlY29nbml6ZSB0aGVzZSBhcyBjZ3JvdXAgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYmxvY2sgZGV2aWNlcy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGtub3cgdGhpcyBpcyBwcmltZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIGJsb2NrIGRldmljZSBjZ3JvdXAgY29uZmlndXJhdGlvbnMgbWVhbnMgaXTigJlzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29yZSBhcmVhIHRoYXQgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcgYXR0ZW50aW9uLlxuXG5Ob3csIGJlZm9yZSBJIGRpdmUgaW50byBmdXp6aW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBldmVuIGNvbXBpbGVkIGluLiBMZXQncyBzdGFydCB3aXRoIGBibG9jay9ibGstY2dyb3VwLmNgIOKAkyBJIHNlZSBpdCdzIG9ubHkgaW5jbHVkZWQgd2hlbiBgQ09ORklHX0JMS19DR1JPVVBgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgdGhlIGBibG9jay9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHByb2NlZWQgY29uZmlkZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MTkuODk4NjE1NDQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzA2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay1jZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9MTg9b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHTElCKVxcdCs9IGJzZy1saWIub1xcbmJsb2NrL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CTEtfQ0dST1VQKVxcdCs9IGJsay1jZ3JvdXAub1xcbmJsb2NrL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CTEtfQ0dST1VQX1JXU1RBVClcXHQrPSBibGstY2dyb3VwLXJ3c3RhdC5vXFxuYmxvY2svTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICs9IGJsay1jZ3JvdXAtZmMtYXBwaWQub1xcbmJsb2NrL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXFx0Kz0gYmxrLXRocm90dGxlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MTkuOTQzMzI3Mjk4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwODg5MTk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJsb2NrIEkvTyBDZ3JvdXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYENPTkZJR19CTEtfQ0dST1VQYCwgZ29vZC4gTm93LCBsZXQncyBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGludm9sdmVkLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBpbiB0aGUgYGJsa2dfY29uZl9wcmVwYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGJsa2dfY29uZl9wcmVwYCBpdHNlbGYgYW5kIGl0cyBkaXJlY3QgY2FsbGVycywgd2hpY2ggY291bGQgaW5jbHVkZSBmdW5jdGlvbnMgbGlrZSBgYmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0YCwgYGlvY193ZWlnaHRfd3JpdGVgLCBgaW9sYXRlbmN5X3NldF9saW1pdGAsIGB0Z19zZXRfY29uZmAsIGFuZCBgdGdfc2V0X2xpbWl0YC4gQnV0IHdhaXQgYSBtaW51dGUsIHRoZSBjb2RlIHNwZWNpZmljYWxseSBtZW50aW9ucyB0aGF0IGBibGtnX2NvbmZfcHJlcGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkLCBzbyBsZXQncyBzdGFydCB0aGVyZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYGJsa2dfY29uZl9wcmVwYCBtb3JlIGNsb3NlbHksIHNwZWNpZmljYWxseSB3aXRoaW4gYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbW9kaWZpY2F0aW9uIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MjQuNDUyMjIxMzczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODI4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgyODpcXHRpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbiA4Mjk6XFx0XFx0XFx0ICAgc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcXG4gODMwOlxcdHtcXG4gODMxOlxcdFxcdHN0cnVjdCBnZW5kaXNrICpkaXNrO1xcbiA4MzI6XFx0XFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnE7XFxuIDgzMzpcXHRcXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2c7XFxuIDgzNDpcXHRcXHRpbnQgcmV0O1xcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFjdHgtXFx1MDAzZWJkZXYpKVxcbiA4Mzc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdGRpc2sgPSBjdHgtXFx1MDAzZWJkZXYtXFx1MDAzZWJkX2Rpc2s7XFxuIDg0MDpcXHRcXHRxID0gZGlzay1cXHUwMDNlcXVldWU7XFxuIDg0MTpcXHRcXG4gODQyOlxcdFxcdC8qIFByZXZlbnQgY29uY3VycmVudCB3aXRoIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCkgKi9cXG4gODQzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4gODQ0OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbiA4NDU6XFx0XFxuIDg0NjpcXHRcXHRpZiAoIWJsa2NnX3BvbGljeV9lbmFibGVkKHEsIHBvbCkpIHtcXG4gODQ3OlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbiA4NDg6XFx0XFx0XFx0Z290byBmYWlsX3VubG9jaztcXG4gODQ5OlxcdFxcdH1cXG4gODUwOlxcdFxcbiA4NTE6XFx0XFx0YmxrZyA9IGJsa2dfbG9va3VwKGJsa2NnLCBxKTtcXG4gODUyOlxcdFxcdGlmIChibGtnKVxcbiA4NTM6XFx0XFx0XFx0Z290byBzdWNjZXNzO1xcbiA4NTQ6XFx0XFxuIDg1NTpcXHRcXHQvKlxcbiA4NTY6XFx0XFx0ICogQ3JlYXRlIGJsa2dzIHdhbGtpbmcgZG93biBmcm9tIGJsa2NnX3Jvb3QgdG8gQGJsa2NnLCBzbyB0aGF0IGFsbFxcbiA4NTc6XFx0XFx0ICogbm9uLXJvb3QgYmxrZ3MgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgcGFyZW50cy5cXG4gODU4OlxcdFxcdCAqL1xcbiA4NTk6XFx0XFx0d2hpbGUgKHRydWUpIHtcXG4gODYwOlxcdFxcdFxcdHN0cnVjdCBibGtjZyAqcG9zID0gYmxrY2c7XFxuIDg2MTpcXHRcXHRcXHRzdHJ1Y3QgYmxrY2cgKnBhcmVudDtcXG4gODYyOlxcdFxcdFxcdHN0cnVjdCBibGtjZ19ncSAqbmV3X2Jsa2c7XFxuIDg2MzpcXHRcXG4gODY0OlxcdFxcdFxcdHBhcmVudCA9IGJsa2NnX3BhcmVudChibGtjZyk7XFxuIDg2NTpcXHRcXHRcXHR3aGlsZSAocGFyZW50IFxcdTAwMjZcXHUwMDI2ICFibGtnX2xvb2t1cChwYXJlbnQsIHEpKSB7XFxuIDg2NjpcXHRcXHRcXHRcXHRwb3MgPSBwYXJlbnQ7XFxuIDg2NzpcXHRcXHRcXHRcXHRwYXJlbnQgPSBibGtjZ19wYXJlbnQocGFyZW50KTtcXG4gODY4OlxcdFxcdFxcdH1cXG4gODY5OlxcdFxcbiA4NzA6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZxLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gODcxOlxcdFxcbiA4NzI6XFx0XFx0XFx0bmV3X2Jsa2cgPSBibGtnX2FsbG9jKHBvcywgZGlzaywgR0ZQX05PSU8pO1xcbiA4NzM6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFuZXdfYmxrZykpIHtcXG4gODc0OlxcdFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDg3NTpcXHRcXHRcXHRcXHRnb3RvIGZhaWxfZXhpdDtcXG4gODc2OlxcdFxcdFxcdH1cXG4gODc3OlxcdFxcbiA4Nzg6XFx0XFx0XFx0aWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9JTykpIHtcXG4gODc5OlxcdFxcdFxcdFxcdGJsa2dfZnJlZShuZXdfYmxrZyk7XFxuIDg4MDpcXHRcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiA4ODE6XFx0XFx0XFx0XFx0Z290byBmYWlsX2V4aXQ7XFxuIDg4MjpcXHRcXHRcXHR9XFxuIDg4MzpcXHRcXG4gODg0OlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbiA4ODU6XFx0XFxuIDg4NjpcXHRcXHRcXHRpZiAoIWJsa2NnX3BvbGljeV9lbmFibGVkKHEsIHBvbCkpIHtcXG4gODg3OlxcdFxcdFxcdFxcdGJsa2dfZnJlZShuZXdfYmxrZyk7XFxuIDg4ODpcXHRcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4gODg5OlxcdFxcdFxcdFxcdGdvdG8gZmFpbF9wcmVsb2FkZWQ7XFxuIDg5MDpcXHRcXHRcXHR9XFxuIDg5MTpcXHRcXG4gODkyOlxcdFxcdFxcdGJsa2cgPSBibGtnX2xvb2t1cChwb3MsIHEpO1xcbiA4OTM6XFx0XFx0XFx0aWYgKGJsa2cpIHtcXG4gODk0OlxcdFxcdFxcdFxcdGJsa2dfZnJlZShuZXdfYmxrZyk7XFxuIDg5NTpcXHRcXHRcXHR9IGVsc2Uge1xcbiA4OTY6XFx0XFx0XFx0XFx0YmxrZyA9IGJsa2dfY3JlYXRlKHBvcywgZGlzaywgbmV3X2Jsa2cpO1xcbiA4OTc6XFx0XFx0XFx0XFx0aWYgKElTX0VSUihibGtnKSkge1xcbiA4OTg6XFx0XFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihibGtnKTtcXG4gODk5OlxcdFxcdFxcdFxcdFxcdGdvdG8gZmFpbF9wcmVsb2FkZWQ7XFxuIDkwMDpcXHRcXHRcXHRcXHR9XFxuIDkwMTpcXHRcXHRcXHR9XFxuIDkwMjpcXHRcXG4gOTAzOlxcdFxcdFxcdHJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTtcXG4gOTA0OlxcdFxcbiA5MDU6XFx0XFx0XFx0aWYgKHBvcyA9PSBibGtjZylcXG4gOTA2OlxcdFxcdFxcdFxcdGdvdG8gc3VjY2VzcztcXG4gOTA3OlxcdFxcdH1cXG4gOTA4OlxcdHN1Y2Nlc3M6XFxuIDkwOTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4gOTEwOlxcdFxcdGN0eC1cXHUwMDNlYmxrZyA9IGJsa2c7XFxuIDkxMTpcXHRcXHRyZXR1cm4gMDtcXG4gOTEyOlxcdFxcbiA5MTM6XFx0ZmFpbF9wcmVsb2FkZWQ6XFxuIDkxNDpcXHRcXHRyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7XFxuIDkxNTpcXHRmYWlsX3VubG9jazpcXG4gOTE2OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cS1cXHUwMDNlcXVldWVfbG9jayk7XFxuIDkxNzpcXHRmYWlsX2V4aXQ6XFxuIDkxODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4gOTE5OlxcdFxcdC8qXFxuIDkyMDpcXHRcXHQgKiBJZiBxdWV1ZSB3YXMgYnlwYXNzaW5nLCB3ZSBzaG91bGQgcmV0cnkuICBEbyBzbyBhZnRlciBhXFxuIDkyMTpcXHRcXHQgKiBzaG9ydCBtc2xlZXAoKS4gIEl0IGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgcXVldWVcXG4gOTIyOlxcdFxcdCAqIGNhbiBiZSBieXBhc3NpbmcgZm9yIHNvbWUgdGltZSBhbmQgaXQncyBhbHdheXMgbmljZSB0b1xcbiA5MjM6XFx0XFx0ICogYXZvaWQgYnVzeSBsb29waW5nLlxcbiA5MjQ6XFx0XFx0ICovXFxuIDkyNTpcXHRcXHRpZiAocmV0ID09IC1FQlVTWSkge1xcbiA5MjY6XFx0XFx0XFx0bXNsZWVwKDEwKTtcXG4gOTI3OlxcdFxcdFxcdHJldCA9IHJlc3RhcnRfc3lzY2FsbCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjoyNC40NTIzNjMxMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjAxMjc1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBibGtnX2NvbmZfcHJlcGAgRnVuY3Rpb24gYW5kIGl0cyBDb25maWd1cmF0aW9uIENvbnRleHQqKlxuXG5Pa2F5LCBzbyB0aGUgYGJsa2dfY29uZl9wcmVwYCBmdW5jdGlvbiBpcyB0aGUga2V5IGFyZWEgSSBuZWVkIHRvIGZvY3VzIG9uLiBCYXNlZCBvbiB0aGUgY2FsbCBncmFwaCwgaXQncyBiZWluZyB1c2VkIGJ5IGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLCBgaW9jX3dlaWdodF93cml0ZWAsIGBpb2xhdGVuY3lfc2V0X2xpbWl0YCwgYHRnX3NldF9jb25mYCwgYW5kIGB0Z19zZXRfbGltaXRgLiBSaWdodCwgYWxsIG9mIHRob3NlIGFyZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGJsb2NrIGNncm91cHMg4oCTIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gR2l2ZW4gaXRzIGNlbnRyYWwgcm9sZSBpbiB0aGVzZSBjb25maWd1cmF0aW9uIHBhdGh3YXlzLCBpdCBtYWtlcyBzZW5zZSB0byBpbmNsdWRlIGBibGtnX2NvbmZfcHJlcGAgaW4gRm9jdXNTeW1ib2xzIGZvciBjbGFyaXR5IGFuZCBxdWljayBhY2Nlc3MuIEZ1cnRoZXJtb3JlLCBJIG5lZWQgdG8gYWRkIGBCTEtfQ0dST1VQYCBpbiBjb25maWdzIHRvby5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIGFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gY2hlY2sgaWYgYEJMS19DR1JPVVBgIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBsb29rIGludG8gdGhhdCBub3cuIFRoaXMgbWlnaHQgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIGFueSBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMgb3IgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjoyOC4yMTQzNzg1MTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTkxMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MjguMjYyOTc2MzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3MjgwMTA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqQ29uZmlndXJhdGlvbiBDaGVja3BvaW50OiBCTEtfQ0dST1VQKipcblxuT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBhYm91dCBzb21ldGhpbmcgY3J1Y2lhbC4gSSdtIGZvY3VzaW5nIG9uIGJsb2NrIGRldmljZSBjZ3JvdXBzLCBhbmQgSSBoYXZlIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBzcGVjaWZpY2FsbHkgYEJMS19DR1JPVVBgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgdGhlIGBibG9jay9LY29uZmlnYCBmaWxlLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYmxvY2sgbGF5ZXIgY29uZmlndXJhdGlvbiwgYW5kIEkgY2FuJ3QgYWZmb3JkIGFueSBhc3N1bXB0aW9ucyBoZXJlLiBHb3R0YSBiZSBwcmVjaXNlLiBBIHF1aWNrIGdsYW5jZSBhdCB0aGF0IEtjb25maWcgZmlsZSB3aWxsIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgQkxLX0NHUk9VUGAgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBwcmVyZXF1aXNpdGUgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBkaXZpbmcgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9yIGFueSByZWxhdGVkIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIwNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIyOjMxLjEzNTc3OTYyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0ODI5MzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG4tLVxcbmluaXQvS2NvbmZpZz0xMDk5PWNvbmZpZyBNRU1DR19WMVxcbi0tXFxuaW5pdC9LY29uZmlnLTExMTUtXFxuaW5pdC9LY29uZmlnOjExMTY6Y29uZmlnIEJMS19DR1JPVVBcXG5pbml0L0tjb25maWctMTExNy1cXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjozMy4zODQwNzY4MDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMjM4NzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gdGhlIGlzc3VlIHNlZW1zIHRvIGJlIGNvbmZpZ3VyYXRpb24tcmVsYXRlZC4gTXkgaW5pdGlhbCBpbnR1aXRpb24gcG9pbnRzIG1lIHRvd2FyZHMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kLCBiYXNlZCBvbiBleHBlcmllbmNlLCBteSBtb25leSdzIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBzcG90IGZvciBpbml0aWFsaXppbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGRlZmluZWQgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgb3B0aW9uIGRlZmluaXRpb24gb3IgYSBsaWtlbHkgaW5jbHVkZSBmaWxlIHJlbGF0ZWQgdG8gbXkgcHJvYmxlbS4gTGV0J3Mgc2VlIGlmIHRoZSBjb25maWd1cmF0aW9uIGtleSBpcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MzYuMzA2NDY3MTcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTExMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTExMDpcXHRcXHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcXG4xMTExOlxcdFxcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxcbjExMTI6XFx0XFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXFxuMTExMzpcXHRcXG4xMTE0OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjExMTU6XFx0XFxuMTExNjpcXHRjb25maWcgQkxLX0NHUk9VUFxcbjExMTc6XFx0XFx0Ym9vbCBcXFwiSU8gY29udHJvbGxlclxcXCJcXG4xMTE4OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4xMTE5OlxcdFxcdGRlZmF1bHQgblxcbjExMjA6XFx0XFx0aGVscFxcbjExMjE6XFx0XFx0R2VuZXJpYyBibG9jayBJTyBjb250cm9sbGVyIGNncm91cCBpbnRlcmZhY2UuIFRoaXMgaXMgdGhlIGNvbW1vblxcbjExMjI6XFx0XFx0Y2dyb3VwIGludGVyZmFjZSB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB2YXJpb3VzIElPIGNvbnRyb2xsaW5nXFxuMTEyMzpcXHRcXHRwb2xpY2llcy5cXG4xMTI0OlxcdFxcbjExMjU6XFx0XFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxcbjExMjY6XFx0XFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxcbjExMjc6XFx0XFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXFxuMTEyODpcXHRcXHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXFxuMTEyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6MzYuMzA2Njc1NTgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjM5ODk5OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlcGVuZGVuY2llcyBhbmQgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBCTEtfQ0dST1VQYCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGJ1aWx0IG9uIHRvcCBvZiBgQkxPQ0tgLiBNYWtlcyBzZW5zZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29udGV4dC4gR290dGEgYmUgdGhvcm91Z2guIE5vdywgbGV0J3Mgc2VlLCB3aGF0IG1vZHVsZXMgYXJlIGFjdHVhbGx5ICp1c2luZyogdGhpcz8gUmlnaHQsIHRoZSBjb2RlIGZvciBgYmxrZ19jb25mX3ByZXBgIGlzIGluIGBibG9jay9iZnEtY2dyb3VwLmNgLCBgYmxvY2svYmxrLWlvY29zdC5jYCwgYGJsb2NrL2Jsay1pb2xhdGVuY3kuY2AsIGFuZCBgYmxvY2svYmxrLXRocm90dGxlLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhlc2UgZmlsZXMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhvc2UgZmlsZXMgdG8gdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgdHJpZ2dlciB0aGVtLCB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgYXJlLiBUaGF0J2xsIHRlbGwgbWUgd2hlbiBhbmQgd2h5IHRoZXNlIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6NDkuNTQ2NTc5MDI2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI1Njc0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiZnEtY2dyb3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTI3PW9iai0kKENPTkZJR19NUV9JT1NDSEVEX0tZQkVSKVxcdCs9IGt5YmVyLWlvc2NoZWQub1xcbmJsb2NrL01ha2VmaWxlOjI4OmJmcS15XFx0XFx0XFx0XFx0Oj0gYmZxLWlvc2NoZWQubyBiZnEtd2YycS5vIGJmcS1jZ3JvdXAub1xcbmJsb2NrL01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19JT1NDSEVEX0JGUSlcXHQrPSBiZnEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjo0OS41OTI4NDA0NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MDkwMTUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkluaXRpYWwgVGhvdWdodHMgb24gQ09ORklHX0lPU0NIRURfQkZRKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfSU9TQ0hFRF9CRlFgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgbGV0J3MgYnJlYWsgaXQgZG93bi4gSXQncyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgQnVkZ2V0IEZhaXIgUXVldWVpbmcgSS9PIHNjaGVkdWxlciDigJMgQkZRLiBUaGUgaW1wb3J0YW5jZSBpcyBjbGVhcjogaXTigJlzIGFib3V0IGNvbnRyb2xsaW5nIGhvdyBJL08gcmVxdWVzdHMgYXJlIHByaW9yaXRpemVkIGFuZCBoYW5kbGVkIGF0IHRoZSBibG9jayBsYXllci4gTm93LCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGUgbnVhbmNlcyBoZXJlLiBBY3RpdmF0aW5nIHRoaXMgaW1wbGllcyB3ZSB3YW50IHRvIGxldmVyYWdlIEJGUeKAmXMgc3RyZW5ndGggaW4gaGFuZGxpbmcgaGVhdnkgSS9PIHdvcmtsb2FkcywgZXNwZWNpYWxseSB0aG9zZSBjb21tb24gaW4gaW50ZXJhY3RpdmUgZGVza3RvcCBlbnZpcm9ubWVudHMgb3IgY29udGFpbmVyaXplZCBzZXR1cHMuIEl0J3MgYWJvdXQgZW5zdXJpbmcgZmFpcm5lc3MgYW5kIHJlc3BvbnNpdmVuZXNzLCBldmVuIHdoZW4gdGhlcmUncyBpbnRlbnNlIGRpc2sgY29udGVudGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gcGVyZm9ybWFuY2UsIGxhdGVuY3ksIGFuZCBvdmVyYWxsIHRocm91Z2hwdXQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSB3b3JrbG9hZCBjaGFyYWN0ZXJpc3RpY3MgYmVmb3JlIGVuYWJsaW5nIHRoaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGV2ZW4gdGhvdWdoIHRoaXMgaXMgZW5hYmxlZCB0aHJvdWdoIGEgY29uZmlnIG9wdGlvbiwgaXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBib290IHBhcmFtZXRlcnMuIFVsdGltYXRlbHksIGVuYWJsaW5nIHRoaXMgY29uZmlnIG9wdGlvbiBpcyB0aGUgZmlyc3Qgc3RlcCwgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcHMgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBob3cgdG8gb3B0aW1pemUgYW5kIG1vbml0b3IgdGhpcyBzY2hlZHVsZXIgZm9yIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6NTIuOTMzNzQ0NTU3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAzNzI0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGstaW9jb3N0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcXHQrPSBibGstaW9sYXRlbmN5Lm9cXG5ibG9jay9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QpXFx0Kz0gYmxrLWlvY29zdC5vXFxuYmxvY2svTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX01RX0lPU0NIRURfREVBRExJTkUpXFx0Kz0gbXEtZGVhZGxpbmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjo1Mi45Nzk3ODY4NjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzNTQ0OTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqQmxvY2sgSS9PIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RgLCBgQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGlzIHNjcmVhbWluZyBcInRocm90dGxpbmchXCIgYW5kIGl0J3MgcHVsbGluZyBtZSB0b3dhcmRzIHRoZSBhcmVhIG9mIGJsb2NrIEkvTyBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY2dyb3VwcyBhbmQgdGhyb3R0bGluZyBtZWNoYW5pc21zLiBHaXZlbiB0aGVzZSB0aHJlZSBjb25maWcgb3B0aW9ucywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZmluZCB0aGUgYmxvY2sgSS9PIHRocm90dGxlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggYSBzdGFuZGFyZCBwb2ludCBvZiByZWZlcmVuY2UsIHRoZSBgYmxvY2svTWFrZWZpbGVgLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBgYmxrLXRocm90dGxlYCBtb2R1bGUsIG9yIHJlbGF0ZWQgbG9naWMsIHNob3VsZCBiZSBkZWZpbmVkIG9yIGF0IGxlYXN0IHJlZmVyZW5jZWQgd2l0aGluIHRoZSBgTWFrZWZpbGVgIGl0c2VsZi4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGNvbXBpbGVkIGFuZCBsaW5rZWQsIGFuZCBob3cgdGhlc2UgY29uZmlnIG9wdGlvbnMgcGxheSBhIHBhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNDMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMjo1Ni40MTUyMzkyNzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTU2MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay10aHJvdHRsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9NYWtlZmlsZT0yMT1vYmotJChDT05GSUdfQkxLX0NHUk9VUF9GQ19BUFBJRCkgKz0gYmxrLWNncm91cC1mYy1hcHBpZC5vXFxuYmxvY2svTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0JMS19ERVZfVEhST1RUTElORylcXHQrPSBibGstdGhyb3R0bGUub1xcbmJsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcXHQrPSBibGstaW9wcmlvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6NTYuNDYxMjAzMDIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODkzODc3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbnM6IGBCTEtfQ0dST1VQYCwgYElPU0NIRURfQkZRYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBCTEtfREVWX1RIUk9UVExJTkdgLiBUaGV5IHNlZW0gbGlrZSBhIHJlbGV2YW50IHNldCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBjZ3JvdXBzIGFuZCBJL08gc2NoZWR1bGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byBlYWNoIG90aGVyLCBzbyBmaXJzdCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBkZXBlbmRlbmN5IGNoZWNrcy4gQXJlIGFueSBvZiB0aGVzZSByZWxpYW50IG9uIGFub3RoZXI/IEFueSBjYXNjYWRpbmcgZWZmZWN0cyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzICpjcnVjaWFsKiBiZWZvcmUgSSBzdGFydCBtYWtpbmcgY2hhbmdlcyBvciBpbnRlZ3JhdGluZyB0aGVtIGludG8gYSBuZXcgc3lzdGVtLiBUaGlzIHdpbGwgaGVscCBtZSBhdm9pZCBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb3IgaW5jb21wYXRpYmlsaXRpZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIyOjU5LjU1MDU5MzEzNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5OTc0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPU0NIRURfQkZRXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWcuaW9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnLmlvc2NoZWQ9MTA9Y29uZmlnIE1RX0lPU0NIRURfS1lCRVJcXG4tLVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0xOC1cXG5ibG9jay9LY29uZmlnLmlvc2NoZWQ6MTk6Y29uZmlnIElPU0NIRURfQkZRXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTIwLVxcdHRyaXN0YXRlIFxcXCJCRlEgSS9PIHNjaGVkdWxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjI6NTkuNTk2NTk3MzQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTI4OTU1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgS2NvbmZpZy5pb3NjaGVkYCBhbmQgdGhlIEJGUSBTY2hlZHVsZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBibG9jay9LY29uZmlnLmlvc2NoZWRgLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCRlEgKEJ1ZGdldCBGYWlyIFF1ZXVlaW5nKSBJL08gc2NoZWR1bGVyIGlzIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBzZWUgaG93IGl0cyBhdmFpbGFiaWxpdHkgaXMgY29udHJvbGxlZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIEkvTyBzY2hlZHVsZXIgb3B0aW9ucy4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzbyBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgcXVpY2sgc2Nhbi4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgbnVhbmNlcyBpbiB0aGUgY29uZGl0aW9ucyBmb3IgZW5hYmxpbmcgQkZRIOKAkyBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9yIGtlcm5lbCBmZWF0dXJlIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogXCJpZiBCTE9DS18uLi4gXCIsIFwiZGVwZW5kcyBvbi4uLlwiLCBhbmQgXCJzZWxlY3QuLi5cIiBzdGF0ZW1lbnRzLiBLbm93aW5nIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjcnVjaWFsIGZvciBhbnkgZXhwZXJ0IHR1bmluZyBvciB0cm91Ymxlc2hvb3RpbmcgZWZmb3J0cyBkb3duIHRoZSBsaW5lLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIG1lbnRhbCBtYXAgb2YgQkZRJ3Mgcm9sZSBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODg1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MDMuMzg5NDk2MDU4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL0tjb25maWcuaW9zY2hlZFwiLFxuICBcIkZpcnN0TGluZVwiOiAxOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxOTpcXHRjb25maWcgSU9TQ0hFRF9CRlFcXG4gIDIwOlxcdFxcdHRyaXN0YXRlIFxcXCJCRlEgSS9PIHNjaGVkdWxlclxcXCJcXG4gIDIxOlxcdFxcdHNlbGVjdCBCTEtfSUNRXFxuICAyMjpcXHRcXHRoZWxwXFxuICAyMzpcXHRcXHRCRlEgSS9PIHNjaGVkdWxlciBmb3IgQkxLLU1RLiBCRlEgZGlzdHJpYnV0ZXMgdGhlIGJhbmR3aWR0aCBvZlxcbiAgMjQ6XFx0XFx0b2YgdGhlIGRldmljZSBhbW9uZyBhbGwgcHJvY2Vzc2VzIGFjY29yZGluZyB0byB0aGVpciB3ZWlnaHRzLFxcbiAgMjU6XFx0XFx0cmVnYXJkbGVzcyBvZiB0aGUgZGV2aWNlIHBhcmFtZXRlcnMgYW5kIHdpdGggYW55IHdvcmtsb2FkLiBJdFxcbiAgMjY6XFx0XFx0YWxzbyBndWFyYW50ZWVzIGEgbG93IGxhdGVuY3kgdG8gaW50ZXJhY3RpdmUgYW5kIHNvZnRcXG4gIDI3OlxcdFxcdHJlYWwtdGltZSBhcHBsaWNhdGlvbnMuICBEZXRhaWxzIGluXFxuICAyODpcXHRcXHREb2N1bWVudGF0aW9uL2Jsb2NrL2JmcS1pb3NjaGVkLnJzdFxcbiAgMjk6XFx0XFxuICAzMDpcXHRjb25maWcgQkZRX0dST1VQX0lPU0NIRURcXG4gIDMxOlxcdCAgICAgICBib29sIFxcXCJCRlEgaGllcmFyY2hpY2FsIHNjaGVkdWxpbmcgc3VwcG9ydFxcXCJcXG4gIDMyOlxcdCAgICAgICBkZXBlbmRzIG9uIElPU0NIRURfQkZRIFxcdTAwMjZcXHUwMDI2IEJMS19DR1JPVVBcXG4gIDMzOlxcdCAgICAgICBkZWZhdWx0IHlcXG4gIDM0OlxcdCAgICAgICBzZWxlY3QgQkxLX0NHUk9VUF9SV1NUQVRcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcbiAgMzc6XFx0ICAgICAgIEVuYWJsZSBoaWVyYXJjaGljYWwgc2NoZWR1bGluZyBpbiBCRlEsIHVzaW5nIHRoZSBibGtpb1xcbiAgMzg6XFx0ICAgICAgIChjZ3JvdXBzLXYxKSBvciBpbyAoY2dyb3Vwcy12MikgY29udHJvbGxlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MDMuMzg5NTYzNTg4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTE4NDk1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBEZXBlbmRlbmNpZXM6IEJGUSBhbmQgY2dyb3VwcyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgYEJGUV9HUk9VUF9JT1NDSEVEYCBmbGFnLiBNeSBicmFpbiBpbW1lZGlhdGVseSBjb25uZWN0cyB0aGF0IHRvIGBiZnEtY2dyb3VwLm9gLiBIbW0sIHdvbmRlciBpZiBpdCdzIGEgZGlyZWN0IGRlcGVuZGVuY3k/IEJldHRlciB0byBjb25maXJtLCBlc3BlY2lhbGx5IHdpdGggaG93IHRoZXNlIHRoaW5ncyB0ZW5kIHRvIGdldCBpbnRlcnR3aW5lZCBpbiB0aGUga2VybmVsLiBMZXQgbWUganVzdCBxdWlja2x5IGRpdmUgaW50byB0aGUgYGJsb2NrL01ha2VmaWxlYCBhbmQgY29uZmlybSB3aGV0aGVyIG9yIG5vdCBJJ20gcmlnaHQuIFRoaXMgaXMgdXN1YWxseSB3aGVyZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBpcyBleHBsaWNpdGx5IHN0YXRlZC4gTm8gcG9pbnQgaW4gd2FzdGluZyB0aW1lIHVubGVzcyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDY3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzowNi40NDE0MTYzNzNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzQwNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJmcS1jZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX01RX0lPU0NIRURfS1lCRVIpXFx0Kz0ga3liZXItaW9zY2hlZC5vXFxuYmxvY2svTWFrZWZpbGU6Mjg6YmZxLXlcXHRcXHRcXHRcXHQ6PSBiZnEtaW9zY2hlZC5vIGJmcS13ZjJxLm8gYmZxLWNncm91cC5vXFxuYmxvY2svTWFrZWZpbGUtMjktb2JqLSQoQ09ORklHX0lPU0NIRURfQkZRKVxcdCs9IGJmcS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjA2LjQ4ODE2MjE2OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODMwMzIyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIERlcGVuZGVuY3kgb2YgYGJmcS1jZ3JvdXAub2AqKlxuXG5IbW0sIHNvIGl0IHNlZW1zIGxpa2UgYGJmcS1jZ3JvdXAub2AgaXMgKmFsd2F5cyogZ2V0dGluZyBidWlsdCBpZiB0aGUgYElPU0NIRURfQkZRYCBvcHRpb24gaXMgdHVybmVkIG9uLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IGJldHRlci4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHRoZSBzb3VyY2UgZmlsZSBpdHNlbGYsIHJpZ2h0PyBMZXQncyB0YWtlIGEgbG9vayBhdCBgYmxvY2svYmZxLWNncm91cC5jYCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgYW5kIGZpZ3VyZSBvdXQgd2h5LiBJdCdzIGxpa2VseSBpbiB0aGVyZSwgcmlnaHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MDkuMzE4NDg4MDI3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9iZnEtY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIGNncm91cHMgc3VwcG9ydCBmb3IgdGhlIEJGUSBJL08gc2NoZWR1bGVyLlxcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jsa2Rldi5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aW1lLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmJ0cmVlLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wcmlvLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2JpdG1hcC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdCNpbmNsdWRlIFxcXCJlbGV2YXRvci5oXFxcIlxcbiAgMTY6XFx0I2luY2x1ZGUgXFxcImJmcS1pb3NjaGVkLmhcXFwiXFxuICAxNzpcXHRcXG4gIDE4OlxcdCNpZmRlZiBDT05GSUdfQkZRX0NHUk9VUF9ERUJVR1xcbiAgMTk6XFx0c3RhdGljIGludCBiZnFfc3RhdF9pbml0KHN0cnVjdCBiZnFfc3RhdCAqc3RhdCwgZ2ZwX3QgZ2ZwKVxcbiAgMjA6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzowOS4zMTg2MTgyODdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNjE5NjM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzIGFuZCBibG9jayBJL08gc2NoZWR1bGluZzpcblxuKipDaGVja2luZyBmb3IgQkZRIEdyb3VwIFNjaGVkdWxpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIHplcm8gaW4gb24gYGJmcS1jZ3JvdXAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIEJGUSAoQnVkZ2V0IEZhaXIgUXVldWVpbmcpIEkvTyBzY2hlZHVsZXIncyBjZ3JvdXAtcmVsYXRlZCBsb2dpYyBzaG91bGQgcmVzaWRlLiBOb3csIHRoZSBrZXkgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgQkZRJ3MgZ3JvdXAgc2NoZWR1bGluZyBmZWF0dXJlcyBhcmUgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGJ1aWxkLiBUaGUgYCNpZmRlZiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXMgdGhlIHRlbGwuIEl0J3MgdGhlIGdhdGVrZWVwZXIuIEl0IGRldGVybWluZXMgd2hldGhlciBhIHNpZ25pZmljYW50IGNodW5rIG9mIHRoZSBjb2RlLCBsaWtlbHkgaW5jbHVkaW5nIHRoZSBjb3JlIG9mIGhvdyBCRlEgaW50ZXJhY3RzIHdpdGggY2dyb3VwcywgaXMgaW5jbHVkZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiBTbywgSSBuZWVkIHRvIGNoZWNrIGlmIHRoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyBhY3RpdmUuIFRoYXQgd2lsbCBkZWNpZGUgbXkgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjEyLjcyNDgxNzczNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NDEyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2JmcS1jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZnEtY2dyb3VwLmM9MjYyPXZvaWQgYmZxZ19zdGF0c19zZXRfc3RhcnRfaWRsZV90aW1lKHN0cnVjdCBiZnFfZ3JvdXAgKmJmcWcpIHsgfVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTI2NS1cXG5ibG9jay9iZnEtY2dyb3VwLmM6MjY2OiNpZmRlZiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURcXG5ibG9jay9iZnEtY2dyb3VwLmMtMjY3LVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jPTE0MDU9c3RydWN0IGNmdHlwZSBiZnFfYmxrZ19maWxlc1tdID0ge1xcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTE0MTQtXFxuYmxvY2svYmZxLWNncm91cC5jOjE0MTU6I2Vsc2VcXHQvKiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQgKi9cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQxNi1cXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNDU0PXN0cnVjdCBiZnFfZ3JvdXAgKmJmcV9jcmVhdGVfZ3JvdXBfaGllcmFyY2h5KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgaW50IG5vZGUpXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQ2Ny19XFxuYmxvY2svYmZxLWNncm91cC5jOjE0Njg6I2VuZGlmXFx0LyogQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjEyLjc3MjU2MzM4MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYwMjMwMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipCRlEgR3JvdXAgSS9PIFNjaGVkdWxlciBDb25maXJtYXRpb24qKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQgYENPTkZJR19CRlFfR1JPVVBfSU9TQ0hFRGAgZmxhZyBpcyBkZWZpbml0ZWx5IG5lY2Vzc2FyeS4gVGhhdCdzIGEgZ2l2ZW47IGl0J3MgdGhlIGZvdW5kYXRpb24gd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIE5vdywgc2luY2Ugd2UncmUgZGl2aW5nIGludG8gdGhlIHdlZWRzIHdpdGggSS9PIHNjaGVkdWxpbmcgYW5kIHRoZSBudWFuY2VzIG9mIEJGUSwgbGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgQkxLX0NHUk9VUF9JT0NPU1RgIGlzIGVuYWJsZWQgdG9vLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSBmb3IgcHJvcGVyIGNncm91cCBpbnRlZ3JhdGlvbiBhbmQgYWNjb3VudGluZy4gSXQncyBiZXN0IHRvIGJlIHRob3JvdWdoIHNpbmNlLCBhcyB3ZSBrbm93LCB0aGUgaW50ZWdyYXRpb24gb2YgQkZRIHdpdGggY2dyb3VwcyBpcyBjcml0aWNhbCB0byBnZXR0aW5nIGEgcHJvcGVybHkgYmFsYW5jZWQgSS9PIHByb2ZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODQxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MTYuMTMyNzk2OTY0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU0MjAxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTE0NT1jb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNTMtXFxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuYmxvY2svS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjE2LjE4MTM0Nzg4OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ2MTA4MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQmxvY2svS2NvbmZpZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBibG9jay9LY29uZmlnYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGFyZWEgYXJvdW5kIGBCTEtfQ0dST1VQX0lPQ09TVGAuIFJpZ2h0LCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBibG9jayBJL08gY29zdCBhY2NvdW50aW5nIHN0dWZmIGlzIGNvbmZpZ3VyZWQuIEkga25vdyB0aGlzIG1vZHVsZSwgYnV0IEkgd2FudCB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCBpdCwgb3IgbWF5YmUgSeKAmW0gdGhpbmtpbmcgYWJvdXQgc29tZSBzcGVjaWZpYyBjb2RlIHBhdGgsIG9yIGNvbnNpZGVyaW5nIGEgbmV3IGZlYXR1cmUsIG9yIGRlYnVnZ2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBJL08gYWNjb3VudGluZyB1c2luZyBjZ3JvdXBzLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGVuYWJsZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgY29uZmxpY3RzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgS2NvbmZpZyBvcHRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBibG9jayBsYXllci4gTGV0IG1lIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIGFuZCBzZWUgd2hlcmUgaXQgZml0cyB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkL2Rpc2FibGVkIGFuZCB3aHkuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaW1wYWN0IG9uIHN5c3RlbSBwZXJmb3JtYW5jZSwgb3Igd2hhdCBvdGhlciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGl0IHRvIHdvcmsuIExldCBtZSBjaGVjayB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaWYgYXZhaWxhYmxlIGFzIHdlbGwsIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnN3ZXJzIHRvIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuXG4qICAgV2hhdCBhcmUgdGhlIGRlZmF1bHQgc2V0dGluZ3M/XG4qICAgQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/XG4qICAgV2hhdCBkb2VzIHRoZSBoZWxwIHRleHQgc2F5IGFib3V0IHRoZSBmZWF0dXJlP1xuKiAgIEhvdyBpcyB0aGlzIGZlYXR1cmUgcmVsYXRlZCB0byBvdGhlciBmZWF0dXJlcz9cbiogICBXaGF0IGFyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjE5LjgyNzQ1OTk2M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1NDpcXHRjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG4gMTU1OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXFxcIlxcbiAxNTY6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDE1NzpcXHRcXHRzZWxlY3QgQkxLX1JRX0FMTE9DX1RJTUVcXG4gMTU4OlxcdFxcdGhlbHBcXG4gMTU5OlxcdFxcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIC53ZWlnaHQgaW50ZXJmYWNlIGZvciBjb3N0XFxuIDE2MDpcXHRcXHRtb2RlbCBiYXNlZCBwcm9wb3J0aW9uYWwgSU8gY29udHJvbC4gIFRoZSBJTyBjb250cm9sbGVyXFxuIDE2MTpcXHRcXHRkaXN0cmlidXRlcyBJTyBjYXBhY2l0eSBiZXR3ZWVuIGRpZmZlcmVudCBncm91cHMgYmFzZWQgb25cXG4gMTYyOlxcdFxcdHRoZWlyIHNoYXJlIG9mIHRoZSBvdmVyYWxsIHdlaWdodCBkaXN0cmlidXRpb24uXFxuIDE2MzpcXHRcXG4gMTY0OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbiAxNjU6XFx0XFx0Ym9vbCBcXFwiQ2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXFxcIlxcbiAxNjY6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDE2NzpcXHRcXHRoZWxwXFxuIDE2ODpcXHRcXHRFbmFibGUgdGhlIC5wcmlvIGludGVyZmFjZSBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzcyB0b1xcbiAxNjk6XFx0XFx0cmVxdWVzdHMuIFRoZSBJL08gcHJpb3JpdHkgY2xhc3MgYWZmZWN0cyB0aGUgb3JkZXIgaW4gd2hpY2ggYW4gSS9PXFxuIDE3MDpcXHRcXHRzY2hlZHVsZXIgYW5kIGJsb2NrIGRldmljZXMgcHJvY2VzcyByZXF1ZXN0cy4gT25seSBzb21lIEkvTyBzY2hlZHVsZXJzXFxuIDE3MTpcXHRcXHRhbmQgc29tZSBibG9jayBkZXZpY2VzIHN1cHBvcnQgSS9PIHByaW9yaXRpZXMuXFxuIDE3MjpcXHRcXG4gMTczOlxcdGNvbmZpZyBCTEtfREVCVUdfRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MTkuODI3NTQ1MTMzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTIxOTEzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgIGlzc3VlLiBMZXQncyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtOiBsYXRlbmN5IHdpdGhpbiBjZ3JvdXBzIGFuZCBzcGVjaWZpY2FsbHkgaG93IEkvTyBpcyBnZXR0aW5nIHNjaGVkdWxlZC4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoYXQgdGhpcyBjZ3JvdXAgbWV0cmljIGlzICphY3R1YWxseSogbWVhc3VyaW5nLiBJcyBpdCBwdXJlLCBvciBpcyBpdCBnb2luZyB0byBoYXZlIHNvbWUgY2F2ZWF0cz8gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IHZlcnNpb24gb2YgdGhlIGtlcm5lbCBhbSBJIG9uPyBBcmUgd2UgZGVhbGluZyB3aXRoIGJsb2NrIGRldmljZXMsIGFuZCBtb3JlIHNwZWNpZmljYWxseSB3aGF0IGlzIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2U/XG5cbkknbSB0aGlua2luZzogSG93IHdlbGwgaXMgdGhlIEkvTyBzY2hlZHVsZXIgYmVoYXZpbmcgd2l0aGluIHRoZSBjZ3JvdXAgaGllcmFyY2h5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3MsIG9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIG51YW5jZWQsIHBlcmhhcHMgaW52b2x2aW5nIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGxheWVycz8gSXMgdGhpcyBhbiBhYnNvbHV0ZSBtZXRyaWMsIG9yIGFyZSB3ZSBqdXN0IGxvb2tpbmcgYXQgdGhlIGRlbHRhcz8gRG9lcyB0aGlzIG1ldHJpYyBhY2NvdW50IGZvciByZWFkcyAqYW5kKiB3cml0ZXM/XG5cblJpZ2h0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyB0aGUgYmFzZWxpbmUgbWVhc3VyZW1lbnRzIGFuZCBzdGFydCB0byBjb21wYXJlIHRvIHRoZSBjb250cm9sIGdyb3VwLiBUaGVuIEknbSBnb2luZyB0byB3YW50IHRvIGNvcnJlbGF0ZSB0aGUgZGF0YSBmcm9tIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAgd2l0aCBvdGhlciByZWxldmFudCBtZXRyaWNzLCBsaWtlIEkvTyBxdWV1ZSBsZW5ndGggYW5kIENQVSB1dGlsaXphdGlvbiB3aXRoaW4gdGhlIGFmZmVjdGVkIGNncm91cCBhbmQgYXQgdGhlIHN5c3RlbS13aWRlIGxldmVsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbW1hbmRzIEkgbmVlZCB0byBydW4gdG8gZ2V0IGEgaG9saXN0aWMgdmlldy4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gYW5kIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgc2FtcGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjI0LjYzOTczOTM5N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzNDpcXHRjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXFxcIlxcbiAxMzY6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDEzNzpcXHRcXHRoZWxwXFxuIDEzODpcXHRcXHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSAubGF0ZW5jeSBpbnRlcmZhY2UgZm9yIElPIHRocm90dGxpbmcuXFxuIDEzOTpcXHRcXHRUaGUgSU8gY29udHJvbGxlciB3aWxsIGF0dGVtcHQgdG8gbWFpbnRhaW4gYXZlcmFnZSBJTyBsYXRlbmNpZXMgYmVsb3dcXG4gMTQwOlxcdFxcdHRoZSBjb25maWd1cmVkIGxhdGVuY3kgdGFyZ2V0LCB0aHJvdHRsaW5nIGFueWJvZHkgd2l0aCBhIGhpZ2hlciBsYXRlbmN5XFxuIDE0MTpcXHRcXHR0YXJnZXQgdGhhbiB0aGUgdmljdGltaXplZCBncm91cC5cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0Tm90ZSwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW50ZXJmYWNlIGFuZCBjb3VsZCBiZSBjaGFuZ2VkIHNvbWVkYXkuXFxuIDE0NDpcXHRcXG4gMTQ1OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuIDE0NjpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1xcXCJcXG4gMTQ3OlxcdFxcdGRlcGVuZHMgb24gQkxLX0NHUk9VUCBcXHUwMDI2XFx1MDAyNiBOVk1FX0ZDXFxuIDE0ODpcXHRcXHRoZWxwXFxuIDE0OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIHRyYWZmaWMgYWNyb3NzXFxuIDE1MDpcXHRcXHQgIGNncm91cCBhcHBsaWNhdGlvbnMuIEl0IGVuYWJsZXMgdGhlIEZhYnJpYyBhbmQgdGhlIHN0b3JhZ2UgdGFyZ2V0cyB0b1xcbiAxNTE6XFx0XFx0ICBpZGVudGlmeSwgbW9uaXRvciwgYW5kIGhhbmRsZSBGQyB0cmFmZmljIGJhc2VkIG9uIFZNIHRhZ3MgYnkgaW5zZXJ0aW5nXFxuIDE1MjpcXHRcXHQgIGFwcGxpY2F0aW9uIHNwZWNpZmljIGlkZW50aWZpY2F0aW9uIGludG8gdGhlIEZDIGZyYW1lLlxcbiAxNTM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjI0LjYzOTgyNjA3N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDcxMzkwNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIFRocm90dGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgYEJMS19ERVZfVEhST1RUTElOR2AuIFdoYXQncyB0aGUgY3VycmVudCBzdGF0dXMsIGFuZCB3aGVyZSBhcmUgdGhlIHBvdGVudGlhbCBwaXRmYWxscz8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSBvcHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2UgYW5kIHByZXZlbnQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBpbnZvbHZlcyBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHNlZWluZyBob3cgSSBjYW4gbW9uaXRvciB0aGUgYmxvY2sgZGV2aWNlIHRocm90dGxpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCB0cmFkZS1vZmZzIHRoYXQgaGF2ZSB0byBiZSBtYWRlIHdoZW4gaXQgY29tZXMgdG8gbWVtb3J5IGFuZCBibG9jayBkZXZpY2VzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBjYXVzaW5nIHVubmVjZXNzYXJ5IGJsb2NrIGRldmljZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjI3LjcxMTIyMDM1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI5NTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz05Nz1jb25maWcgQkxLX0RFVl9aT05FRFxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMDUtXFxuYmxvY2svS2NvbmZpZzoxMDY6Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbmJsb2NrL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIkJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjI3Ljc1NjUyMjcyNloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIxOTYwOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIFRocm90dGxpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIGRpZyBpbnRvIGBibG9jay9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYEJMS19ERVZfVEhST1RUTElOR2Agb3B0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEkvTyB0aHJvdHRsaW5nLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIFRoaXMgbWVhbnMgSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgYW55IGFzc29jaWF0ZWQgaGVscCB0ZXh0IG9yIGNvbW1lbnRzIHRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgY29uZmlndXJlcyBhbmQgY29udHJvbHMgdGhlc2UgbGltaXRzLiBJJ20gbGlrZWx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGludGVyYWN0cyB3aXRoIG90aGVyIGJsb2NrIGxheWVyIGZlYXR1cmVzLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoaXMgbWF5IGxlYWQgbWUgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggcmVsYXRlZCBzb3VyY2UgY29kZSBmaWxlcyB0byBzZWUgaG93IHRoZSBrbm9icyBhcmUgdHVybmVkLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgb3B0aW9uIGluZmx1ZW5jZXMgdGhlIGJsb2NrIEkvTyBzY2hlZHVsZXIgYW5kIHJlbGF0ZWQgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzozMS40Nzg0ODYzOTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDY6XFx0Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbiAxMDc6XFx0XFx0Ym9vbCBcXFwiQmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydFxcXCJcXG4gMTA4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxcbiAxMDk6XFx0XFx0c2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXFxuIDExMDpcXHRcXHRoZWxwXFxuIDExMTpcXHRcXHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxcbiAxMTI6XFx0XFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXFxuIDExMzpcXHRcXHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcXG4gMTE0OlxcdFxcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuIDExNzpcXHRcXG4gMTE4OlxcdGNvbmZpZyBCTEtfV0JUXFxuIDExOTpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHdyaXRlYmFjayB0aHJvdHRsaW5nXFxcIlxcbiAxMjA6XFx0XFx0aGVscFxcbiAxMjE6XFx0XFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYmxvY2sgbGF5ZXIgdG8gdGhyb3R0bGUgYnVmZmVyZWRcXG4gMTIyOlxcdFxcdGJhY2tncm91bmQgd3JpdGViYWNrIGZyb20gdGhlIFZNLCBtYWtpbmcgaXQgbW9yZSBzbW9vdGggYW5kIGhhdmluZ1xcbiAxMjM6XFx0XFx0bGVzcyBpbXBhY3Qgb24gZm9yZWdyb3VuZCBvcGVyYXRpb25zLiBUaGUgdGhyb3R0bGluZyBpcyBkb25lXFxuIDEyNDpcXHRcXHRkeW5hbWljYWxseSBvbiBhbiBhbGdvcml0aG0gbG9vc2VseSBiYXNlZCBvbiBDb0RlbCwgZmFjdG9yaW5nIGluXFxuIDEyNTpcXHRcXHR0aGUgcmVhbHRpbWUgcGVyZm9ybWFuY2Ugb2YgdGhlIGRpc2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjMxLjQ3ODU1NjY3MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjAzMTc4OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbG9jayBJL08gQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN5bWJvbHMgYW5kIGNvbmZpZ3MgcG9pbnRzIHRvIGEgY2xlYXIgYXJlYSBvZiBmb2N1czogYmxvY2sgSS9PIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBsZXZlcmFnaW5nIGNncm91cHMuIFRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEknbSBzZWVpbmcgKGBCTEtfQ0dST1VQYCwgYElPU0NIRURfQkZRYCwgYEJGUV9HUk9VUF9JT1NDSEVEYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYW5kIGBCTEtfREVWX1RIUk9UVExJTkdgKSBpbW1lZGlhdGVseSBwYWludCBhIHBpY3R1cmUgb2YgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBJL08gc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiBhdCBhIHBlci1jZ3JvdXAgbGV2ZWwuIFdlJ3JlIGNsZWFybHkgZGl2aW5nIGludG8gdGhlIHJlYWxtIG9mIGJhbmR3aWR0aCBjb250cm9sLCBsYXRlbmN5IG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgaW50ZWdyYXRpb24gd2l0aCB0aGUgQnVkZ2V0IEZhaXIgUXVldWUgKEJGUSkgc2NoZWR1bGVyLlxuXG5UaGUgZnVuY3Rpb24gc3ltYm9scyBsaXN0ZWQgLSBgYmxrZ19jb25mX3ByZXBgLCBgYmZxX2lvX3NldF9kZXZpY2Vfd2VpZ2h0YCwgYGlvY193ZWlnaHRfd3JpdGVgLCBgaW9sYXRlbmN5X3NldF9saW1pdGAsIGB0Z19zZXRfY29uZmAsIGFuZCBgdGdfc2V0X2xpbWl0YCAtIGFyZSB0aGUgc3BlY2lmaWMgXCJob29rc1wiIHRoYXQgaW1wbGVtZW50IHRoaXMgZnVuY3Rpb25hbGl0eS4gRWFjaCBnaXZlcyBhbiBpbmRpY2F0aW9uIG9mIGhvdyBlYWNoIGZlYXR1cmUgaXMgY29ubmVjdGVkLCB3aXRoIGEgY2xlYXIgZm9jdXMgb24gc2V0dGluZ3MgYW5kIGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHRgLiBVbmRlcnN0YW5kaW5nIHdoZXRoZXIgdGhpcyBpcyBzdGF0aWMgb3IgZHluYW1pY2FsbHkgY29uZmlndXJlZCBhdCBydW50aW1lIGlzIGNydWNpYWwuIEl0J2xsIGRpcmVjdGx5IGltcGFjdCBob3cgZmxleGlibGUgYW5kIGFkYXB0aXZlIG91ciBJL08gbWFuYWdlbWVudCBzdHJhdGVneSBjYW4gYmUuIElzIHRoaXMgYSBvbmUtdGltZSBzZXR1cCwgb3IgY2FuIHdlaWdodHMgYmUgYWRqdXN0ZWQgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgd29ya2xvYWQgZGVtYW5kcz8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzozNi4wODE3Mzc5NTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjc1OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJmcV9pb19zZXRfZGV2aWNlX3dlaWdodFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9iZnEtY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmZxLWNncm91cC5jPTEwMzM9c3RhdGljIGludCBiZnFfaW9fc2V0X3dlaWdodF9sZWdhY3koc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMDU4LVxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMDU5OnN0YXRpYyBzc2l6ZV90IGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuYmxvY2svYmZxLWNncm91cC5jLTEwNjAtXFx0XFx0XFx0XFx0XFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jPTExMDY9c3RhdGljIHNzaXplX3QgYmZxX2lvX3NldF93ZWlnaHQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTExMjItXFxuYmxvY2svYmZxLWNncm91cC5jOjExMjM6XFx0cmV0dXJuIGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodChvZiwgYnVmLCBuYnl0ZXMsIG9mZik7XFxuYmxvY2svYmZxLWNncm91cC5jLTExMjQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzozNi4xMjYwMTk4MzNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MDYzOTczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipTdGF0aWMgU3ltYm9sIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGlzLCBteSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIHN0YXRpYyBlbGVtZW50IGlzbid0IHN1aXRhYmxlIGFzIGEgZm9jdXMgc3ltYm9sLiBXZSBuZWVkIHNvbWV0aGluZyBkeW5hbWljIGFuZCByZXNwb25zaXZlIHRvIGNoYW5nZXMsIGFuZCBhIHN0YXRpYyB2YWx1ZSBqdXN0IGlzbid0IGdvaW5nIHRvIGN1dCBpdC4gV2UgbmVlZCBzb21ldGhpbmcgdGhhdCBjYW4gdHJhY2sgdGhlIHN0YXRlIG9yIHRoZSBjaGFuZ2UgaXRzZWxmLlxuXG5Pa2F5LCBsZXQncyBwaXZvdC4gV2hhdCBhYm91dCBgaW9jX3dlaWdodF93cml0ZWA/IFBlcmhhcHMgdGhhdCBjb250YWlucyB0aGUgbmVjZXNzYXJ5IGR5bmFtaWMgYmVoYXZpb3IuIFdlIHNob3VsZCBiZSBleGFtaW5pbmcgd2hhdCB0aGlzIHBvdGVudGlhbCBzeW1ib2wgZG9lcyAtIGRvZXMgaXQgZ2l2ZSB1cyBhIGNoYW5naW5nIHRhcmdldCB0byBmb2xsb3c/IEl0J3MgdGltZSB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhhdCB3aWxsIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjQyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6MzkuMTE2NjYyMTU0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE3MjExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2Nfd2VpZ2h0X3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1pb2Nvc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstaW9jb3N0LmM9MzEyNz1zdGF0aWMgaW50IGlvY193ZWlnaHRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTMxMzctXFxuYmxvY2svYmxrLWlvY29zdC5jOjMxMzg6c3RhdGljIHNzaXplX3QgaW9jX3dlaWdodF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5ibG9jay9ibGstaW9jb3N0LmMtMzEzOS1cXHRcXHRcXHRcXHRzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTM1Njc9c3RhdGljIHN0cnVjdCBjZnR5cGUgaW9jX2ZpbGVzW10gPSB7XFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtMzU3MS1cXHRcXHQuc2VxX3Nob3cgPSBpb2Nfd2VpZ2h0X3Nob3csXFxuYmxvY2svYmxrLWlvY29zdC5jOjM1NzI6XFx0XFx0LndyaXRlID0gaW9jX3dlaWdodF93cml0ZSxcXG5ibG9jay9ibGstaW9jb3N0LmMtMzU3My1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzozOS4xNjE4NDExNzlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1ODc2ODc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBtYXR0ZXIgbXlzZWxmLCBzdWl0YWJsZSBmb3IgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBTdGF0aWMgQ29uZmlndXJhdGlvbiBJc3N1ZSoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIHN0YXRpYyBjb21wb25lbnQuIFNvbWV0aGluZydzIGNsZWFybHkgYW1pc3MuIEl0IGxvb2tzIGxpa2UgaXQncyBzdGF0aWMuLi4gYnV0IHdoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3RhdGljIG5hdHVyZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvYmxlbS4gV2hhdCBleGFjdGx5IGlzIHRoaXMgcmlnaWRpdHkgcHJldmVudGluZz9cblxuTm93LCBJIHJlY2FsbCBhIGZ1bmN0aW9uLCBgYmxrZ19jb25mX3ByZXBgLiBJcyB0aGF0IHJlbGV2YW50IHRvIHRoaXMgc2l0dWF0aW9uPyBJdCBzZWVtcyBwb3RlbnRpYWxseSB1c2VmdWwgaGVyZS4gSXQncyBvZnRlbiB1c2VkIGluIHJlbGF0ZWQgYmxvY2tzIG9mIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBibGtnX2NvbmZfcHJlcGAgZnVuY3Rpb25zIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhpcyBjb21wb25lbnQuIFBlcmhhcHMgdGhhdCdzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEknbGwgbmVlZCB0byBhbmFseXplIGl0cyBiZWhhdmlvciBpbiB0aGlzIGNvbnRleHQuIEl0J3MgbGlrZWx5IGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjQyLjEyMDYxMzM2NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5Nzk3MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrZ19jb25mX3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLWNncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz03NDc9RVhQT1JUX1NZTUJPTF9HUEwoX19ibGtnX3ByZmlsbF91NjQpO1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTc1NS0gKiBPbmNlIGluaXRpYWxpemVkLCBAY3R4IGNhbiBiZSB1c2VkIHdpdGggYmxrZ19jb25mX29wZW5fYmRldigpIGFuZFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3NTY6ICogYmxrZ19jb25mX3ByZXAoKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtNzU3LSAqL1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTgxMT1FWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfb3Blbl9iZGV2KTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MTMtLyoqXFxuYmxvY2svYmxrLWNncm91cC5jOjgxNDogKiBibGtnX2NvbmZfcHJlcCAtIHBhcnNlIGFuZCBwcmVwYXJlIGZvciBwZXItYmxrZyBjb25maWcgdXBkYXRlXFxuYmxvY2svYmxrLWNncm91cC5jLTgxNS0gKiBAYmxrY2c6IHRhcmdldCBibG9jayBjZ3JvdXBcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjctICovXFxuYmxvY2svYmxrLWNncm91cC5jOjgyODppbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYy04MjktXFx0XFx0ICAgc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzAtfVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo5MzE6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19jb25mX3ByZXApO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy05MzItXFxuYmxvY2svYmxrLWNncm91cC5jLTkzMy0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6OTM0OiAqIGJsa2dfY29uZl91bnByZXAgLSBjb3VudGVycGFydCBvZiBibGtnX2NvbmZfcHJlcCgpXFxuYmxvY2svYmxrLWNncm91cC5jLTkzNS0gKiBAY3R4OiBibGtnX2NvbmZfY3R4IGluaXRpYWxpemVkIHdpdGggYmxrZ19jb25mX2luaXQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMToyMzo0Mi4xNjc1OTc2NloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQxOTAxODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBJTyBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgRGVhZGxvY2sgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgYmxrZ19jb25mX3ByZXBgIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGl0J3MgZXhwb3J0ZWQgaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBzb2xpZCBmb2N1cyBzeW1ib2wgZm9yIHRoaXMgYW5hbHlzaXMsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgY2FsbCBpdCwganVzdCB0byBiZSBzdXJlLCBub3BlLCBpdCdzIGNhbGxlZCBieSBzdGF0aWMgY2dyb3VwIGZpbGUgaGFuZGxlcnMsIHNvIG15IGluaXRpYWwgYXNzZXNzbWVudCBzdGFuZHMuXG5cblJpZ2h0LCBzbyBgYmxrZ19jb25mX3ByZXBgIGlzIHRoZSBwcmltYXJ5IGZvY2FsIHBvaW50LiBOb3csIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoaXMgYXJlYS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYWxsIHRoZSByZWxhdGVkIGZlYXR1cmVzIHRoYXQgYXJlIGVuYWJsZWQgYnkgY29uZmlncy4gSSBzZWUgYEJMS19DR1JPVVBgIGRlcGVuZHMgb24gYEJMT0NLYCwgYElPU0NIRURfQkZRYCBhbHNvIGRlcGVuZHMgb24gYEJMT0NLYC4gVGhlbiBgQkZRX0dST1VQX0lPU0NIRURgIHJlcXVpcmVzIGJvdGggYElPU0NIRURfQkZRYCAqYW5kKiBgQkxLX0NHUk9VUGAuIEZ1cnRoZXJtb3JlLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgYEJMS19ERVZfVEhST1RUTElOR2AgYWxsIGRlcGVuZCBvbiBgQkxLX0NHUk9VUGAuIFNvLCBhIHN1bW1hcnkgb2YgcmVsYXRlZCBjb25maWdzIGlzOlxuYEJMS19DR1JPVVBgLCBgSU9TQ0hFRF9CRlFgLCBgQkZRX0dST1VQX0lPU0NIRURgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBhbmQgYEJMS19ERVZfVEhST1RUTElOR2AuXG5cbk9rLCBzbyB3aXRoIHRoYXQgY29udGV4dCwgdGhlIGNyaXRpY2FsIGNoYW5nZSBpcyBpbiB0aGUgYGJsa2dfY29uZl9wcmVwYCBmdW5jdGlvbiBpdHNlbGYsIHdoZXJlIGBHRlBfS0VSTkVMYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBHRlBfTk9JT2Agd2l0aGluIHRoZSBgcmFkaXhfdHJlZV9wcmVsb2FkYCBjYWxsLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmaXguIEJ5IHVzaW5nIGBHRlBfTk9JT2AgaW5zdGVhZCBvZiBgR0ZQX0tFUk5FTGAsIHdlJ3JlIGVmZmVjdGl2ZWx5IHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgZGVhZGxvY2suIFdlIGFyZSBwcmV2ZW50aW5nIHRoZSBzeXN0ZW0gZnJvbSBhbGxvY2F0aW5nIG1lbW9yeSBpbiBhIGNvbnRleHQgd2hlcmUgaG9sZGluZyBhIGxvY2ssIG9yIHdoZXJlIHBlcmZvcm1pbmcgSU8gd291bGQgY3JlYXRlIGlzc3Vlcy4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBJIHNob3VsZCBmb2N1cyBvbiBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0bmVzcywgYW5kIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNjMsIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjQ5LjQwOTUwMjM3M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTk1NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJJT1NDSEVEX0JGUVwiLFxuICAgIFwiQkZRX0dST1VQX0lPU0NIRURcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrZ19jb25mX3ByZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBgYmxrZ19jb25mX3ByZXBgIGJ5IGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCBkdXJpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgY2dyb3VwIGNvbmZpZ3VyYXRpb24gcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJJT1NDSEVEX0JGUVwiLFxuICAgIFwiQkZRX0dST1VQX0lPU0NIRURcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrZ19jb25mX3ByZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBgYmxrZ19jb25mX3ByZXBgIGJ5IGNoYW5naW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCBkdXJpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgY2dyb3VwIGNvbmZpZ3VyYXRpb24gcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6NDkuNDg2NTA1ODk1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjgyMTI3NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjE6MjM6NDkuNDg3MTUxMDg1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkyODE0NzkxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcgaW4gYHJhZGl4X3RyZWVfcHJlbG9hZGAgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCB0byBtYXRjaCB0aGUgcHJlY2VkaW5nIGBibGtnX2FsbG9jYCBjYWxsIGFuZCBhdm9pZCBwb3RlbnRpYWwgbWVtb3J5IHJlY2xhaW0gZGVhZGxvY2tzIGluIHRoZSBibG9jayBsYXllci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9yZWNsYWltIGlzc3VlICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBzdGFuZGFyZCB0ZXN0aW5nKSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZDE5ZGY3ZDY1MmVmNjhkZGFlNTA3MmE1YWI5NTk4YmI1ZTdkMTBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMjE6MjI6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IGQ5Njc2MTI2YzViNWQuLmI5ODFhODBiYmQ5NDMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTg2Nyw3ICs4NjcsNiBAQCBpbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxuIFx0XHRcdHBhcmVudCA9IGJsa2NnX3BhcmVudChwYXJlbnQpO1xuIFx0XHR9XG4gXG4tXHRcdC8qIERyb3AgbG9ja3MgdG8gZG8gbmV3IGJsa2cgYWxsb2NhdGlvbiB3aXRoIEdGUF9LRVJORUwuICovXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0XHRuZXdfYmxrZyA9IGJsa2dfYWxsb2MocG9zLCBkaXNrLCBHRlBfTk9JTyk7XG5AQCAtODc2LDcgKzg3NSw3IEBAIGludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG4gXHRcdFx0Z290byBmYWlsX2V4aXQ7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKSkge1xuK1x0XHRpZiAocmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9OT0lPKSkge1xuIFx0XHRcdGJsa2dfZnJlZShuZXdfYmxrZyk7XG4gXHRcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGZhaWxfZXhpdDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjQ5LjQ4NzE1MjExNVoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjgxNDYwNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJsb2NrIExheWVyIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9ibGstY2dyb3VwLmNgIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgYSBjaGFuZ2UgaW4gbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MuIFNwZWNpZmljYWxseSwgaW4gYGJsa2dfY29uZl9wcmVwYCwgaXQncyBzd2l0Y2hpbmcgYHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKWAgdG8gYHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9JTylgLiBUaGUgY29tbWVudCB0aGF0IHdhcyByZW1vdmVkLCB0aGUgb25lIGFib3V0IGRyb3BwaW5nIGxvY2tzIGJlZm9yZSBhIGBHRlBfS0VSTkVMYCBhbGxvY2F0aW9uLCBwaXF1ZWQgbXkgaW50ZXJlc3QuIFRoYXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZGVhZGxvY2sgb3IgbG9ja2RlcCBpc3N1ZSB3YXMgdGhlIGRyaXZpbmcgZmFjdG9yLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYW4gYXZvaWRhbmNlIG9mIGFsbG9jYXRpbmcgbWVtb3J5IHdpdGggYEdGUF9LRVJORUxgIGluIGEgY29udGV4dCB3aGVyZSBpdCdzIG5vdCBzYWZlLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IG1lbnRpb25lZCBkcm9wcGluZyBsb2NrcyBmaXJzdCwgd2l0aCBgc3Bpbl91bmxvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7YCByaWdodCBhYm92ZS5cblxuU28sIHRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MsIGdvaW5nIGZyb20gdGhlIHBvdGVudGlhbGx5IGJsb2NraW5nIGBHRlBfS0VSTkVMYCB0byB0aGUgbm9uLWJsb2NraW5nIGBHRlBfTk9JT2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiQ291bGQgdGhpcyBiZSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1wiIE5vcGUsIGNvbXBsZXRlbHkgZGlmZmVyZW50LiBLTVNBTiBpcyB0aGUgdG9vbCBmb3IgdGhhdCwgYW5kIEtBU0FOIGNvdmVycyBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiBUaGlzIGlzbid0IGFib3V0IGVpdGhlciBvZiB0aG9zZSBpc3N1ZXMuXG5cbkxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZmIHRvIGNvbmZpcm0gd2hhdCBJIHdhcyB0aGlua2luZy4gWWVwLCBgbmV3X2Jsa2dgIHdhcyAqYWxyZWFkeSogYmVpbmcgYWxsb2NhdGVkIHdpdGggYEdGUF9OT0lPYC4gU28sIHRoZSBpbmNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIGBuZXdfYmxrZ2AgYWxsb2NhdGlvbiBhbmQgdGhlIGByYWRpeF90cmVlX3ByZWxvYWRgIHByZWxvYWQsIHVzaW5nIGBHRlBfS0VSTkVMYCwgaXMgdGhlIGtleSBpc3N1ZSBoZXJlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYEdGUF9LRVJORUxgIHRvIHByZWxvYWQgdGhlIHJhZGl4IHRyZWUsIHdoaWNoIGNvdWxkIGJlIHByb2JsZW1hdGljIGlmIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgd2l0aGluIHRoZSBibG9jayBJL08gcGF0aC4gUmVjdXJzaW9uIGludG8gdGhlIGJsb2NrIGxheWVyIGNvdWxkIG9jY3VyIGlmIGBHRlBfS0VSTkVMYCB3ZXJlIHVzZWQuXG5cbkluIGVzc2VuY2UsIHRoaXMgaXMgZml4aW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIHJlY2xhaW0gaXNzdWUuIEJ5IGNoYW5naW5nIHRvIGBHRlBfTk9JT2AsIHdlIGF2b2lkIGFueSBwcm9ibGVtYXRpYyBibG9ja2luZyBiZWhhdmlvci4gVGhpcyBpc24ndCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk3LCJPdXRwdXRUb2tlbnMiOjEyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIxOjIzOjU4Ljc2ODYxNTUwOFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZyBpbiBgcmFkaXhfdHJlZV9wcmVsb2FkYCBmcm9tIGBHRlBfS0VSTkVMYCB0byBgR0ZQX05PSU9gIHRvIG1hdGNoIHRoZSBwcmVjZWRpbmcgYGJsa2dfYWxsb2NgIGNhbGwgYW5kIGF2b2lkIHBvdGVudGlhbCBtZW1vcnkgcmVjbGFpbSBkZWFkbG9ja3MgaW4gdGhlIGJsb2NrIGxheWVyLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBsb2NraW5nL3JlY2xhaW0gaXNzdWUgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIG9yIHN0YW5kYXJkIHRlc3RpbmcpIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcgaW4gYHJhZGl4X3RyZWVfcHJlbG9hZGAgZnJvbSBgR0ZQX0tFUk5FTGAgdG8gYEdGUF9OT0lPYCB0byBtYXRjaCB0aGUgcHJlY2VkaW5nIGBibGtnX2FsbG9jYCBjYWxsIGFuZCBhdm9pZCBwb3RlbnRpYWwgbWVtb3J5IHJlY2xhaW0gZGVhZGxvY2tzIGluIHRoZSBibG9jayBsYXllci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9yZWNsYWltIGlzc3VlICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBzdGFuZGFyZCB0ZXN0aW5nKSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowktnrk[1] Phase: Succeeded StartedAt: 2026-08-11 21:24:10 +0000 UTC FinishedAt: 2026-08-11 21:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 21:24:10 +0000 UTC FinishedAt: 2026-08-11 21:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2] Phase: Succeeded StartedAt: 2026-08-11 21:24:10 +0000 UTC FinishedAt: 2026-08-12 01:14:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 21:24:10 +0000 UTC FinishedAt: 2026-08-12 01:14:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 21:24:10 +0000 UTC FinishedAt: 2026-08-11 21:24:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 21:24:10 +0000 UTC FinishedAt: 2026-08-11 21:24:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowktnrk/series-workflowktnrk-convert-artifact-3427896571/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 21:24:31 +0000 UTC FinishedAt: 2026-08-11 21:44:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 21:24:31 +0000 UTC FinishedAt: 2026-08-11 21:44:10 +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:*b56d62a1-9590-41f2-9d52-b6c195e5ae6b,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-workflowktnrk/series-workflowktnrk-convert-artifact-3427896571/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": "cba46593-221c-4138-8a6c-f64a3e5f02ca", "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-workflowktnrk/series-workflowktnrk-build-action-3763616825/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 21:24:31 +0000 UTC FinishedAt: 2026-08-11 21:44:00 +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:*b56d62a1-9590-41f2-9d52-b6c195e5ae6b,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-workflowktnrk/series-workflowktnrk-convert-artifact-3427896571/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": "cba46593-221c-4138-8a6c-f64a3e5f02ca", "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-workflowktnrk/series-workflowktnrk-build-action-3763616825/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 21:44:10 +0000 UTC FinishedAt: 2026-08-11 21:44:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 21:44:10 +0000 UTC FinishedAt: 2026-08-11 21:44:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 21:44:10 +0000 UTC FinishedAt: 2026-08-11 21:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 21:44:10 +0000 UTC FinishedAt: 2026-08-11 21:44:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowktnrk/series-workflowktnrk-convert-artifact-3575148882/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 21:44:20 +0000 UTC FinishedAt: 2026-08-11 21:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 21:44:20 +0000 UTC FinishedAt: 2026-08-11 21:46:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cba46593-221c-4138-8a6c-f64a3e5f02ca,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-workflowktnrk/series-workflowktnrk-build-action-3763616825/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-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 21:46:24 +0000 UTC FinishedAt: 2026-08-11 21:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 21:46:24 +0000 UTC FinishedAt: 2026-08-11 21:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 21:46:24 +0000 UTC FinishedAt: 2026-08-11 22:07:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 21:46:24 +0000 UTC FinishedAt: 2026-08-11 22:07:04 +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:*b56d62a1-9590-41f2-9d52-b6c195e5ae6b,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-workflowktnrk/series-workflowktnrk-convert-artifact-3575148882/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": "4a618380-bcc5-4dcd-afba-4a749c45d5e8", "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-workflowktnrk/series-workflowktnrk-build-action-427225062/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 21:46:24 +0000 UTC FinishedAt: 2026-08-11 22:06:42 +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:*b56d62a1-9590-41f2-9d52-b6c195e5ae6b,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-workflowktnrk/series-workflowktnrk-convert-artifact-3575148882/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": "4a618380-bcc5-4dcd-afba-4a749c45d5e8", "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-workflowktnrk/series-workflowktnrk-build-action-427225062/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 22:07:04 +0000 UTC FinishedAt: 2026-08-11 22:07:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 22:07:04 +0000 UTC FinishedAt: 2026-08-11 22:07:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 22:07:04 +0000 UTC FinishedAt: 2026-08-11 22:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 22:07:04 +0000 UTC FinishedAt: 2026-08-11 22:09:00 +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:*4a618380-bcc5-4dcd-afba-4a749c45d5e8,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-workflowktnrk/series-workflowktnrk-build-action-427225062/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-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 22:09:10 +0000 UTC FinishedAt: 2026-08-12 01:14:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 22:09:10 +0000 UTC FinishedAt: 2026-08-12 01:14:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*cba46593-221c-4138-8a6c-f64a3e5f02ca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4a618380-bcc5-4dcd-afba-4a749c45d5e8,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-workflowktnrk/series-workflowktnrk-build-action-3763616825/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-workflowktnrk/series-workflowktnrk-build-action-427225062/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 22:09:10 +0000 UTC FinishedAt: 2026-08-11 22:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 22:09:10 +0000 UTC FinishedAt: 2026-08-11 22:09:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowktnrk/series-workflowktnrk-convert-artifact-82822567/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 22:09:10 +0000 UTC FinishedAt: 2026-08-11 22:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 22:09:10 +0000 UTC FinishedAt: 2026-08-11 22:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 22:09:10 +0000 UTC FinishedAt: 2026-08-11 22:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 22:09:20 +0000 UTC FinishedAt: 2026-08-12 01:14:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","IOSCHED_BFQ","BFQ_GROUP_IOSCHED","BLK_CGROUP_IOCOST","BLK_CGROUP_IOLATENCY","BLK_DEV_THROTTLING"],"series_id":"ae01c1e8-d25b-4cfa-ab2b-f6408ed8deec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 22:09:20 +0000 UTC FinishedAt: 2026-08-12 01:14:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cba46593-221c-4138-8a6c-f64a3e5f02ca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4a618380-bcc5-4dcd-afba-4a749c45d5e8,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-workflowktnrk/series-workflowktnrk-build-action-3763616825/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-workflowktnrk/series-workflowktnrk-build-action-427225062/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-workflowktnrk/series-workflowktnrk-convert-artifact-82822567/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,}