Name: series-workflow6f8hr Phase: Failed StartedAt: 2026-06-26 17:37:12 +0000 UTC FinishedAt: 2026-06-26 17:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f8hr[0] Phase: Succeeded StartedAt: 2026-06-26 17:37:12 +0000 UTC FinishedAt: 2026-06-26 17:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f8hr[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 17:37:12 +0000 UTC FinishedAt: 2026-06-26 17:51:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyBhIHBvaW50ZXIgYXJndW1lbnQgaW4gYSBkdW1teSBpbmxpbmUgZnVuY3Rpb24gd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQuIFRoaXMgZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIChlLmcuIGZyb20gS01TQU4pLCBidXQgaGFzIG5vIGZ1bmN0aW9uYWwgZWZmZWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdyBzaW5jZSB0aGUgdmFyaWFibGUgaXMgb25seSBwYXNzZWQgdG8gYW5vdGhlciBkdW1teSBpbmxpbmUgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzMwNWFmODhmMzA5N2RkOTAyN2MxOWU3MzliY2Q2YWNlMWFlNWRiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDE3OjUwOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuaCBiL21tL21lbWNvbnRyb2wtdjEuaFxuaW5kZXggZjkyZjgxMTA4ZDVlZDIuLjRmYTZlMmJjODQxM2ZmIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmhcbkBAIC0xMDcsNyAmIzQzOzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpIHsgcmV0dXJuIHRydWU7IH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbiYjNDM7e1xuJiM0MztcdCpsb2NrZWQgPSBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyBhIHBvaW50ZXIgYXJndW1lbnQgaW4gYSBkdW1teSBpbmxpbmUgZnVuY3Rpb24gd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQuIFRoaXMgZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIChlLmcuIGZyb20gS01TQU4pLCBidXQgaGFzIG5vIGZ1bmN0aW9uYWwgZWZmZWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdyBzaW5jZSB0aGUgdmFyaWFibGUgaXMgb25seSBwYXNzZWQgdG8gYW5vdGhlciBkdW1teSBpbmxpbmUgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMzA1YWY4OGYzMDk3ZGQ5MDI3YzE5ZTczOWJjZDZhY2UxYWU1ZGI5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMTc6NTA6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmgKaW5kZXggZjkyZjgxMTA4ZDVlZDIuLjRmYTZlMmJjODQxM2ZmIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLXYxLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC12MS5oCkBAIC0xMDcsNyAmIzQzOzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge30KIAotc3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCkgeyByZXR1cm4gdHJ1ZTsgfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpCiYjNDM7ewomIzQzOwkqbG9ja2VkID0gZmFsc2U7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2wgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC12MS5oYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHJpZ2h0IGF3YXkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgY29udHJvbCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoZXkgYXJlIG1vZGlmeWluZywgYG1lbWNnMV9vb21fcHJlcGFyZWAsIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGhlcmXigJRzcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucyB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgICppc24mIzM5O3QqIGRlZmluZWQgKG9yIGEgc2ltaWxhciBjb25kaXRpb24sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBsb2dpYykuIEl04oCZcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGFsdGVybmF0aXZlIHBhdGgsIGlmIHRoZSBvbGQsIHYxIG1lbWNnIGltcGxlbWVudGF0aW9uIGlzIG5vdCB1c2VkLiBMZXQgbWUgZ28gYWhlYWQgYW5kIGRpdmUgaW50byBgbW0vbWVtY29udHJvbC12MS5oYCB0byBzZWUgZXhhY3RseSB3aGF04oCZcyBnb2luZyBvbiwgYW5kIGhvdyB0aGlzIGFmZmVjdHMgdGhlIE9PTSBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jZzFfb29tX3ByZXBhcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5oPTYwPWVudW0gcmVzX3R5cGUge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaC02Ni1cbm1tL21lbWNvbnRyb2wtdjEuaDo2Nzpib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCk7XG5tbS9tZW1jb250cm9sLXYxLmgtNjgtdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MTA4PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxubW0vbWVtY29udHJvbC12MS5oLTEwOS1cbm1tL21lbWNvbnRyb2wtdjEuaDoxMTA6c3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbm1tL21lbWNvbnRyb2wtdjEuaC0xMTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG1lbWNnMV9vb21fcHJlcGFyZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGEgZHVtbXkgaW1wbGVtZW50YXRpb24gb2YgYG1lbWNnMV9vb21fcHJlcGFyZWAsIHNwZWNpZmljYWxseSB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgICppc24mIzM5O3QqIGVuYWJsZWQuIEludGVyZXN0aW5nLiBUaGUga2V5IGFkZGl0aW9uIGlzIHRoZSBsaW5lIGAqbG9ja2VkID0gZmFsc2U7YCBqdXN0IGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAuIENsZWFybHksIHRoaXMgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBsb2NraW5nIGlzc3VlLiBSZXR1cm5pbmcgYHRydWVgIGxpa2VseSBzaWduYWxzIHNvbWV0aGluZy4uLiBhIHByZXBhcmF0aW9uLCBwZXJoYXBzPyBBbmQgdGhlIGBsb2NrZWRgIHZhcmlhYmxlIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBtdXRleCBvciBzZW1hcGhvcmUuIEFkZGluZyB0aGUgYCpsb2NrZWQgPSBmYWxzZTtgIGV4cGxpY2l0bHkgY2xlYXJzIGFueSBwcmUtZXhpc3RpbmcgbG9jayBzdGF0ZSBiZWZvcmUgcHJvY2VlZGluZy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgKndoeSo/IFdoeSBpcyB0aGlzIG5lY2Vzc2FyeSBpbiB0aGUgZHVtbXkgaW1wbGVtZW50YXRpb24/IFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBUaGUgbmV4dCBzdGVwIGlzIHRvIGZpbmQgd2hlcmUgYG1lbWNnMV9vb21fcHJlcGFyZWAgaXMgY2FsbGVkLiBUaGF0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nICphcm91bmQqIHRoaXMgZnVuY3Rpb24gY2FsbCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2cxX29vbV9wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xMzkzPWJvb2wgbWVtX2Nncm91cF9vb21fc3luY2hyb25pemUoYm9vbCBoYW5kbGUpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE0MzItXG5tbS9tZW1jb250cm9sLXYxLmM6MTQzMzpib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDM0LXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9NjA9ZW51bSByZXNfdHlwZSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5oLTY2LVxubW0vbWVtY29udHJvbC12MS5oOjY3OmJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wtdjEuaC02OC12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0xMDg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG5tbS9tZW1jb250cm9sLXYxLmgtMTA5LVxubW0vbWVtY29udHJvbC12MS5oOjExMDpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxubW0vbWVtY29udHJvbC12MS5oLTExMS17XG4tLVxubW0vbWVtY29udHJvbC5jPTE5MTg9c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBtYXNrLCBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTE5MjYtXG5tbS9tZW1jb250cm9sLmM6MTkyNzpcdGlmICghbWVtY2cxX29vbV9wcmVwYXJlKG1lbWNnLCBcdTAwMjZsb2NrZWQpKVxubW0vbWVtY29udHJvbC5jLTE5MjgtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGVsdmluZyBpbnRvIHRoZSBNZW1vcnkgQ29udHJvbCBPT00gSGFuZGxlcioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIG91dC1vZi1tZW1vcnkgKE9PTSkgaGFuZGxpbmcgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMgcmVzaWRlcy4gVGhlIGNsdWUgaXMgaW4gdGhlIG5hbWUsIHJlYWxseS4gSXQmIzM5O3MgaW5kaWNhdGluZyB0aGF0IGBtZW1fY2dyb3VwX29vbWAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgbWVtb3J5IGNvbnRyb2wgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IGluIHRoZSBgbW1gIGRpcmVjdG9yeSwgd2l0aCBjZ3JvdXAtcmVsYXRlZCBzdHVmZiBmcmVxdWVudGx5IGluIGEgYG1lbWNvbnRyb2wuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGZvciBvcmdhbml6YXRpb25hbCBwdXJwb3Nlcy4gU28sIG15IGh1bmNoIGlzIHRoYXQgYG1lbV9jZ3JvdXBfb29tYCB3aWxsIGJlIGZvdW5kIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGltZSB0byBkaXZlIGluIGFuZCBjb25maXJtIHRoYXQgZXhwZWN0YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbnNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9vb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTE4ODU9c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTE5MTctICovXG5tbS9tZW1jb250cm9sLmM6MTkxODpzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX29vbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IG1hc2ssIGludCBvcmRlcilcbm1tL21lbWNvbnRyb2wuYy0xOTE5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjU5NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY5Ni1cdCAqL1xubW0vbWVtY29udHJvbC5jOjI2OTc6XHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI2OTgtXHRcdFx0ICAgZ2V0X29yZGVyKG5yX3BhZ2VzICogUEFHRV9TSVpFKSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgYG1tL21lbWNvbnRyb2wuY2A6CgoqKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX29vbWAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYG1lbV9jZ3JvdXBfb29tYCBmdW5jdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgYW5kIHRoZSB1c3VhbCBjb21wbGV4aXR5IHRoYXQgY29tZXMgd2l0aCBPT00gaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGNncm91cHMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIHN0cnVjdHVyZWQgdGhpcy4uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGxvZ2ljOiB0aGUgZGVjaXNpb24gcHJvY2VzcywgdGhlIHNlbGVjdGlvbiBvZiB2aWN0aW1zIChpZiBhbnkpLCBhbmQgdGhlIGV2ZW50dWFsIGFjdGlvbnMgdGFrZW4uIFRoZSBnb2FsLCBhcyBhbHdheXMsIGlzIHRvIG1pbmltaXplIGRpc3J1cHRpb24gYW5kIGF2b2lkIGNhc2NhZGluZyBmYWlsdXJlcyB3aGlsZSBmcmVlaW5nIHVwIGVub3VnaCBtZW1vcnkgdG8ga2VlcCB0aGUgc3lzdGVtIHJlc3BvbnNpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGRldGVybWluZSBpZiB0aGUgY3VycmVudCBjZ3JvdXAgaXMgdHJ1bHkgT09NLCB3aGF0IHRyaWdnZXJzIHRoZSBPT00gaGFuZGxpbmcsIGFuZCBob3cgdGhleSBwcmlvcml0aXplIHdoaWNoIGNncm91cHMgdG8gdGFyZ2V0IGlmIHdlJiMzOTtyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSBtZW1vcnkgbmVlZHMgdG8gYmUgcmVjbGFpbWVkIGFjcm9zcyBtdWx0aXBsZSBjZ3JvdXBzLiBJJiMzOTttIGFsc28gY3VyaW91cyBpZiB0aGV5IGhhdmUgYW55IHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBzaXR1YXRpb25zIHdoZXJlIGEgc2luZ2xlIHRhc2sgb3IgY2dyb3VwIGlzIGNvbnN1bWluZyBmYXIgbW9yZSByZXNvdXJjZXMgdGhhbiBpdCBzaG91bGQgYmUsIGFuZCBob3cgaXQgaXMgZGlmZmVyZW50aWF0ZWQgZnJvbSBhIGdsb2JhbCBzaG9ydGFnZS4gQW55IGNsZXZlciBoZXVyaXN0aWNzIG9yIG9wdGltaXphdGlvbnMgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgd2lsbCBiZSBpbnRlcmVzdGluZy4gTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGltcGxlbWVudCB0aGUgcmVjbGFpbSBhbmQga2lsbCBwcm9jZXNzIGluIGVhY2ggb2YgdGhlc2UgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MTg6XHRzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX29vbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IG1hc2ssIGludCBvcmRlcilcbjE5MTk6XHR7XG4xOTIwOlx0XHRib29sIGxvY2tlZCwgcmV0O1xuMTkyMTpcdFxuMTkyMjpcdFx0aWYgKG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcbjE5MjM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTkyNDpcdFxuMTkyNTpcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19PT00pO1xuMTkyNjpcdFxuMTkyNzpcdFx0aWYgKCFtZW1jZzFfb29tX3ByZXBhcmUobWVtY2csIFx1MDAyNmxvY2tlZCkpXG4xOTI4Olx0XHRcdHJldHVybiBmYWxzZTtcbjE5Mjk6XHRcbjE5MzA6XHRcdHJldCA9IG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShtZW1jZywgbWFzaywgb3JkZXIpO1xuMTkzMTpcdFxuMTkzMjpcdFx0bWVtY2cxX29vbV9maW5pc2gobWVtY2csIGxvY2tlZCk7XG4xOTMzOlx0XG4xOTM0Olx0XHRyZXR1cm4gcmV0O1xuMTkzNTpcdH1cbjE5MzY6XHRcbjE5Mzc6XHQvKipcbjE5Mzg6XHQgKiBtZW1fY2dyb3VwX2dldF9vb21fZ3JvdXAgLSBnZXQgYSBtZW1vcnkgY2dyb3VwIHRvIGNsZWFuIHVwIGFmdGVyIE9PTVxuMTkzOTpcdCAqIEB2aWN0aW06IHRhc2sgdG8gYmUga2lsbGVkIGJ5IHRoZSBPT00ga2lsbGVyXG4xOTQwOlx0ICogQG9vbV9kb21haW46IG1lbWNnIGluIGNhc2Ugb2YgbWVtY2cgT09NLCBOVUxMIGluIGNhc2Ugb2Ygc3lzdGVtLXdpZGUgT09NXG4xOTQxOlx0ICpcbjE5NDI6XHQgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG1lbW9yeSBjZ3JvdXAsIHdoaWNoIGhhcyB0byBiZSBjbGVhbmVkIHVwXG4xOTQzOlx0ICogYnkga2lsbGluZyBhbGwgYmVsb25naW5nIE9PTS1raWxsYWJsZSB0YXNrcy5cbjE5NDQ6XHQgKlxuMTk0NTpcdCAqIENhbGxlciBoYXMgdG8gY2FsbCBtZW1fY2dyb3VwX3B1dCgpIG9uIHRoZSByZXR1cm5lZCBub24tTlVMTCBtZW1jZy5cbjE5NDY6XHQgKi9cbjE5NDc6XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDgyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgTWVtb3J5IENncm91cCBPT00gSXNzdWUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEl0IGxvb2tzIGxpa2UgYGxvY2tlZGAgd2l0aGluIHRoZSBgbWVtX2Nncm91cF9vb21gIGZ1bmN0aW9uIGlzIHVuaW5pdGlhbGl6ZWQuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNvdXJjZSBvZiBwb3RlbnRpYWwgYnVncy4gTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSDigJMgYW5kIEkgdGhpbmsgSSYjMzk7bSByaWdodCBhYm91dCB0aGlzIOKAkyB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBgbWVtY2cxX29vbV9wcmVwYXJlYCBqdXN0IGJhaWxzIG91dCBlYXJseSwgcmV0dXJuaW5nIGB0cnVlYCB3aXRob3V0IHRvdWNoaW5nIHRoZSBgKmxvY2tlZGAgdmFyaWFibGUuIEFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGJlY2F1c2Ugc3Vic2VxdWVudGx5LCBgbWVtY2cxX29vbV9maW5pc2hgIGdldHMgY2FsbGVkLCBidXQgaXQmIzM5O3MgcGFzc2VkIHRoaXMgcG90ZW50aWFsbHkgZ2FyYmFnZSB2YWx1ZSBmb3IgYGxvY2tlZGAuIEkgbmVlZCB0byBjb25maXJtIG15IGh1bmNoLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBtZW1jZzFfb29tX2ZpbmlzaGAuIExldCYjMzk7cyBvcGVuIHVwIGBtbS9tZW1jb250cm9sLXYxLmhgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIHRoYXQgdW5pbml0aWFsaXplZCBwb2ludGVyLiBJJiMzOTttIGJldHRpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jZzFfb29tX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmg9Njc9Ym9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpO1xubW0vbWVtY29udHJvbC12MS5oOjY4OnZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZCk7XG5tbS9tZW1jb250cm9sLXYxLmgtNjktdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MTEwPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5oLTExNC19XG5tbS9tZW1jb250cm9sLXYxLmg6MTE1OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKSB7fVxubW0vbWVtY29udHJvbC12MS5oLTExNi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX29vbV9yZWNvdmVyKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA3NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWxseSBIYXJtbGVzcywgWWV0IENvbmNlcm5pbmcsIENvZGUgU25pcHBldCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtY2cxX29vbV9maW5pc2hgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3Mgc3RyaWtpbmcgbWUgYXMgb2RkLiBUaGUgY29kZSBzaG93cyBpdCYjMzk7cyBhbiBlbXB0eSBpbmxpbmUgZnVuY3Rpb24gd2hlbiBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZC4gVGhhdCBtZWFucyB0aGUgYGxvY2tlZGAgdmFyaWFibGUsIHBhc3NlZCBpbnRvIGl0IHVuaW5pdGlhbGl6ZWQsIHdvdWxkbiYjMzk7dCBhY3R1YWxseSAqZG8qIGFueXRoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIGxpa2VseSBoYXJtbGVzcywgbWF5YmUganVzdCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSwgb3IgcGVyaGFwcyBldmVuIGEgS01TQU4gd2FybmluZy4gSSBoYWQgYSBxdWljayBiYWNrLWFuZC1mb3J0aCBpbiBteSBoZWFkLCB0aGlua2luZzogZG9lcyBLTVNBTiBldmVuICpjYXJlKiBhYm91dCBhbiBlbXB0eSBpbmxpbmUgZnVuY3Rpb24/CgpUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IEtNU0FOIGluc3RydW1lbnRzIGF0IHRoZSBJbnRlcm1lZGlhdGUgUmVwcmVzZW50YXRpb24gKElSKSBsZXZlbC4gVGhhdCBtZWFucyBpdCBsaWtlbHkgc2VlcyB0aGUgbG9hZCBvZiB0aGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBiZWZvcmUgdGhlIGlubGluaW5nIG9wdGltaXphdGlvbiBwb3RlbnRpYWxseSBnZXRzIHJpZCBvZiB0aGUgY2FsbC4gVGhhdCYjMzk7cyBpdCEgVGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyogZml4IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlLCBldmVuIGlmIHRoZSAmIzM0O2Z1bmN0aW9uJiMzNDsgaXMgZWZmZWN0aXZlbHkgYSBuby1vcCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uCgpIbW0sIEkgdGhlbiBwYXVzZWQsIHdvbmRlcmluZyBpZiB0aGlzIHdhcyB3b3J0aCBmdXp6aW5nPyBUaGUgcGF0Y2ggaXRzZWxmIGlzIGluY3JlZGlibHkgc2ltcGxlOiBpdCYjMzk7cyBqdXN0IGFkZGluZyBgKmxvY2tlZCA9IGZhbHNlO2AgdG8gdGhpcyBkdW1teSBpbmxpbmUgZnVuY3Rpb24uIEJlY2F1c2UgYG1lbWNnMV9vb21fZmluaXNoYCBkb2VzbiYjMzk7dCAqZG8qIGFueXRoaW5nIHdpdGggYGxvY2tlZGAgd2hlbiBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZCwgdGhlIGNoYW5nZSBzaG91bGRuJiMzOTt0IGhhdmUgYW55IGZ1bmN0aW9uYWwgaW1wYWN0LiBCdXQsIGl0IGRvZXMgZWxpbWluYXRlIGEgcG90ZW50aWFsIEtNU0FOIHdhcm5pbmcuCgpOb3cgSSByZWFsbHkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgb3Igbm90IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIG9yIHdoYXQuLi4gSSBiZXQgaXQmIzM5O3Mgbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dfVjEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzg9Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBpbml0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgbGluZSAxMDg1LiBJJiMzOTt2ZSBnb3QgYSBzcGVjaWZpYyBxdWVzdGlvbiBJJiMzOTttIHRyeWluZyB0byBhbnN3ZXIsIGFuZCBJJiMzOTttIGJldHRpbmcgdGhpcyBzZWN0aW9uIGhvbGRzIHRoZSBrZXkuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb25maWcgZmlsZSBjYW4gaGVscCBtZSBlbHVjaWRhdGUgdGhlIGRldGFpbHMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBkZWNpcGhlciB0aGUgZGVwZW5kZW5jaWVzLCBvcHRpb25zLCBhbmQgbG9naWMgdGhhdCBhcmUgcHJvYmFibHkgZGVmaW5lZCB3aXRoaW4gdGhhdCBjaHVuayBvZiBjb2RlLiBIb3BlZnVsbHksIHRoZSBhbnN3ZXIgaXMgd2l0aGluIHJlYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA4MTpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA4MjpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA4MzpcdFx0ZGVmYXVsdCB5XG4xMDg0Olx0XG4xMDg1Olx0Y29uZmlnIE1FTUNHX1YxXG4xMDg2Olx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwODg6XHRcdGRlZmF1bHQgblxuMTA4OTpcdFx0aGVscFxuMTA5MDpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjEwOTE6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbjEwOTI6XHRcdCAgd2hpY2ggaGF2ZW4mIzM5O3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XG4xMDkzOlx0XHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xuMTA5NDpcdFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbjEwOTU6XHRcbjEwOTY6XHRcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxuMTA5NzpcdFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXG4xMDk4Olx0XHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cbjEwOTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9RmFsc2U6IEEgRGVlcCBEaXZlIGludG8gYSBNaW5vciBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBob25lc3RseSwgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYE1FTUNHX1YxYCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCB3aGljaCBtZWFucyB0aGUgcmVhbCBmdW5jdGlvbiBgbWVtY2cxX29vbV9wcmVwYXJlYCBpcyBqdXN0IGEgZHVtbXkgaW5saW5lLiBUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGAqbG9ja2VkID0gZmFsc2U7YCB3aXRoaW4gdGhpcyBkdW1teSBmdW5jdGlvbi4gSG1tLCBpdCYjMzk7cyBqdXN0IG1lYW50IHRvIHNpbGVuY2UgYSBLTVNBTiB3YXJuaW5nIG9yIG1heWJlIGEgY29tcGlsZXIgY29tcGxhaW50IGFib3V0IGFuIHVuaW5pdGlhbGl6ZWQgYGxvY2tlZGAgdmFyaWFibGUuIEl0JiMzOTtzIHJlYWxseSBqdXN0IGEgZGVmZW5zaXZlIGNvZGluZyBtZWFzdXJlLgoKQ3JpdGljYWxseSwgdGhpcyBpbml0aWFsaXphdGlvbiAqZG9lc24mIzM5O3QqIGFjdHVhbGx5IGNoYW5nZSB0aGUgY29udHJvbCBmbG93LiBUaGUgYGxvY2tlZGAgdmFyaWFibGUmIzM5O3MgdmFsdWUgaXMgcGFzc2VkIHRvIGBtZW1jZzFfb29tX2ZpbmlzaGAsIHdoaWNoIGlzICphbHNvKiBhIGR1bW15IGlubGluZSBmdW5jdGlvbiB0aGF0IGRvZXMgYWJzb2x1dGVseSBub3RoaW5nLiBTbywgaW4gdGVybXMgb2YgYWN0dWFsIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCB0aGlzIHBhdGNoIGhhcyBubyBpbXBhY3Qgd2hhdHNvZXZlci4gTm8gbmV3IGNvZGUgcGF0aHMsIG5vIG5ldyBiZWhhdmlvcnMgdG8gZXhwbG9yZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYSBuby1vcCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgbWVtY2cxX29vbV9wcmVwYXJlYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUsIGJ1dCBJIGhpZ2hseSBkb3VidCBpdCYjMzk7bGwgdHVybiB1cCBhbnl0aGluZyBvZiBpbnRlcmVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2cxX29vbV9wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xMzkzPWJvb2wgbWVtX2Nncm91cF9vb21fc3luY2hyb25pemUoYm9vbCBoYW5kbGUpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE0MzItXG5tbS9tZW1jb250cm9sLXYxLmM6MTQzMzpib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDM0LXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9NjA9ZW51bSByZXNfdHlwZSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5oLTY2LVxubW0vbWVtY29udHJvbC12MS5oOjY3OmJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wtdjEuaC02OC12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0xMDg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG5tbS9tZW1jb250cm9sLXYxLmgtMTA5LVxubW0vbWVtY29udHJvbC12MS5oOjExMDpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxubW0vbWVtY29udHJvbC12MS5oLTExMS17XG4tLVxubW0vbWVtY29udHJvbC5jPTE5MTg9c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBtYXNrLCBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTE5MjYtXG5tbS9tZW1jb250cm9sLmM6MTkyNzpcdGlmICghbWVtY2cxX29vbV9wcmVwYXJlKG1lbWNnLCBcdTAwMjZsb2NrZWQpKVxubW0vbWVtY29udHJvbC5jLTE5MjgtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGb2N1c2luZyBvbiBNZW1vcnkgT09NIEhhbmRsaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgbWVtb3J5IE9PTSAoT3V0IG9mIE1lbW9yeSkgc2l0dWF0aW9uIHdpdGhpbiB0aGUgY2dyb3VwIGNvZGUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX29vbWAgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQgZm9yIE9PTSBldmVudHMgdGhhdCBwZXJ0YWluIHRvIG1lbW9yeSBjZ3JvdXBzLiBBbmQgYXMgYSBmdXJ0aGVyIGRhdGFwb2ludCwgYG1lbWNnMV9vb21fZmluaXNoYCAtIHRoYXQmIzM5O3MgKmFsc28qIG9ubHkgdXNlZCB3aXRoaW4gdGhlIGBtZW1fY2dyb3VwX29vbWAgcGF0aC4gV2hpY2ggc2VlbXMgc2Vuc2libGUsIHNpbmNlIGl0JiMzOTtzIG1vc3QgbGlrZWx5IGhhbmRsaW5nIHRhc2tzIGludGVybmFsIHRvIGRlYWxpbmcgd2l0aCB0aGUgT09NIGV2ZW50cy4gU28gdGhlIHF1ZXN0aW9uIGlzIHdoYXQgaGFwcGVucyBpbiB0aGUgZnVuY3Rpb24sIGFuZCB3aGF0IG90aGVyIGZhY3RvcnMgY29tZSBpbnRvIHBsYXk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNnMV9vb21fZmluaXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xNDMzPWJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNDcyLVxubW0vbWVtY29udHJvbC12MS5jOjE0NzM6dm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKVxubW0vbWVtY29udHJvbC12MS5jLTE0NzQte1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD02Nz1ib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCk7XG5tbS9tZW1jb250cm9sLXYxLmg6Njg6dm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wtdjEuaC02OS12b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0xMTA9c3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbi0tXG5tbS9tZW1jb250cm9sLXYxLmgtMTE0LX1cbm1tL21lbWNvbnRyb2wtdjEuaDoxMTU6c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpIHt9XG5tbS9tZW1jb250cm9sLXYxLmgtMTE2LXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xOTE4PXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgbWFzaywgaW50IG9yZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTMxLVxubW0vbWVtY29udHJvbC5jOjE5MzI6XHRtZW1jZzFfb29tX2ZpbmlzaChtZW1jZywgbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wuYy0xOTMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTAyCgkJCQkJCQlvdXRwdXQ6IDk0CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFkZHJlc3NpbmcgdGhlIENvbXBpbGVyJiMzOTtzIEdydW1ibGVzKioKCkFscmlnaHQsIHNvIHRoaXMgaXMganVzdCBhIHF1aWNrIGNsZWFudXAuIEl0JiMzOTtzIGEgY2xhc3NpYyBjYXNlIG9mIHRoZSBjb21waWxlciBiZWluZyBhIGxpdHRsZSB0b28gcGVkYW50aWMsIHNxdWF3a2luZyBhYm91dCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLiBUaGUgZ29vZCBuZXdzIGlzLCBmcm9tIGEgKmZ1bmN0aW9uYWwqIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgbm9uLWlzc3VlLiBUaGUgdmFyaWFibGUgaXMgb25seSBiZWluZyBmZWQgaW50byBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBkb2VzIGFic29sdXRlbHkgbm90aGluZy4gTm8gY29kZSBwYXRoIGFjdHVhbGx5ICp1c2VzKiB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZS4gSXQmIzM5O3MgcHVyZWx5IGFib3V0IHNpbGVuY2luZyB0aGF0IHBlc2t5IHdhcm5pbmcuIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3Mgbm90IHdvcnRoIHRoZSBlZmZvcnQgZm9yIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90IGVmZmVjdCB0aGUgb3V0Y29tZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbHkgaW5pdGlhbGl6ZXMgYSBwb2ludGVyIGFyZ3VtZW50IGluIGEgZHVtbXkgaW5saW5lIGZ1bmN0aW9uIHdoZW4gQ09ORklHX01FTUNHX1YxIGlzIGRpc2FibGVkLiBUaGlzIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZyAoZS5nLiBmcm9tIEtNU0FOKSwgYnV0IGhhcyBubyBmdW5jdGlvbmFsIGVmZmVjdCBvbiB0aGUgZXhlY3V0aW9uIGZsb3cgc2luY2UgdGhlIHZhcmlhYmxlIGlzIG9ubHkgcGFzc2VkIHRvIGFub3RoZXIgZHVtbXkgaW5saW5lIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGEgcG9pbnRlciBhcmd1bWVudCBpbiBhIGR1bW15IGlubGluZSBmdW5jdGlvbiB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZC4gVGhpcyBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcgKGUuZy4gZnJvbSBLTVNBTiksIGJ1dCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IHNpbmNlIHRoZSB2YXJpYWJsZSBpcyBvbmx5IHBhc3NlZCB0byBhbm90aGVyIGR1bW15IGlubGluZSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90aGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MTowMS4yODIzNDQzNjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgwNTY2ODkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGEgcG9pbnRlciBhcmd1bWVudCBpbiBhIGR1bW15IGlubGluZSBmdW5jdGlvbiB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZC4gVGhpcyBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcgKGUuZy4gZnJvbSBLTVNBTiksIGJ1dCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IHNpbmNlIHRoZSB2YXJpYWJsZSBpcyBvbmx5IHBhc3NlZCB0byBhbm90aGVyIGR1bW15IGlubGluZSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90aGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjAxLjI4MjM1MjEwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4MTczODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzMwNWFmODhmMzA5N2RkOTAyN2MxOWU3MzliY2Q2YWNlMWFlNWRiOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAxNzo1MDo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmhcXG5pbmRleCBmOTJmODExMDhkNWVkMi4uNGZhNmUyYmM4NDEzZmYgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5oXFxuKysrIGIvbW0vbWVtY29udHJvbC12MS5oXFxuQEAgLTEwNyw3ICsxMDcsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCkgeyByZXR1cm4gdHJ1ZTsgfVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxcbit7XFxuK1xcdCpsb2NrZWQgPSBmYWxzZTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6MDEuOTAxNDc2OTQyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE4NjUyNzgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGEgcG9pbnRlciBhcmd1bWVudCBpbiBhIGR1bW15IGlubGluZSBmdW5jdGlvbiB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZC4gVGhpcyBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcgKGUuZy4gZnJvbSBLTVNBTiksIGJ1dCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IHNpbmNlIHRoZSB2YXJpYWJsZSBpcyBvbmx5IHBhc3NlZCB0byBhbm90aGVyIGR1bW15IGlubGluZSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90aGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzMwNWFmODhmMzA5N2RkOTAyN2MxOWU3MzliY2Q2YWNlMWFlNWRiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDE3OjUwOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXG5pbmRleCBmOTJmODExMDhkNWVkMi4uNGZhNmUyYmM4NDEzZmYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuaFxuQEAgLTEwNyw3ICsxMDcsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKSB7IHJldHVybiB0cnVlOyB9XG4rc3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbit7XG4rXHQqbG9ja2VkID0gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MTowMS45MDE0Nzk5NTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA0MTIxNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9tZW1jb250cm9sLXYxLmhgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCByaWdodCBhd2F5IEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgY29udHJvbCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoZXkgYXJlIG1vZGlmeWluZywgYG1lbWNnMV9vb21fcHJlcGFyZWAsIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGhlcmXigJRzcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucyB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgICppc24ndCogZGVmaW5lZCAob3IgYSBzaW1pbGFyIGNvbmRpdGlvbiwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZXhhY3QgbG9naWMpLiBJdOKAmXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBhbHRlcm5hdGl2ZSBwYXRoLCBpZiB0aGUgb2xkLCB2MSBtZW1jZyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdXNlZC4gTGV0IG1lIGdvIGFoZWFkIGFuZCBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wtdjEuaGAgdG8gc2VlIGV4YWN0bHkgd2hhdOKAmXMgZ29pbmcgb24sIGFuZCBob3cgdGhpcyBhZmZlY3RzIHRoZSBPT00gaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjA1LjMwNTYwNDIxM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI2MDEzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2cxX29vbV9wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmg9NjA9ZW51bSByZXNfdHlwZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtNjYtXFxubW0vbWVtY29udHJvbC12MS5oOjY3OmJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLXYxLmgtNjgtdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0xMDg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxubW0vbWVtY29udHJvbC12MS5oLTEwOS1cXG5tbS9tZW1jb250cm9sLXYxLmg6MTEwOnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXFxubW0vbWVtY29udHJvbC12MS5oLTExMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjA1LjQzODIxMTI5OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDk4NzI2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtZW1jZzFfb29tX3ByZXBhcmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGEgZHVtbXkgaW1wbGVtZW50YXRpb24gb2YgYG1lbWNnMV9vb21fcHJlcGFyZWAsIHNwZWNpZmljYWxseSB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgICppc24ndCogZW5hYmxlZC4gSW50ZXJlc3RpbmcuIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhlIGxpbmUgYCpsb2NrZWQgPSBmYWxzZTtgIGp1c3QgYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC4gQ2xlYXJseSwgdGhpcyBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWUuIFJldHVybmluZyBgdHJ1ZWAgbGlrZWx5IHNpZ25hbHMgc29tZXRoaW5nLi4uIGEgcHJlcGFyYXRpb24sIHBlcmhhcHM/IEFuZCB0aGUgYGxvY2tlZGAgdmFyaWFibGUgc3VnZ2VzdHMgc29tZSBraW5kIG9mIG11dGV4IG9yIHNlbWFwaG9yZS4gQWRkaW5nIHRoZSBgKmxvY2tlZCA9IGZhbHNlO2AgZXhwbGljaXRseSBjbGVhcnMgYW55IHByZS1leGlzdGluZyBsb2NrIHN0YXRlIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICp3aHkqPyBXaHkgaXMgdGhpcyBuZWNlc3NhcnkgaW4gdGhlIGR1bW15IGltcGxlbWVudGF0aW9uPyBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIG5leHQgc3RlcCBpcyB0byBmaW5kIHdoZXJlIGBtZW1jZzFfb29tX3ByZXBhcmVgIGlzIGNhbGxlZC4gVGhhdCB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nICphcm91bmQqIHRoaXMgZnVuY3Rpb24gY2FsbCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MTowOC41ODgwODgwOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNDgwOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnMV9vb21fcHJlcGFyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC12MS5jPTEzOTM9Ym9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIGhhbmRsZSlcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDMyLVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNDMzOmJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDM0LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD02MD1lbnVtIHJlc190eXBlIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaC02Ni1cXG5tbS9tZW1jb250cm9sLXYxLmg6Njc6Ym9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpO1xcbm1tL21lbWNvbnRyb2wtdjEuaC02OC12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTEwOD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cXG5tbS9tZW1jb250cm9sLXYxLmgtMTA5LVxcbm1tL21lbWNvbnRyb2wtdjEuaDoxMTA6c3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcXG5tbS9tZW1jb250cm9sLXYxLmgtMTExLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTE4PXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgbWFzaywgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5MjYtXFxubW0vbWVtY29udHJvbC5jOjE5Mjc6XFx0aWYgKCFtZW1jZzFfb29tX3ByZXBhcmUobWVtY2csIFxcdTAwMjZsb2NrZWQpKVxcbm1tL21lbWNvbnRyb2wuYy0xOTI4LVxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6MDguNzMxNTc3NzQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTc5NTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGVsdmluZyBpbnRvIHRoZSBNZW1vcnkgQ29udHJvbCBPT00gSGFuZGxlcioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgb3V0LW9mLW1lbW9yeSAoT09NKSBoYW5kbGluZyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwcyByZXNpZGVzLiBUaGUgY2x1ZSBpcyBpbiB0aGUgbmFtZSwgcmVhbGx5LiBJdCdzIGluZGljYXRpbmcgdGhhdCBgbWVtX2Nncm91cF9vb21gIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IG1lbW9yeSBjb250cm9sIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBpbiB0aGUgYG1tYCBkaXJlY3RvcnksIHdpdGggY2dyb3VwLXJlbGF0ZWQgc3R1ZmYgZnJlcXVlbnRseSBpbiBhIGBtZW1jb250cm9sLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBmb3Igb3JnYW5pemF0aW9uYWwgcHVycG9zZXMuIFNvLCBteSBodW5jaCBpcyB0aGF0IGBtZW1fY2dyb3VwX29vbWAgd2lsbCBiZSBmb3VuZCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgY29uZmlybSB0aGF0IGV4cGVjdGF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGluc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE2OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjExLjYyMzM3NTY3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAwNDY0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9vb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0xODg1PXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5MTctICovXFxubW0vbWVtY29udHJvbC5jOjE5MTg6c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBtYXNrLCBpbnQgb3JkZXIpXFxubW0vbWVtY29udHJvbC5jLTE5MTkte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1OTU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY5Ni1cXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6MjY5NzpcXHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yNjk4LVxcdFxcdFxcdCAgIGdldF9vcmRlcihucl9wYWdlcyAqIFBBR0VfU0laRSkpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjExLjcyMzQyNzAwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjQ1ODk1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IGBtbS9tZW1jb250cm9sLmNgOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX29vbWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBgbWVtX2Nncm91cF9vb21gIGZ1bmN0aW9uLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCB0aGUgdXN1YWwgY29tcGxleGl0eSB0aGF0IGNvbWVzIHdpdGggT09NIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBjZ3JvdXBzLiBMZXQncyBzZWUgaG93IHRoZXkndmUgc3RydWN0dXJlZCB0aGlzLi4uIEknbSBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYzogdGhlIGRlY2lzaW9uIHByb2Nlc3MsIHRoZSBzZWxlY3Rpb24gb2YgdmljdGltcyAoaWYgYW55KSwgYW5kIHRoZSBldmVudHVhbCBhY3Rpb25zIHRha2VuLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byBtaW5pbWl6ZSBkaXNydXB0aW9uIGFuZCBhdm9pZCBjYXNjYWRpbmcgZmFpbHVyZXMgd2hpbGUgZnJlZWluZyB1cCBlbm91Z2ggbWVtb3J5IHRvIGtlZXAgdGhlIHN5c3RlbSByZXNwb25zaXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBkZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgY2dyb3VwIGlzIHRydWx5IE9PTSwgd2hhdCB0cmlnZ2VycyB0aGUgT09NIGhhbmRsaW5nLCBhbmQgaG93IHRoZXkgcHJpb3JpdGl6ZSB3aGljaCBjZ3JvdXBzIHRvIHRhcmdldCBpZiB3ZSdyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSBtZW1vcnkgbmVlZHMgdG8gYmUgcmVjbGFpbWVkIGFjcm9zcyBtdWx0aXBsZSBjZ3JvdXBzLiBJJ20gYWxzbyBjdXJpb3VzIGlmIHRoZXkgaGF2ZSBhbnkgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIHNpdHVhdGlvbnMgd2hlcmUgYSBzaW5nbGUgdGFzayBvciBjZ3JvdXAgaXMgY29uc3VtaW5nIGZhciBtb3JlIHJlc291cmNlcyB0aGFuIGl0IHNob3VsZCBiZSwgYW5kIGhvdyBpdCBpcyBkaWZmZXJlbnRpYXRlZCBmcm9tIGEgZ2xvYmFsIHNob3J0YWdlLiBBbnkgY2xldmVyIGhldXJpc3RpY3Mgb3Igb3B0aW1pemF0aW9ucyB0aGV5J3ZlIGltcGxlbWVudGVkIHdpbGwgYmUgaW50ZXJlc3RpbmcuIE5vdywgbGV0J3Mgc2VlIGhvdyB0aGV5IGltcGxlbWVudCB0aGUgcmVjbGFpbSBhbmQga2lsbCBwcm9jZXNzIGluIGVhY2ggb2YgdGhlc2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjE1LjM4ODAyMDExOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MTgsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MTg6XFx0c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBtYXNrLCBpbnQgb3JkZXIpXFxuMTkxOTpcXHR7XFxuMTkyMDpcXHRcXHRib29sIGxvY2tlZCwgcmV0O1xcbjE5MjE6XFx0XFxuMTkyMjpcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcXG4xOTIzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xOTI0OlxcdFxcbjE5MjU6XFx0XFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19PT00pO1xcbjE5MjY6XFx0XFxuMTkyNzpcXHRcXHRpZiAoIW1lbWNnMV9vb21fcHJlcGFyZShtZW1jZywgXFx1MDAyNmxvY2tlZCkpXFxuMTkyODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTkyOTpcXHRcXG4xOTMwOlxcdFxcdHJldCA9IG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShtZW1jZywgbWFzaywgb3JkZXIpO1xcbjE5MzE6XFx0XFxuMTkzMjpcXHRcXHRtZW1jZzFfb29tX2ZpbmlzaChtZW1jZywgbG9ja2VkKTtcXG4xOTMzOlxcdFxcbjE5MzQ6XFx0XFx0cmV0dXJuIHJldDtcXG4xOTM1OlxcdH1cXG4xOTM2OlxcdFxcbjE5Mzc6XFx0LyoqXFxuMTkzODpcXHQgKiBtZW1fY2dyb3VwX2dldF9vb21fZ3JvdXAgLSBnZXQgYSBtZW1vcnkgY2dyb3VwIHRvIGNsZWFuIHVwIGFmdGVyIE9PTVxcbjE5Mzk6XFx0ICogQHZpY3RpbTogdGFzayB0byBiZSBraWxsZWQgYnkgdGhlIE9PTSBraWxsZXJcXG4xOTQwOlxcdCAqIEBvb21fZG9tYWluOiBtZW1jZyBpbiBjYXNlIG9mIG1lbWNnIE9PTSwgTlVMTCBpbiBjYXNlIG9mIHN5c3RlbS13aWRlIE9PTVxcbjE5NDE6XFx0ICpcXG4xOTQyOlxcdCAqIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbWVtb3J5IGNncm91cCwgd2hpY2ggaGFzIHRvIGJlIGNsZWFuZWQgdXBcXG4xOTQzOlxcdCAqIGJ5IGtpbGxpbmcgYWxsIGJlbG9uZ2luZyBPT00ta2lsbGFibGUgdGFza3MuXFxuMTk0NDpcXHQgKlxcbjE5NDU6XFx0ICogQ2FsbGVyIGhhcyB0byBjYWxsIG1lbV9jZ3JvdXBfcHV0KCkgb24gdGhlIHJldHVybmVkIG5vbi1OVUxMIG1lbWNnLlxcbjE5NDY6XFx0ICovXFxuMTk0NzpcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MToxNS4zODg0Mzk3NThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NjE1MzA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBNZW1vcnkgQ2dyb3VwIE9PTSBJc3N1ZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEl0IGxvb2tzIGxpa2UgYGxvY2tlZGAgd2l0aGluIHRoZSBgbWVtX2Nncm91cF9vb21gIGZ1bmN0aW9uIGlzIHVuaW5pdGlhbGl6ZWQuIFRoYXQncyBhIGNsYXNzaWMgc291cmNlIG9mIHBvdGVudGlhbCBidWdzLiBOb3csIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5IOKAkyBhbmQgSSB0aGluayBJJ20gcmlnaHQgYWJvdXQgdGhpcyDigJMgd2hlbiBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZCwgYG1lbWNnMV9vb21fcHJlcGFyZWAganVzdCBiYWlscyBvdXQgZWFybHksIHJldHVybmluZyBgdHJ1ZWAgd2l0aG91dCB0b3VjaGluZyB0aGUgYCpsb2NrZWRgIHZhcmlhYmxlLiBBbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGJlY2F1c2Ugc3Vic2VxdWVudGx5LCBgbWVtY2cxX29vbV9maW5pc2hgIGdldHMgY2FsbGVkLCBidXQgaXQncyBwYXNzZWQgdGhpcyBwb3RlbnRpYWxseSBnYXJiYWdlIHZhbHVlIGZvciBgbG9ja2VkYC4gSSBuZWVkIHRvIGNvbmZpcm0gbXkgaHVuY2guIFRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYG1lbWNnMV9vb21fZmluaXNoYC4gTGV0J3Mgb3BlbiB1cCBgbW0vbWVtY29udHJvbC12MS5oYCBhbmQgc2VlIHdoYXQgaXQncyBkb2luZyB3aXRoIHRoYXQgdW5pbml0aWFsaXplZCBwb2ludGVyLiBJJ20gYmV0dGluZyB0aGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ4MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6MTguNTY0NTk2NDM1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU5ODUzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2cxX29vbV9maW5pc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC12MS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuaD02Nz1ib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCk7XFxubW0vbWVtY29udHJvbC12MS5oOjY4OnZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZCk7XFxubW0vbWVtY29udHJvbC12MS5oLTY5LXZvaWQgbWVtY2cxX29vbV9yZWNvdmVyKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9MTEwPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtMTE0LX1cXG5tbS9tZW1jb250cm9sLXYxLmg6MTE1OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKSB7fVxcbm1tL21lbWNvbnRyb2wtdjEuaC0xMTYtc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjE4LjcxMDU4ODE5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzc0MDIzMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbGx5IEhhcm1sZXNzLCBZZXQgQ29uY2VybmluZywgQ29kZSBTbmlwcGV0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWVtY2cxX29vbV9maW5pc2hgIGZ1bmN0aW9uLCBhbmQgaXQncyBzdHJpa2luZyBtZSBhcyBvZGQuIFRoZSBjb2RlIHNob3dzIGl0J3MgYW4gZW1wdHkgaW5saW5lIGZ1bmN0aW9uIHdoZW4gYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQuIFRoYXQgbWVhbnMgdGhlIGBsb2NrZWRgIHZhcmlhYmxlLCBwYXNzZWQgaW50byBpdCB1bmluaXRpYWxpemVkLCB3b3VsZG4ndCBhY3R1YWxseSAqZG8qIGFueXRoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIGxpa2VseSBoYXJtbGVzcywgbWF5YmUganVzdCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSwgb3IgcGVyaGFwcyBldmVuIGEgS01TQU4gd2FybmluZy4gSSBoYWQgYSBxdWljayBiYWNrLWFuZC1mb3J0aCBpbiBteSBoZWFkLCB0aGlua2luZzogZG9lcyBLTVNBTiBldmVuICpjYXJlKiBhYm91dCBhbiBlbXB0eSBpbmxpbmUgZnVuY3Rpb24/XG5cblRoZW4gSSByZW1lbWJlcmVkIHRoYXQgS01TQU4gaW5zdHJ1bWVudHMgYXQgdGhlIEludGVybWVkaWF0ZSBSZXByZXNlbnRhdGlvbiAoSVIpIGxldmVsLiBUaGF0IG1lYW5zIGl0IGxpa2VseSBzZWVzIHRoZSBsb2FkIG9mIHRoZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGJlZm9yZSB0aGUgaW5saW5pbmcgb3B0aW1pemF0aW9uIHBvdGVudGlhbGx5IGdldHMgcmlkIG9mIHRoZSBjYWxsLiBUaGF0J3MgaXQhIFRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqIGZpeCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzZSwgZXZlbiBpZiB0aGUgXCJmdW5jdGlvblwiIGlzIGVmZmVjdGl2ZWx5IGEgbm8tb3AgaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuXG5IbW0sIEkgdGhlbiBwYXVzZWQsIHdvbmRlcmluZyBpZiB0aGlzIHdhcyB3b3J0aCBmdXp6aW5nPyBUaGUgcGF0Y2ggaXRzZWxmIGlzIGluY3JlZGlibHkgc2ltcGxlOiBpdCdzIGp1c3QgYWRkaW5nIGAqbG9ja2VkID0gZmFsc2U7YCB0byB0aGlzIGR1bW15IGlubGluZSBmdW5jdGlvbi4gQmVjYXVzZSBgbWVtY2cxX29vbV9maW5pc2hgIGRvZXNuJ3QgKmRvKiBhbnl0aGluZyB3aXRoIGBsb2NrZWRgIHdoZW4gYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQsIHRoZSBjaGFuZ2Ugc2hvdWxkbid0IGhhdmUgYW55IGZ1bmN0aW9uYWwgaW1wYWN0LiBCdXQsIGl0IGRvZXMgZWxpbWluYXRlIGEgcG90ZW50aWFsIEtNU0FOIHdhcm5pbmcuXG5cbk5vdyBJIHJlYWxseSBzaG91bGQgY2hlY2sgd2hldGhlciBvciBub3QgYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgb3Igd2hhdC4uLiBJIGJldCBpdCdzIG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MToyNC40ODQ2MTQ0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUyMTM5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHX1YxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3OD1jb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjI0LjYxOTgzNTYxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQwMzg0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaW5pdC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgbGluZSAxMDg1LiBJJ3ZlIGdvdCBhIHNwZWNpZmljIHF1ZXN0aW9uIEknbSB0cnlpbmcgdG8gYW5zd2VyLCBhbmQgSSdtIGJldHRpbmcgdGhpcyBzZWN0aW9uIGhvbGRzIHRoZSBrZXkuIExldCdzIHNlZSBpZiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvbmZpZyBmaWxlIGNhbiBoZWxwIG1lIGVsdWNpZGF0ZSB0aGUgZGV0YWlscy4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgZGVjaXBoZXIgdGhlIGRlcGVuZGVuY2llcywgb3B0aW9ucywgYW5kIGxvZ2ljIHRoYXQgYXJlIHByb2JhYmx5IGRlZmluZWQgd2l0aGluIHRoYXQgY2h1bmsgb2YgY29kZS4gSG9wZWZ1bGx5LCB0aGUgYW5zd2VyIGlzIHdpdGhpbiByZWFjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjI3Ljc2MDIyMzYxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwODE6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwODI6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA4MzpcXHRcXHRkZWZhdWx0IHlcXG4xMDg0OlxcdFxcbjEwODU6XFx0Y29uZmlnIE1FTUNHX1YxXFxuMTA4NjpcXHRcXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwODg6XFx0XFx0ZGVmYXVsdCBuXFxuMTA4OTpcXHRcXHRoZWxwXFxuMTA5MDpcXHRcXHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxcbjEwOTE6XFx0XFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xcbjEwOTI6XFx0XFx0ICB3aGljaCBoYXZlbid0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxcbjEwOTM6XFx0XFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcXG4xMDk0OlxcdFxcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuMTA5NTpcXHRcXG4xMDk2OlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxcbjEwOTc6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuMTA5ODpcXHRcXHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cXG4xMDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MToyNy43NjA0MDQ2MTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4OTU2OTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9RmFsc2U6IEEgRGVlcCBEaXZlIGludG8gYSBNaW5vciBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgaG9uZXN0bHksIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYE1FTUNHX1YxYCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCB3aGljaCBtZWFucyB0aGUgcmVhbCBmdW5jdGlvbiBgbWVtY2cxX29vbV9wcmVwYXJlYCBpcyBqdXN0IGEgZHVtbXkgaW5saW5lLiBUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGAqbG9ja2VkID0gZmFsc2U7YCB3aXRoaW4gdGhpcyBkdW1teSBmdW5jdGlvbi4gSG1tLCBpdCdzIGp1c3QgbWVhbnQgdG8gc2lsZW5jZSBhIEtNU0FOIHdhcm5pbmcgb3IgbWF5YmUgYSBjb21waWxlciBjb21wbGFpbnQgYWJvdXQgYW4gdW5pbml0aWFsaXplZCBgbG9ja2VkYCB2YXJpYWJsZS4gSXQncyByZWFsbHkganVzdCBhIGRlZmVuc2l2ZSBjb2RpbmcgbWVhc3VyZS5cblxuQ3JpdGljYWxseSwgdGhpcyBpbml0aWFsaXphdGlvbiAqZG9lc24ndCogYWN0dWFsbHkgY2hhbmdlIHRoZSBjb250cm9sIGZsb3cuIFRoZSBgbG9ja2VkYCB2YXJpYWJsZSdzIHZhbHVlIGlzIHBhc3NlZCB0byBgbWVtY2cxX29vbV9maW5pc2hgLCB3aGljaCBpcyAqYWxzbyogYSBkdW1teSBpbmxpbmUgZnVuY3Rpb24gdGhhdCBkb2VzIGFic29sdXRlbHkgbm90aGluZy4gU28sIGluIHRlcm1zIG9mIGFjdHVhbCBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgdGhpcyBwYXRjaCBoYXMgbm8gaW1wYWN0IHdoYXRzb2V2ZXIuIE5vIG5ldyBjb2RlIHBhdGhzLCBubyBuZXcgYmVoYXZpb3JzIHRvIGV4cGxvcmUuIEl0J3MgZXNzZW50aWFsbHkgYSBuby1vcCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgYG1lbWNnMV9vb21fcHJlcGFyZWAgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLCBidXQgSSBoaWdobHkgZG91YnQgaXQnbGwgdHVybiB1cCBhbnl0aGluZyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjMyLjE0OTk3NzUwOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3MTY0MTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZzFfb29tX3ByZXBhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xMzkzPWJvb2wgbWVtX2Nncm91cF9vb21fc3luY2hyb25pemUoYm9vbCBoYW5kbGUpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTQzMi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTQzMzpib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcXG5tbS9tZW1jb250cm9sLXYxLmMtMTQzNC17XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9NjA9ZW51bSByZXNfdHlwZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtNjYtXFxubW0vbWVtY29udHJvbC12MS5oOjY3OmJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLXYxLmgtNjgtdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0xMDg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxubW0vbWVtY29udHJvbC12MS5oLTEwOS1cXG5tbS9tZW1jb250cm9sLXYxLmg6MTEwOnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXFxubW0vbWVtY29udHJvbC12MS5oLTExMS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTkxOD1zdGF0aWMgYm9vbCBtZW1fY2dyb3VwX29vbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IG1hc2ssIGludCBvcmRlcilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xOTI2LVxcbm1tL21lbWNvbnRyb2wuYzoxOTI3OlxcdGlmICghbWVtY2cxX29vbV9wcmVwYXJlKG1lbWNnLCBcXHUwMDI2bG9ja2VkKSlcXG5tbS9tZW1jb250cm9sLmMtMTkyOC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjM0LjgyMTYyODIwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMwMzkzNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1c2luZyBvbiBNZW1vcnkgT09NIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSBob25pbmcgaW4gb24gdGhlIG1lbW9yeSBPT00gKE91dCBvZiBNZW1vcnkpIHNpdHVhdGlvbiB3aXRoaW4gdGhlIGNncm91cCBjb2RlLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX29vbWAgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQgZm9yIE9PTSBldmVudHMgdGhhdCBwZXJ0YWluIHRvIG1lbW9yeSBjZ3JvdXBzLiBBbmQgYXMgYSBmdXJ0aGVyIGRhdGFwb2ludCwgYG1lbWNnMV9vb21fZmluaXNoYCAtIHRoYXQncyAqYWxzbyogb25seSB1c2VkIHdpdGhpbiB0aGUgYG1lbV9jZ3JvdXBfb29tYCBwYXRoLiBXaGljaCBzZWVtcyBzZW5zaWJsZSwgc2luY2UgaXQncyBtb3N0IGxpa2VseSBoYW5kbGluZyB0YXNrcyBpbnRlcm5hbCB0byBkZWFsaW5nIHdpdGggdGhlIE9PTSBldmVudHMuIFNvIHRoZSBxdWVzdGlvbiBpcyB3aGF0IGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uLCBhbmQgd2hhdCBvdGhlciBmYWN0b3JzIGNvbWUgaW50byBwbGF5P1xuXG5cbiIsIklucHV0VG9rZW5zIjo3MjEzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6MzguMTUyMDI1NTQyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg2MTc2NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnMV9vb21fZmluaXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmM9MTQzMz1ib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDcyLVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNDczOnZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZClcXG5tbS9tZW1jb250cm9sLXYxLmMtMTQ3NC17XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9Njc9Ym9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpO1xcbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpO1xcbm1tL21lbWNvbnRyb2wtdjEuaC02OS12b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTExMD1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTExNC19XFxubW0vbWVtY29udHJvbC12MS5oOjExNTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZCkge31cXG5tbS9tZW1jb250cm9sLXYxLmgtMTE2LXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE5MTg9c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBtYXNrLCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTkzMS1cXG5tbS9tZW1jb250cm9sLmM6MTkzMjpcXHRtZW1jZzFfb29tX2ZpbmlzaChtZW1jZywgbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtMTkzMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6NDAuNjM4MjEwMzY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk3NTQzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBZGRyZXNzaW5nIHRoZSBDb21waWxlcidzIEdydW1ibGVzKipcblxuQWxyaWdodCwgc28gdGhpcyBpcyBqdXN0IGEgcXVpY2sgY2xlYW51cC4gSXQncyBhIGNsYXNzaWMgY2FzZSBvZiB0aGUgY29tcGlsZXIgYmVpbmcgYSBsaXR0bGUgdG9vIHBlZGFudGljLCBzcXVhd2tpbmcgYWJvdXQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZS4gVGhlIGdvb2QgbmV3cyBpcywgZnJvbSBhICpmdW5jdGlvbmFsKiBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhIG5vbi1pc3N1ZS4gVGhlIHZhcmlhYmxlIGlzIG9ubHkgYmVpbmcgZmVkIGludG8gYW4gaW5saW5lIGZ1bmN0aW9uIHRoYXQgZG9lcyBhYnNvbHV0ZWx5IG5vdGhpbmcuIE5vIGNvZGUgcGF0aCBhY3R1YWxseSAqdXNlcyogdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUuIEl0J3MgcHVyZWx5IGFib3V0IHNpbGVuY2luZyB0aGF0IHBlc2t5IHdhcm5pbmcuIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQncyBub3Qgd29ydGggdGhlIGVmZm9ydCBmb3Igc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgZWZmZWN0IHRoZSBvdXRjb21lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTAyLCJPdXRwdXRUb2tlbnMiOjk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6NDQuMDg3OTY4MjM3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGEgcG9pbnRlciBhcmd1bWVudCBpbiBhIGR1bW15IGlubGluZSBmdW5jdGlvbiB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZC4gVGhpcyBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcgKGUuZy4gZnJvbSBLTVNBTiksIGJ1dCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IHNpbmNlIHRoZSB2YXJpYWJsZSBpcyBvbmx5IHBhc3NlZCB0byBhbm90aGVyIGR1bW15IGlubGluZSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90aGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyBhIHBvaW50ZXIgYXJndW1lbnQgaW4gYSBkdW1teSBpbmxpbmUgZnVuY3Rpb24gd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQuIFRoaXMgZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIChlLmcuIGZyb20gS01TQU4pLCBidXQgaGFzIG5vIGZ1bmN0aW9uYWwgZWZmZWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdyBzaW5jZSB0aGUgdmFyaWFibGUgaXMgb25seSBwYXNzZWQgdG8gYW5vdGhlciBkdW1teSBpbmxpbmUgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6f8hr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 17:37:12 +0000 UTC FinishedAt: 2026-06-26 17:51:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyBhIHBvaW50ZXIgYXJndW1lbnQgaW4gYSBkdW1teSBpbmxpbmUgZnVuY3Rpb24gd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQuIFRoaXMgZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIChlLmcuIGZyb20gS01TQU4pLCBidXQgaGFzIG5vIGZ1bmN0aW9uYWwgZWZmZWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdyBzaW5jZSB0aGUgdmFyaWFibGUgaXMgb25seSBwYXNzZWQgdG8gYW5vdGhlciBkdW1teSBpbmxpbmUgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzMwNWFmODhmMzA5N2RkOTAyN2MxOWU3MzliY2Q2YWNlMWFlNWRiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDE3OjUwOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuaCBiL21tL21lbWNvbnRyb2wtdjEuaFxuaW5kZXggZjkyZjgxMTA4ZDVlZDIuLjRmYTZlMmJjODQxM2ZmIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmhcbkBAIC0xMDcsNyAmIzQzOzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpIHsgcmV0dXJuIHRydWU7IH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbiYjNDM7e1xuJiM0MztcdCpsb2NrZWQgPSBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyBhIHBvaW50ZXIgYXJndW1lbnQgaW4gYSBkdW1teSBpbmxpbmUgZnVuY3Rpb24gd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQuIFRoaXMgZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIChlLmcuIGZyb20gS01TQU4pLCBidXQgaGFzIG5vIGZ1bmN0aW9uYWwgZWZmZWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdyBzaW5jZSB0aGUgdmFyaWFibGUgaXMgb25seSBwYXNzZWQgdG8gYW5vdGhlciBkdW1teSBpbmxpbmUgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMzA1YWY4OGYzMDk3ZGQ5MDI3YzE5ZTczOWJjZDZhY2UxYWU1ZGI5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMTc6NTA6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmgKaW5kZXggZjkyZjgxMTA4ZDVlZDIuLjRmYTZlMmJjODQxM2ZmIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLXYxLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC12MS5oCkBAIC0xMDcsNyAmIzQzOzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge30KIAotc3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCkgeyByZXR1cm4gdHJ1ZTsgfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpCiYjNDM7ewomIzQzOwkqbG9ja2VkID0gZmFsc2U7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2wgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC12MS5oYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHJpZ2h0IGF3YXkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgY29udHJvbCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoZXkgYXJlIG1vZGlmeWluZywgYG1lbWNnMV9vb21fcHJlcGFyZWAsIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGhlcmXigJRzcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucyB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgICppc24mIzM5O3QqIGRlZmluZWQgKG9yIGEgc2ltaWxhciBjb25kaXRpb24sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBsb2dpYykuIEl04oCZcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGFsdGVybmF0aXZlIHBhdGgsIGlmIHRoZSBvbGQsIHYxIG1lbWNnIGltcGxlbWVudGF0aW9uIGlzIG5vdCB1c2VkLiBMZXQgbWUgZ28gYWhlYWQgYW5kIGRpdmUgaW50byBgbW0vbWVtY29udHJvbC12MS5oYCB0byBzZWUgZXhhY3RseSB3aGF04oCZcyBnb2luZyBvbiwgYW5kIGhvdyB0aGlzIGFmZmVjdHMgdGhlIE9PTSBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jZzFfb29tX3ByZXBhcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5oPTYwPWVudW0gcmVzX3R5cGUge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaC02Ni1cbm1tL21lbWNvbnRyb2wtdjEuaDo2Nzpib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCk7XG5tbS9tZW1jb250cm9sLXYxLmgtNjgtdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MTA4PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxubW0vbWVtY29udHJvbC12MS5oLTEwOS1cbm1tL21lbWNvbnRyb2wtdjEuaDoxMTA6c3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbm1tL21lbWNvbnRyb2wtdjEuaC0xMTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG1lbWNnMV9vb21fcHJlcGFyZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGEgZHVtbXkgaW1wbGVtZW50YXRpb24gb2YgYG1lbWNnMV9vb21fcHJlcGFyZWAsIHNwZWNpZmljYWxseSB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgICppc24mIzM5O3QqIGVuYWJsZWQuIEludGVyZXN0aW5nLiBUaGUga2V5IGFkZGl0aW9uIGlzIHRoZSBsaW5lIGAqbG9ja2VkID0gZmFsc2U7YCBqdXN0IGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAuIENsZWFybHksIHRoaXMgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBsb2NraW5nIGlzc3VlLiBSZXR1cm5pbmcgYHRydWVgIGxpa2VseSBzaWduYWxzIHNvbWV0aGluZy4uLiBhIHByZXBhcmF0aW9uLCBwZXJoYXBzPyBBbmQgdGhlIGBsb2NrZWRgIHZhcmlhYmxlIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBtdXRleCBvciBzZW1hcGhvcmUuIEFkZGluZyB0aGUgYCpsb2NrZWQgPSBmYWxzZTtgIGV4cGxpY2l0bHkgY2xlYXJzIGFueSBwcmUtZXhpc3RpbmcgbG9jayBzdGF0ZSBiZWZvcmUgcHJvY2VlZGluZy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgKndoeSo/IFdoeSBpcyB0aGlzIG5lY2Vzc2FyeSBpbiB0aGUgZHVtbXkgaW1wbGVtZW50YXRpb24/IFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBUaGUgbmV4dCBzdGVwIGlzIHRvIGZpbmQgd2hlcmUgYG1lbWNnMV9vb21fcHJlcGFyZWAgaXMgY2FsbGVkLiBUaGF0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nICphcm91bmQqIHRoaXMgZnVuY3Rpb24gY2FsbCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2cxX29vbV9wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xMzkzPWJvb2wgbWVtX2Nncm91cF9vb21fc3luY2hyb25pemUoYm9vbCBoYW5kbGUpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE0MzItXG5tbS9tZW1jb250cm9sLXYxLmM6MTQzMzpib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDM0LXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9NjA9ZW51bSByZXNfdHlwZSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5oLTY2LVxubW0vbWVtY29udHJvbC12MS5oOjY3OmJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wtdjEuaC02OC12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0xMDg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG5tbS9tZW1jb250cm9sLXYxLmgtMTA5LVxubW0vbWVtY29udHJvbC12MS5oOjExMDpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxubW0vbWVtY29udHJvbC12MS5oLTExMS17XG4tLVxubW0vbWVtY29udHJvbC5jPTE5MTg9c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBtYXNrLCBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTE5MjYtXG5tbS9tZW1jb250cm9sLmM6MTkyNzpcdGlmICghbWVtY2cxX29vbV9wcmVwYXJlKG1lbWNnLCBcdTAwMjZsb2NrZWQpKVxubW0vbWVtY29udHJvbC5jLTE5MjgtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGVsdmluZyBpbnRvIHRoZSBNZW1vcnkgQ29udHJvbCBPT00gSGFuZGxlcioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIG91dC1vZi1tZW1vcnkgKE9PTSkgaGFuZGxpbmcgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMgcmVzaWRlcy4gVGhlIGNsdWUgaXMgaW4gdGhlIG5hbWUsIHJlYWxseS4gSXQmIzM5O3MgaW5kaWNhdGluZyB0aGF0IGBtZW1fY2dyb3VwX29vbWAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgbWVtb3J5IGNvbnRyb2wgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IGluIHRoZSBgbW1gIGRpcmVjdG9yeSwgd2l0aCBjZ3JvdXAtcmVsYXRlZCBzdHVmZiBmcmVxdWVudGx5IGluIGEgYG1lbWNvbnRyb2wuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGZvciBvcmdhbml6YXRpb25hbCBwdXJwb3Nlcy4gU28sIG15IGh1bmNoIGlzIHRoYXQgYG1lbV9jZ3JvdXBfb29tYCB3aWxsIGJlIGZvdW5kIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGltZSB0byBkaXZlIGluIGFuZCBjb25maXJtIHRoYXQgZXhwZWN0YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbnNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9vb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTE4ODU9c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTE5MTctICovXG5tbS9tZW1jb250cm9sLmM6MTkxODpzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX29vbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IG1hc2ssIGludCBvcmRlcilcbm1tL21lbWNvbnRyb2wuYy0xOTE5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjU5NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY5Ni1cdCAqL1xubW0vbWVtY29udHJvbC5jOjI2OTc6XHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI2OTgtXHRcdFx0ICAgZ2V0X29yZGVyKG5yX3BhZ2VzICogUEFHRV9TSVpFKSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgYG1tL21lbWNvbnRyb2wuY2A6CgoqKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX29vbWAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYG1lbV9jZ3JvdXBfb29tYCBmdW5jdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgYW5kIHRoZSB1c3VhbCBjb21wbGV4aXR5IHRoYXQgY29tZXMgd2l0aCBPT00gaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGNncm91cHMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIHN0cnVjdHVyZWQgdGhpcy4uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGxvZ2ljOiB0aGUgZGVjaXNpb24gcHJvY2VzcywgdGhlIHNlbGVjdGlvbiBvZiB2aWN0aW1zIChpZiBhbnkpLCBhbmQgdGhlIGV2ZW50dWFsIGFjdGlvbnMgdGFrZW4uIFRoZSBnb2FsLCBhcyBhbHdheXMsIGlzIHRvIG1pbmltaXplIGRpc3J1cHRpb24gYW5kIGF2b2lkIGNhc2NhZGluZyBmYWlsdXJlcyB3aGlsZSBmcmVlaW5nIHVwIGVub3VnaCBtZW1vcnkgdG8ga2VlcCB0aGUgc3lzdGVtIHJlc3BvbnNpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGRldGVybWluZSBpZiB0aGUgY3VycmVudCBjZ3JvdXAgaXMgdHJ1bHkgT09NLCB3aGF0IHRyaWdnZXJzIHRoZSBPT00gaGFuZGxpbmcsIGFuZCBob3cgdGhleSBwcmlvcml0aXplIHdoaWNoIGNncm91cHMgdG8gdGFyZ2V0IGlmIHdlJiMzOTtyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSBtZW1vcnkgbmVlZHMgdG8gYmUgcmVjbGFpbWVkIGFjcm9zcyBtdWx0aXBsZSBjZ3JvdXBzLiBJJiMzOTttIGFsc28gY3VyaW91cyBpZiB0aGV5IGhhdmUgYW55IHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBzaXR1YXRpb25zIHdoZXJlIGEgc2luZ2xlIHRhc2sgb3IgY2dyb3VwIGlzIGNvbnN1bWluZyBmYXIgbW9yZSByZXNvdXJjZXMgdGhhbiBpdCBzaG91bGQgYmUsIGFuZCBob3cgaXQgaXMgZGlmZmVyZW50aWF0ZWQgZnJvbSBhIGdsb2JhbCBzaG9ydGFnZS4gQW55IGNsZXZlciBoZXVyaXN0aWNzIG9yIG9wdGltaXphdGlvbnMgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgd2lsbCBiZSBpbnRlcmVzdGluZy4gTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGltcGxlbWVudCB0aGUgcmVjbGFpbSBhbmQga2lsbCBwcm9jZXNzIGluIGVhY2ggb2YgdGhlc2UgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MTg6XHRzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX29vbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IG1hc2ssIGludCBvcmRlcilcbjE5MTk6XHR7XG4xOTIwOlx0XHRib29sIGxvY2tlZCwgcmV0O1xuMTkyMTpcdFxuMTkyMjpcdFx0aWYgKG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcbjE5MjM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTkyNDpcdFxuMTkyNTpcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19PT00pO1xuMTkyNjpcdFxuMTkyNzpcdFx0aWYgKCFtZW1jZzFfb29tX3ByZXBhcmUobWVtY2csIFx1MDAyNmxvY2tlZCkpXG4xOTI4Olx0XHRcdHJldHVybiBmYWxzZTtcbjE5Mjk6XHRcbjE5MzA6XHRcdHJldCA9IG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShtZW1jZywgbWFzaywgb3JkZXIpO1xuMTkzMTpcdFxuMTkzMjpcdFx0bWVtY2cxX29vbV9maW5pc2gobWVtY2csIGxvY2tlZCk7XG4xOTMzOlx0XG4xOTM0Olx0XHRyZXR1cm4gcmV0O1xuMTkzNTpcdH1cbjE5MzY6XHRcbjE5Mzc6XHQvKipcbjE5Mzg6XHQgKiBtZW1fY2dyb3VwX2dldF9vb21fZ3JvdXAgLSBnZXQgYSBtZW1vcnkgY2dyb3VwIHRvIGNsZWFuIHVwIGFmdGVyIE9PTVxuMTkzOTpcdCAqIEB2aWN0aW06IHRhc2sgdG8gYmUga2lsbGVkIGJ5IHRoZSBPT00ga2lsbGVyXG4xOTQwOlx0ICogQG9vbV9kb21haW46IG1lbWNnIGluIGNhc2Ugb2YgbWVtY2cgT09NLCBOVUxMIGluIGNhc2Ugb2Ygc3lzdGVtLXdpZGUgT09NXG4xOTQxOlx0ICpcbjE5NDI6XHQgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG1lbW9yeSBjZ3JvdXAsIHdoaWNoIGhhcyB0byBiZSBjbGVhbmVkIHVwXG4xOTQzOlx0ICogYnkga2lsbGluZyBhbGwgYmVsb25naW5nIE9PTS1raWxsYWJsZSB0YXNrcy5cbjE5NDQ6XHQgKlxuMTk0NTpcdCAqIENhbGxlciBoYXMgdG8gY2FsbCBtZW1fY2dyb3VwX3B1dCgpIG9uIHRoZSByZXR1cm5lZCBub24tTlVMTCBtZW1jZy5cbjE5NDY6XHQgKi9cbjE5NDc6XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDgyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgTWVtb3J5IENncm91cCBPT00gSXNzdWUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEl0IGxvb2tzIGxpa2UgYGxvY2tlZGAgd2l0aGluIHRoZSBgbWVtX2Nncm91cF9vb21gIGZ1bmN0aW9uIGlzIHVuaW5pdGlhbGl6ZWQuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNvdXJjZSBvZiBwb3RlbnRpYWwgYnVncy4gTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSDigJMgYW5kIEkgdGhpbmsgSSYjMzk7bSByaWdodCBhYm91dCB0aGlzIOKAkyB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBgbWVtY2cxX29vbV9wcmVwYXJlYCBqdXN0IGJhaWxzIG91dCBlYXJseSwgcmV0dXJuaW5nIGB0cnVlYCB3aXRob3V0IHRvdWNoaW5nIHRoZSBgKmxvY2tlZGAgdmFyaWFibGUuIEFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGJlY2F1c2Ugc3Vic2VxdWVudGx5LCBgbWVtY2cxX29vbV9maW5pc2hgIGdldHMgY2FsbGVkLCBidXQgaXQmIzM5O3MgcGFzc2VkIHRoaXMgcG90ZW50aWFsbHkgZ2FyYmFnZSB2YWx1ZSBmb3IgYGxvY2tlZGAuIEkgbmVlZCB0byBjb25maXJtIG15IGh1bmNoLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBtZW1jZzFfb29tX2ZpbmlzaGAuIExldCYjMzk7cyBvcGVuIHVwIGBtbS9tZW1jb250cm9sLXYxLmhgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIHRoYXQgdW5pbml0aWFsaXplZCBwb2ludGVyLiBJJiMzOTttIGJldHRpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jZzFfb29tX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmg9Njc9Ym9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpO1xubW0vbWVtY29udHJvbC12MS5oOjY4OnZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZCk7XG5tbS9tZW1jb250cm9sLXYxLmgtNjktdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MTEwPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5oLTExNC19XG5tbS9tZW1jb250cm9sLXYxLmg6MTE1OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKSB7fVxubW0vbWVtY29udHJvbC12MS5oLTExNi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX29vbV9yZWNvdmVyKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA3NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWxseSBIYXJtbGVzcywgWWV0IENvbmNlcm5pbmcsIENvZGUgU25pcHBldCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtY2cxX29vbV9maW5pc2hgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3Mgc3RyaWtpbmcgbWUgYXMgb2RkLiBUaGUgY29kZSBzaG93cyBpdCYjMzk7cyBhbiBlbXB0eSBpbmxpbmUgZnVuY3Rpb24gd2hlbiBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZC4gVGhhdCBtZWFucyB0aGUgYGxvY2tlZGAgdmFyaWFibGUsIHBhc3NlZCBpbnRvIGl0IHVuaW5pdGlhbGl6ZWQsIHdvdWxkbiYjMzk7dCBhY3R1YWxseSAqZG8qIGFueXRoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIGxpa2VseSBoYXJtbGVzcywgbWF5YmUganVzdCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSwgb3IgcGVyaGFwcyBldmVuIGEgS01TQU4gd2FybmluZy4gSSBoYWQgYSBxdWljayBiYWNrLWFuZC1mb3J0aCBpbiBteSBoZWFkLCB0aGlua2luZzogZG9lcyBLTVNBTiBldmVuICpjYXJlKiBhYm91dCBhbiBlbXB0eSBpbmxpbmUgZnVuY3Rpb24/CgpUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IEtNU0FOIGluc3RydW1lbnRzIGF0IHRoZSBJbnRlcm1lZGlhdGUgUmVwcmVzZW50YXRpb24gKElSKSBsZXZlbC4gVGhhdCBtZWFucyBpdCBsaWtlbHkgc2VlcyB0aGUgbG9hZCBvZiB0aGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBiZWZvcmUgdGhlIGlubGluaW5nIG9wdGltaXphdGlvbiBwb3RlbnRpYWxseSBnZXRzIHJpZCBvZiB0aGUgY2FsbC4gVGhhdCYjMzk7cyBpdCEgVGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyogZml4IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlLCBldmVuIGlmIHRoZSAmIzM0O2Z1bmN0aW9uJiMzNDsgaXMgZWZmZWN0aXZlbHkgYSBuby1vcCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uCgpIbW0sIEkgdGhlbiBwYXVzZWQsIHdvbmRlcmluZyBpZiB0aGlzIHdhcyB3b3J0aCBmdXp6aW5nPyBUaGUgcGF0Y2ggaXRzZWxmIGlzIGluY3JlZGlibHkgc2ltcGxlOiBpdCYjMzk7cyBqdXN0IGFkZGluZyBgKmxvY2tlZCA9IGZhbHNlO2AgdG8gdGhpcyBkdW1teSBpbmxpbmUgZnVuY3Rpb24uIEJlY2F1c2UgYG1lbWNnMV9vb21fZmluaXNoYCBkb2VzbiYjMzk7dCAqZG8qIGFueXRoaW5nIHdpdGggYGxvY2tlZGAgd2hlbiBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZCwgdGhlIGNoYW5nZSBzaG91bGRuJiMzOTt0IGhhdmUgYW55IGZ1bmN0aW9uYWwgaW1wYWN0LiBCdXQsIGl0IGRvZXMgZWxpbWluYXRlIGEgcG90ZW50aWFsIEtNU0FOIHdhcm5pbmcuCgpOb3cgSSByZWFsbHkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgb3Igbm90IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIG9yIHdoYXQuLi4gSSBiZXQgaXQmIzM5O3Mgbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dfVjEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzg9Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBpbml0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgbGluZSAxMDg1LiBJJiMzOTt2ZSBnb3QgYSBzcGVjaWZpYyBxdWVzdGlvbiBJJiMzOTttIHRyeWluZyB0byBhbnN3ZXIsIGFuZCBJJiMzOTttIGJldHRpbmcgdGhpcyBzZWN0aW9uIGhvbGRzIHRoZSBrZXkuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb25maWcgZmlsZSBjYW4gaGVscCBtZSBlbHVjaWRhdGUgdGhlIGRldGFpbHMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBkZWNpcGhlciB0aGUgZGVwZW5kZW5jaWVzLCBvcHRpb25zLCBhbmQgbG9naWMgdGhhdCBhcmUgcHJvYmFibHkgZGVmaW5lZCB3aXRoaW4gdGhhdCBjaHVuayBvZiBjb2RlLiBIb3BlZnVsbHksIHRoZSBhbnN3ZXIgaXMgd2l0aGluIHJlYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA4MTpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA4MjpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA4MzpcdFx0ZGVmYXVsdCB5XG4xMDg0Olx0XG4xMDg1Olx0Y29uZmlnIE1FTUNHX1YxXG4xMDg2Olx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwODg6XHRcdGRlZmF1bHQgblxuMTA4OTpcdFx0aGVscFxuMTA5MDpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjEwOTE6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbjEwOTI6XHRcdCAgd2hpY2ggaGF2ZW4mIzM5O3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XG4xMDkzOlx0XHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xuMTA5NDpcdFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbjEwOTU6XHRcbjEwOTY6XHRcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxuMTA5NzpcdFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXG4xMDk4Olx0XHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cbjEwOTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9RmFsc2U6IEEgRGVlcCBEaXZlIGludG8gYSBNaW5vciBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBob25lc3RseSwgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYE1FTUNHX1YxYCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCB3aGljaCBtZWFucyB0aGUgcmVhbCBmdW5jdGlvbiBgbWVtY2cxX29vbV9wcmVwYXJlYCBpcyBqdXN0IGEgZHVtbXkgaW5saW5lLiBUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGAqbG9ja2VkID0gZmFsc2U7YCB3aXRoaW4gdGhpcyBkdW1teSBmdW5jdGlvbi4gSG1tLCBpdCYjMzk7cyBqdXN0IG1lYW50IHRvIHNpbGVuY2UgYSBLTVNBTiB3YXJuaW5nIG9yIG1heWJlIGEgY29tcGlsZXIgY29tcGxhaW50IGFib3V0IGFuIHVuaW5pdGlhbGl6ZWQgYGxvY2tlZGAgdmFyaWFibGUuIEl0JiMzOTtzIHJlYWxseSBqdXN0IGEgZGVmZW5zaXZlIGNvZGluZyBtZWFzdXJlLgoKQ3JpdGljYWxseSwgdGhpcyBpbml0aWFsaXphdGlvbiAqZG9lc24mIzM5O3QqIGFjdHVhbGx5IGNoYW5nZSB0aGUgY29udHJvbCBmbG93LiBUaGUgYGxvY2tlZGAgdmFyaWFibGUmIzM5O3MgdmFsdWUgaXMgcGFzc2VkIHRvIGBtZW1jZzFfb29tX2ZpbmlzaGAsIHdoaWNoIGlzICphbHNvKiBhIGR1bW15IGlubGluZSBmdW5jdGlvbiB0aGF0IGRvZXMgYWJzb2x1dGVseSBub3RoaW5nLiBTbywgaW4gdGVybXMgb2YgYWN0dWFsIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCB0aGlzIHBhdGNoIGhhcyBubyBpbXBhY3Qgd2hhdHNvZXZlci4gTm8gbmV3IGNvZGUgcGF0aHMsIG5vIG5ldyBiZWhhdmlvcnMgdG8gZXhwbG9yZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYSBuby1vcCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgbWVtY2cxX29vbV9wcmVwYXJlYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUsIGJ1dCBJIGhpZ2hseSBkb3VidCBpdCYjMzk7bGwgdHVybiB1cCBhbnl0aGluZyBvZiBpbnRlcmVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2cxX29vbV9wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xMzkzPWJvb2wgbWVtX2Nncm91cF9vb21fc3luY2hyb25pemUoYm9vbCBoYW5kbGUpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE0MzItXG5tbS9tZW1jb250cm9sLXYxLmM6MTQzMzpib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDM0LXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9NjA9ZW51bSByZXNfdHlwZSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5oLTY2LVxubW0vbWVtY29udHJvbC12MS5oOjY3OmJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wtdjEuaC02OC12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0xMDg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG5tbS9tZW1jb250cm9sLXYxLmgtMTA5LVxubW0vbWVtY29udHJvbC12MS5oOjExMDpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxubW0vbWVtY29udHJvbC12MS5oLTExMS17XG4tLVxubW0vbWVtY29udHJvbC5jPTE5MTg9c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBtYXNrLCBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTE5MjYtXG5tbS9tZW1jb250cm9sLmM6MTkyNzpcdGlmICghbWVtY2cxX29vbV9wcmVwYXJlKG1lbWNnLCBcdTAwMjZsb2NrZWQpKVxubW0vbWVtY29udHJvbC5jLTE5MjgtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGb2N1c2luZyBvbiBNZW1vcnkgT09NIEhhbmRsaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgbWVtb3J5IE9PTSAoT3V0IG9mIE1lbW9yeSkgc2l0dWF0aW9uIHdpdGhpbiB0aGUgY2dyb3VwIGNvZGUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX29vbWAgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQgZm9yIE9PTSBldmVudHMgdGhhdCBwZXJ0YWluIHRvIG1lbW9yeSBjZ3JvdXBzLiBBbmQgYXMgYSBmdXJ0aGVyIGRhdGFwb2ludCwgYG1lbWNnMV9vb21fZmluaXNoYCAtIHRoYXQmIzM5O3MgKmFsc28qIG9ubHkgdXNlZCB3aXRoaW4gdGhlIGBtZW1fY2dyb3VwX29vbWAgcGF0aC4gV2hpY2ggc2VlbXMgc2Vuc2libGUsIHNpbmNlIGl0JiMzOTtzIG1vc3QgbGlrZWx5IGhhbmRsaW5nIHRhc2tzIGludGVybmFsIHRvIGRlYWxpbmcgd2l0aCB0aGUgT09NIGV2ZW50cy4gU28gdGhlIHF1ZXN0aW9uIGlzIHdoYXQgaGFwcGVucyBpbiB0aGUgZnVuY3Rpb24sIGFuZCB3aGF0IG90aGVyIGZhY3RvcnMgY29tZSBpbnRvIHBsYXk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNnMV9vb21fZmluaXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xNDMzPWJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNDcyLVxubW0vbWVtY29udHJvbC12MS5jOjE0NzM6dm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKVxubW0vbWVtY29udHJvbC12MS5jLTE0NzQte1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD02Nz1ib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCk7XG5tbS9tZW1jb250cm9sLXYxLmg6Njg6dm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wtdjEuaC02OS12b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0xMTA9c3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbi0tXG5tbS9tZW1jb250cm9sLXYxLmgtMTE0LX1cbm1tL21lbWNvbnRyb2wtdjEuaDoxMTU6c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpIHt9XG5tbS9tZW1jb250cm9sLXYxLmgtMTE2LXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xOTE4PXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgbWFzaywgaW50IG9yZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTMxLVxubW0vbWVtY29udHJvbC5jOjE5MzI6XHRtZW1jZzFfb29tX2ZpbmlzaChtZW1jZywgbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wuYy0xOTMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTAyCgkJCQkJCQlvdXRwdXQ6IDk0CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFkZHJlc3NpbmcgdGhlIENvbXBpbGVyJiMzOTtzIEdydW1ibGVzKioKCkFscmlnaHQsIHNvIHRoaXMgaXMganVzdCBhIHF1aWNrIGNsZWFudXAuIEl0JiMzOTtzIGEgY2xhc3NpYyBjYXNlIG9mIHRoZSBjb21waWxlciBiZWluZyBhIGxpdHRsZSB0b28gcGVkYW50aWMsIHNxdWF3a2luZyBhYm91dCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLiBUaGUgZ29vZCBuZXdzIGlzLCBmcm9tIGEgKmZ1bmN0aW9uYWwqIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgbm9uLWlzc3VlLiBUaGUgdmFyaWFibGUgaXMgb25seSBiZWluZyBmZWQgaW50byBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBkb2VzIGFic29sdXRlbHkgbm90aGluZy4gTm8gY29kZSBwYXRoIGFjdHVhbGx5ICp1c2VzKiB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZS4gSXQmIzM5O3MgcHVyZWx5IGFib3V0IHNpbGVuY2luZyB0aGF0IHBlc2t5IHdhcm5pbmcuIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3Mgbm90IHdvcnRoIHRoZSBlZmZvcnQgZm9yIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90IGVmZmVjdCB0aGUgb3V0Y29tZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbHkgaW5pdGlhbGl6ZXMgYSBwb2ludGVyIGFyZ3VtZW50IGluIGEgZHVtbXkgaW5saW5lIGZ1bmN0aW9uIHdoZW4gQ09ORklHX01FTUNHX1YxIGlzIGRpc2FibGVkLiBUaGlzIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZyAoZS5nLiBmcm9tIEtNU0FOKSwgYnV0IGhhcyBubyBmdW5jdGlvbmFsIGVmZmVjdCBvbiB0aGUgZXhlY3V0aW9uIGZsb3cgc2luY2UgdGhlIHZhcmlhYmxlIGlzIG9ubHkgcGFzc2VkIHRvIGFub3RoZXIgZHVtbXkgaW5saW5lIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGEgcG9pbnRlciBhcmd1bWVudCBpbiBhIGR1bW15IGlubGluZSBmdW5jdGlvbiB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZC4gVGhpcyBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcgKGUuZy4gZnJvbSBLTVNBTiksIGJ1dCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IHNpbmNlIHRoZSB2YXJpYWJsZSBpcyBvbmx5IHBhc3NlZCB0byBhbm90aGVyIGR1bW15IGlubGluZSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90aGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MTowMS4yODIzNDQzNjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgwNTY2ODkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGEgcG9pbnRlciBhcmd1bWVudCBpbiBhIGR1bW15IGlubGluZSBmdW5jdGlvbiB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZC4gVGhpcyBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcgKGUuZy4gZnJvbSBLTVNBTiksIGJ1dCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IHNpbmNlIHRoZSB2YXJpYWJsZSBpcyBvbmx5IHBhc3NlZCB0byBhbm90aGVyIGR1bW15IGlubGluZSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90aGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjAxLjI4MjM1MjEwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4MTczODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzMwNWFmODhmMzA5N2RkOTAyN2MxOWU3MzliY2Q2YWNlMWFlNWRiOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAxNzo1MDo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmhcXG5pbmRleCBmOTJmODExMDhkNWVkMi4uNGZhNmUyYmM4NDEzZmYgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5oXFxuKysrIGIvbW0vbWVtY29udHJvbC12MS5oXFxuQEAgLTEwNyw3ICsxMDcsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCkgeyByZXR1cm4gdHJ1ZTsgfVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxcbit7XFxuK1xcdCpsb2NrZWQgPSBmYWxzZTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6MDEuOTAxNDc2OTQyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE4NjUyNzgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGEgcG9pbnRlciBhcmd1bWVudCBpbiBhIGR1bW15IGlubGluZSBmdW5jdGlvbiB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZC4gVGhpcyBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcgKGUuZy4gZnJvbSBLTVNBTiksIGJ1dCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IHNpbmNlIHRoZSB2YXJpYWJsZSBpcyBvbmx5IHBhc3NlZCB0byBhbm90aGVyIGR1bW15IGlubGluZSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90aGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzMwNWFmODhmMzA5N2RkOTAyN2MxOWU3MzliY2Q2YWNlMWFlNWRiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDE3OjUwOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXG5pbmRleCBmOTJmODExMDhkNWVkMi4uNGZhNmUyYmM4NDEzZmYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuaFxuQEAgLTEwNyw3ICsxMDcsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKSB7IHJldHVybiB0cnVlOyB9XG4rc3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbit7XG4rXHQqbG9ja2VkID0gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MTowMS45MDE0Nzk5NTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA0MTIxNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9tZW1jb250cm9sLXYxLmhgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCByaWdodCBhd2F5IEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgY29udHJvbCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoZXkgYXJlIG1vZGlmeWluZywgYG1lbWNnMV9vb21fcHJlcGFyZWAsIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGhlcmXigJRzcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucyB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgICppc24ndCogZGVmaW5lZCAob3IgYSBzaW1pbGFyIGNvbmRpdGlvbiwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZXhhY3QgbG9naWMpLiBJdOKAmXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBhbHRlcm5hdGl2ZSBwYXRoLCBpZiB0aGUgb2xkLCB2MSBtZW1jZyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdXNlZC4gTGV0IG1lIGdvIGFoZWFkIGFuZCBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wtdjEuaGAgdG8gc2VlIGV4YWN0bHkgd2hhdOKAmXMgZ29pbmcgb24sIGFuZCBob3cgdGhpcyBhZmZlY3RzIHRoZSBPT00gaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjA1LjMwNTYwNDIxM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI2MDEzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2cxX29vbV9wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmg9NjA9ZW51bSByZXNfdHlwZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtNjYtXFxubW0vbWVtY29udHJvbC12MS5oOjY3OmJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLXYxLmgtNjgtdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0xMDg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxubW0vbWVtY29udHJvbC12MS5oLTEwOS1cXG5tbS9tZW1jb250cm9sLXYxLmg6MTEwOnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXFxubW0vbWVtY29udHJvbC12MS5oLTExMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjA1LjQzODIxMTI5OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDk4NzI2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtZW1jZzFfb29tX3ByZXBhcmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGEgZHVtbXkgaW1wbGVtZW50YXRpb24gb2YgYG1lbWNnMV9vb21fcHJlcGFyZWAsIHNwZWNpZmljYWxseSB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgICppc24ndCogZW5hYmxlZC4gSW50ZXJlc3RpbmcuIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhlIGxpbmUgYCpsb2NrZWQgPSBmYWxzZTtgIGp1c3QgYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC4gQ2xlYXJseSwgdGhpcyBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWUuIFJldHVybmluZyBgdHJ1ZWAgbGlrZWx5IHNpZ25hbHMgc29tZXRoaW5nLi4uIGEgcHJlcGFyYXRpb24sIHBlcmhhcHM/IEFuZCB0aGUgYGxvY2tlZGAgdmFyaWFibGUgc3VnZ2VzdHMgc29tZSBraW5kIG9mIG11dGV4IG9yIHNlbWFwaG9yZS4gQWRkaW5nIHRoZSBgKmxvY2tlZCA9IGZhbHNlO2AgZXhwbGljaXRseSBjbGVhcnMgYW55IHByZS1leGlzdGluZyBsb2NrIHN0YXRlIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICp3aHkqPyBXaHkgaXMgdGhpcyBuZWNlc3NhcnkgaW4gdGhlIGR1bW15IGltcGxlbWVudGF0aW9uPyBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIG5leHQgc3RlcCBpcyB0byBmaW5kIHdoZXJlIGBtZW1jZzFfb29tX3ByZXBhcmVgIGlzIGNhbGxlZC4gVGhhdCB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nICphcm91bmQqIHRoaXMgZnVuY3Rpb24gY2FsbCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MTowOC41ODgwODgwOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNDgwOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnMV9vb21fcHJlcGFyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC12MS5jPTEzOTM9Ym9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIGhhbmRsZSlcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDMyLVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNDMzOmJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDM0LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD02MD1lbnVtIHJlc190eXBlIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaC02Ni1cXG5tbS9tZW1jb250cm9sLXYxLmg6Njc6Ym9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpO1xcbm1tL21lbWNvbnRyb2wtdjEuaC02OC12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTEwOD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cXG5tbS9tZW1jb250cm9sLXYxLmgtMTA5LVxcbm1tL21lbWNvbnRyb2wtdjEuaDoxMTA6c3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcXG5tbS9tZW1jb250cm9sLXYxLmgtMTExLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTE4PXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgbWFzaywgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5MjYtXFxubW0vbWVtY29udHJvbC5jOjE5Mjc6XFx0aWYgKCFtZW1jZzFfb29tX3ByZXBhcmUobWVtY2csIFxcdTAwMjZsb2NrZWQpKVxcbm1tL21lbWNvbnRyb2wuYy0xOTI4LVxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6MDguNzMxNTc3NzQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTc5NTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGVsdmluZyBpbnRvIHRoZSBNZW1vcnkgQ29udHJvbCBPT00gSGFuZGxlcioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgb3V0LW9mLW1lbW9yeSAoT09NKSBoYW5kbGluZyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwcyByZXNpZGVzLiBUaGUgY2x1ZSBpcyBpbiB0aGUgbmFtZSwgcmVhbGx5LiBJdCdzIGluZGljYXRpbmcgdGhhdCBgbWVtX2Nncm91cF9vb21gIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IG1lbW9yeSBjb250cm9sIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBpbiB0aGUgYG1tYCBkaXJlY3RvcnksIHdpdGggY2dyb3VwLXJlbGF0ZWQgc3R1ZmYgZnJlcXVlbnRseSBpbiBhIGBtZW1jb250cm9sLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBmb3Igb3JnYW5pemF0aW9uYWwgcHVycG9zZXMuIFNvLCBteSBodW5jaCBpcyB0aGF0IGBtZW1fY2dyb3VwX29vbWAgd2lsbCBiZSBmb3VuZCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgY29uZmlybSB0aGF0IGV4cGVjdGF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGluc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE2OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjExLjYyMzM3NTY3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAwNDY0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9vb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0xODg1PXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5MTctICovXFxubW0vbWVtY29udHJvbC5jOjE5MTg6c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBtYXNrLCBpbnQgb3JkZXIpXFxubW0vbWVtY29udHJvbC5jLTE5MTkte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1OTU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY5Ni1cXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6MjY5NzpcXHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yNjk4LVxcdFxcdFxcdCAgIGdldF9vcmRlcihucl9wYWdlcyAqIFBBR0VfU0laRSkpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjExLjcyMzQyNzAwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjQ1ODk1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IGBtbS9tZW1jb250cm9sLmNgOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX29vbWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBgbWVtX2Nncm91cF9vb21gIGZ1bmN0aW9uLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCB0aGUgdXN1YWwgY29tcGxleGl0eSB0aGF0IGNvbWVzIHdpdGggT09NIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBjZ3JvdXBzLiBMZXQncyBzZWUgaG93IHRoZXkndmUgc3RydWN0dXJlZCB0aGlzLi4uIEknbSBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYzogdGhlIGRlY2lzaW9uIHByb2Nlc3MsIHRoZSBzZWxlY3Rpb24gb2YgdmljdGltcyAoaWYgYW55KSwgYW5kIHRoZSBldmVudHVhbCBhY3Rpb25zIHRha2VuLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byBtaW5pbWl6ZSBkaXNydXB0aW9uIGFuZCBhdm9pZCBjYXNjYWRpbmcgZmFpbHVyZXMgd2hpbGUgZnJlZWluZyB1cCBlbm91Z2ggbWVtb3J5IHRvIGtlZXAgdGhlIHN5c3RlbSByZXNwb25zaXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBkZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgY2dyb3VwIGlzIHRydWx5IE9PTSwgd2hhdCB0cmlnZ2VycyB0aGUgT09NIGhhbmRsaW5nLCBhbmQgaG93IHRoZXkgcHJpb3JpdGl6ZSB3aGljaCBjZ3JvdXBzIHRvIHRhcmdldCBpZiB3ZSdyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSBtZW1vcnkgbmVlZHMgdG8gYmUgcmVjbGFpbWVkIGFjcm9zcyBtdWx0aXBsZSBjZ3JvdXBzLiBJJ20gYWxzbyBjdXJpb3VzIGlmIHRoZXkgaGF2ZSBhbnkgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIHNpdHVhdGlvbnMgd2hlcmUgYSBzaW5nbGUgdGFzayBvciBjZ3JvdXAgaXMgY29uc3VtaW5nIGZhciBtb3JlIHJlc291cmNlcyB0aGFuIGl0IHNob3VsZCBiZSwgYW5kIGhvdyBpdCBpcyBkaWZmZXJlbnRpYXRlZCBmcm9tIGEgZ2xvYmFsIHNob3J0YWdlLiBBbnkgY2xldmVyIGhldXJpc3RpY3Mgb3Igb3B0aW1pemF0aW9ucyB0aGV5J3ZlIGltcGxlbWVudGVkIHdpbGwgYmUgaW50ZXJlc3RpbmcuIE5vdywgbGV0J3Mgc2VlIGhvdyB0aGV5IGltcGxlbWVudCB0aGUgcmVjbGFpbSBhbmQga2lsbCBwcm9jZXNzIGluIGVhY2ggb2YgdGhlc2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjE1LjM4ODAyMDExOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MTgsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MTg6XFx0c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBtYXNrLCBpbnQgb3JkZXIpXFxuMTkxOTpcXHR7XFxuMTkyMDpcXHRcXHRib29sIGxvY2tlZCwgcmV0O1xcbjE5MjE6XFx0XFxuMTkyMjpcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcXG4xOTIzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xOTI0OlxcdFxcbjE5MjU6XFx0XFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19PT00pO1xcbjE5MjY6XFx0XFxuMTkyNzpcXHRcXHRpZiAoIW1lbWNnMV9vb21fcHJlcGFyZShtZW1jZywgXFx1MDAyNmxvY2tlZCkpXFxuMTkyODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTkyOTpcXHRcXG4xOTMwOlxcdFxcdHJldCA9IG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShtZW1jZywgbWFzaywgb3JkZXIpO1xcbjE5MzE6XFx0XFxuMTkzMjpcXHRcXHRtZW1jZzFfb29tX2ZpbmlzaChtZW1jZywgbG9ja2VkKTtcXG4xOTMzOlxcdFxcbjE5MzQ6XFx0XFx0cmV0dXJuIHJldDtcXG4xOTM1OlxcdH1cXG4xOTM2OlxcdFxcbjE5Mzc6XFx0LyoqXFxuMTkzODpcXHQgKiBtZW1fY2dyb3VwX2dldF9vb21fZ3JvdXAgLSBnZXQgYSBtZW1vcnkgY2dyb3VwIHRvIGNsZWFuIHVwIGFmdGVyIE9PTVxcbjE5Mzk6XFx0ICogQHZpY3RpbTogdGFzayB0byBiZSBraWxsZWQgYnkgdGhlIE9PTSBraWxsZXJcXG4xOTQwOlxcdCAqIEBvb21fZG9tYWluOiBtZW1jZyBpbiBjYXNlIG9mIG1lbWNnIE9PTSwgTlVMTCBpbiBjYXNlIG9mIHN5c3RlbS13aWRlIE9PTVxcbjE5NDE6XFx0ICpcXG4xOTQyOlxcdCAqIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbWVtb3J5IGNncm91cCwgd2hpY2ggaGFzIHRvIGJlIGNsZWFuZWQgdXBcXG4xOTQzOlxcdCAqIGJ5IGtpbGxpbmcgYWxsIGJlbG9uZ2luZyBPT00ta2lsbGFibGUgdGFza3MuXFxuMTk0NDpcXHQgKlxcbjE5NDU6XFx0ICogQ2FsbGVyIGhhcyB0byBjYWxsIG1lbV9jZ3JvdXBfcHV0KCkgb24gdGhlIHJldHVybmVkIG5vbi1OVUxMIG1lbWNnLlxcbjE5NDY6XFx0ICovXFxuMTk0NzpcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MToxNS4zODg0Mzk3NThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NjE1MzA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBNZW1vcnkgQ2dyb3VwIE9PTSBJc3N1ZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEl0IGxvb2tzIGxpa2UgYGxvY2tlZGAgd2l0aGluIHRoZSBgbWVtX2Nncm91cF9vb21gIGZ1bmN0aW9uIGlzIHVuaW5pdGlhbGl6ZWQuIFRoYXQncyBhIGNsYXNzaWMgc291cmNlIG9mIHBvdGVudGlhbCBidWdzLiBOb3csIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5IOKAkyBhbmQgSSB0aGluayBJJ20gcmlnaHQgYWJvdXQgdGhpcyDigJMgd2hlbiBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZCwgYG1lbWNnMV9vb21fcHJlcGFyZWAganVzdCBiYWlscyBvdXQgZWFybHksIHJldHVybmluZyBgdHJ1ZWAgd2l0aG91dCB0b3VjaGluZyB0aGUgYCpsb2NrZWRgIHZhcmlhYmxlLiBBbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGJlY2F1c2Ugc3Vic2VxdWVudGx5LCBgbWVtY2cxX29vbV9maW5pc2hgIGdldHMgY2FsbGVkLCBidXQgaXQncyBwYXNzZWQgdGhpcyBwb3RlbnRpYWxseSBnYXJiYWdlIHZhbHVlIGZvciBgbG9ja2VkYC4gSSBuZWVkIHRvIGNvbmZpcm0gbXkgaHVuY2guIFRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYG1lbWNnMV9vb21fZmluaXNoYC4gTGV0J3Mgb3BlbiB1cCBgbW0vbWVtY29udHJvbC12MS5oYCBhbmQgc2VlIHdoYXQgaXQncyBkb2luZyB3aXRoIHRoYXQgdW5pbml0aWFsaXplZCBwb2ludGVyLiBJJ20gYmV0dGluZyB0aGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ4MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6MTguNTY0NTk2NDM1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU5ODUzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2cxX29vbV9maW5pc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC12MS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuaD02Nz1ib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCk7XFxubW0vbWVtY29udHJvbC12MS5oOjY4OnZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZCk7XFxubW0vbWVtY29udHJvbC12MS5oLTY5LXZvaWQgbWVtY2cxX29vbV9yZWNvdmVyKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9MTEwPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtMTE0LX1cXG5tbS9tZW1jb250cm9sLXYxLmg6MTE1OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKSB7fVxcbm1tL21lbWNvbnRyb2wtdjEuaC0xMTYtc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjE4LjcxMDU4ODE5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzc0MDIzMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbGx5IEhhcm1sZXNzLCBZZXQgQ29uY2VybmluZywgQ29kZSBTbmlwcGV0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWVtY2cxX29vbV9maW5pc2hgIGZ1bmN0aW9uLCBhbmQgaXQncyBzdHJpa2luZyBtZSBhcyBvZGQuIFRoZSBjb2RlIHNob3dzIGl0J3MgYW4gZW1wdHkgaW5saW5lIGZ1bmN0aW9uIHdoZW4gYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQuIFRoYXQgbWVhbnMgdGhlIGBsb2NrZWRgIHZhcmlhYmxlLCBwYXNzZWQgaW50byBpdCB1bmluaXRpYWxpemVkLCB3b3VsZG4ndCBhY3R1YWxseSAqZG8qIGFueXRoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIGxpa2VseSBoYXJtbGVzcywgbWF5YmUganVzdCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSwgb3IgcGVyaGFwcyBldmVuIGEgS01TQU4gd2FybmluZy4gSSBoYWQgYSBxdWljayBiYWNrLWFuZC1mb3J0aCBpbiBteSBoZWFkLCB0aGlua2luZzogZG9lcyBLTVNBTiBldmVuICpjYXJlKiBhYm91dCBhbiBlbXB0eSBpbmxpbmUgZnVuY3Rpb24/XG5cblRoZW4gSSByZW1lbWJlcmVkIHRoYXQgS01TQU4gaW5zdHJ1bWVudHMgYXQgdGhlIEludGVybWVkaWF0ZSBSZXByZXNlbnRhdGlvbiAoSVIpIGxldmVsLiBUaGF0IG1lYW5zIGl0IGxpa2VseSBzZWVzIHRoZSBsb2FkIG9mIHRoZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGJlZm9yZSB0aGUgaW5saW5pbmcgb3B0aW1pemF0aW9uIHBvdGVudGlhbGx5IGdldHMgcmlkIG9mIHRoZSBjYWxsLiBUaGF0J3MgaXQhIFRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqIGZpeCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzZSwgZXZlbiBpZiB0aGUgXCJmdW5jdGlvblwiIGlzIGVmZmVjdGl2ZWx5IGEgbm8tb3AgaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuXG5IbW0sIEkgdGhlbiBwYXVzZWQsIHdvbmRlcmluZyBpZiB0aGlzIHdhcyB3b3J0aCBmdXp6aW5nPyBUaGUgcGF0Y2ggaXRzZWxmIGlzIGluY3JlZGlibHkgc2ltcGxlOiBpdCdzIGp1c3QgYWRkaW5nIGAqbG9ja2VkID0gZmFsc2U7YCB0byB0aGlzIGR1bW15IGlubGluZSBmdW5jdGlvbi4gQmVjYXVzZSBgbWVtY2cxX29vbV9maW5pc2hgIGRvZXNuJ3QgKmRvKiBhbnl0aGluZyB3aXRoIGBsb2NrZWRgIHdoZW4gYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQsIHRoZSBjaGFuZ2Ugc2hvdWxkbid0IGhhdmUgYW55IGZ1bmN0aW9uYWwgaW1wYWN0LiBCdXQsIGl0IGRvZXMgZWxpbWluYXRlIGEgcG90ZW50aWFsIEtNU0FOIHdhcm5pbmcuXG5cbk5vdyBJIHJlYWxseSBzaG91bGQgY2hlY2sgd2hldGhlciBvciBub3QgYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgb3Igd2hhdC4uLiBJIGJldCBpdCdzIG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MToyNC40ODQ2MTQ0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUyMTM5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHX1YxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3OD1jb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjI0LjYxOTgzNTYxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQwMzg0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaW5pdC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgbGluZSAxMDg1LiBJJ3ZlIGdvdCBhIHNwZWNpZmljIHF1ZXN0aW9uIEknbSB0cnlpbmcgdG8gYW5zd2VyLCBhbmQgSSdtIGJldHRpbmcgdGhpcyBzZWN0aW9uIGhvbGRzIHRoZSBrZXkuIExldCdzIHNlZSBpZiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvbmZpZyBmaWxlIGNhbiBoZWxwIG1lIGVsdWNpZGF0ZSB0aGUgZGV0YWlscy4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgZGVjaXBoZXIgdGhlIGRlcGVuZGVuY2llcywgb3B0aW9ucywgYW5kIGxvZ2ljIHRoYXQgYXJlIHByb2JhYmx5IGRlZmluZWQgd2l0aGluIHRoYXQgY2h1bmsgb2YgY29kZS4gSG9wZWZ1bGx5LCB0aGUgYW5zd2VyIGlzIHdpdGhpbiByZWFjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjI3Ljc2MDIyMzYxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwODE6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwODI6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA4MzpcXHRcXHRkZWZhdWx0IHlcXG4xMDg0OlxcdFxcbjEwODU6XFx0Y29uZmlnIE1FTUNHX1YxXFxuMTA4NjpcXHRcXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwODg6XFx0XFx0ZGVmYXVsdCBuXFxuMTA4OTpcXHRcXHRoZWxwXFxuMTA5MDpcXHRcXHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxcbjEwOTE6XFx0XFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xcbjEwOTI6XFx0XFx0ICB3aGljaCBoYXZlbid0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxcbjEwOTM6XFx0XFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcXG4xMDk0OlxcdFxcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuMTA5NTpcXHRcXG4xMDk2OlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxcbjEwOTc6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuMTA5ODpcXHRcXHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cXG4xMDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNzo1MToyNy43NjA0MDQ2MTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4OTU2OTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9RmFsc2U6IEEgRGVlcCBEaXZlIGludG8gYSBNaW5vciBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgaG9uZXN0bHksIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYE1FTUNHX1YxYCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCB3aGljaCBtZWFucyB0aGUgcmVhbCBmdW5jdGlvbiBgbWVtY2cxX29vbV9wcmVwYXJlYCBpcyBqdXN0IGEgZHVtbXkgaW5saW5lLiBUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGAqbG9ja2VkID0gZmFsc2U7YCB3aXRoaW4gdGhpcyBkdW1teSBmdW5jdGlvbi4gSG1tLCBpdCdzIGp1c3QgbWVhbnQgdG8gc2lsZW5jZSBhIEtNU0FOIHdhcm5pbmcgb3IgbWF5YmUgYSBjb21waWxlciBjb21wbGFpbnQgYWJvdXQgYW4gdW5pbml0aWFsaXplZCBgbG9ja2VkYCB2YXJpYWJsZS4gSXQncyByZWFsbHkganVzdCBhIGRlZmVuc2l2ZSBjb2RpbmcgbWVhc3VyZS5cblxuQ3JpdGljYWxseSwgdGhpcyBpbml0aWFsaXphdGlvbiAqZG9lc24ndCogYWN0dWFsbHkgY2hhbmdlIHRoZSBjb250cm9sIGZsb3cuIFRoZSBgbG9ja2VkYCB2YXJpYWJsZSdzIHZhbHVlIGlzIHBhc3NlZCB0byBgbWVtY2cxX29vbV9maW5pc2hgLCB3aGljaCBpcyAqYWxzbyogYSBkdW1teSBpbmxpbmUgZnVuY3Rpb24gdGhhdCBkb2VzIGFic29sdXRlbHkgbm90aGluZy4gU28sIGluIHRlcm1zIG9mIGFjdHVhbCBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgdGhpcyBwYXRjaCBoYXMgbm8gaW1wYWN0IHdoYXRzb2V2ZXIuIE5vIG5ldyBjb2RlIHBhdGhzLCBubyBuZXcgYmVoYXZpb3JzIHRvIGV4cGxvcmUuIEl0J3MgZXNzZW50aWFsbHkgYSBuby1vcCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgYG1lbWNnMV9vb21fcHJlcGFyZWAgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLCBidXQgSSBoaWdobHkgZG91YnQgaXQnbGwgdHVybiB1cCBhbnl0aGluZyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjMyLjE0OTk3NzUwOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3MTY0MTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZzFfb29tX3ByZXBhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xMzkzPWJvb2wgbWVtX2Nncm91cF9vb21fc3luY2hyb25pemUoYm9vbCBoYW5kbGUpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTQzMi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTQzMzpib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcXG5tbS9tZW1jb250cm9sLXYxLmMtMTQzNC17XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9NjA9ZW51bSByZXNfdHlwZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtNjYtXFxubW0vbWVtY29udHJvbC12MS5oOjY3OmJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLXYxLmgtNjgtdm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0xMDg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxubW0vbWVtY29udHJvbC12MS5oLTEwOS1cXG5tbS9tZW1jb250cm9sLXYxLmg6MTEwOnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXFxubW0vbWVtY29udHJvbC12MS5oLTExMS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTkxOD1zdGF0aWMgYm9vbCBtZW1fY2dyb3VwX29vbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IG1hc2ssIGludCBvcmRlcilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xOTI2LVxcbm1tL21lbWNvbnRyb2wuYzoxOTI3OlxcdGlmICghbWVtY2cxX29vbV9wcmVwYXJlKG1lbWNnLCBcXHUwMDI2bG9ja2VkKSlcXG5tbS9tZW1jb250cm9sLmMtMTkyOC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE3OjUxOjM0LjgyMTYyODIwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMwMzkzNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1c2luZyBvbiBNZW1vcnkgT09NIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSBob25pbmcgaW4gb24gdGhlIG1lbW9yeSBPT00gKE91dCBvZiBNZW1vcnkpIHNpdHVhdGlvbiB3aXRoaW4gdGhlIGNncm91cCBjb2RlLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX29vbWAgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQgZm9yIE9PTSBldmVudHMgdGhhdCBwZXJ0YWluIHRvIG1lbW9yeSBjZ3JvdXBzLiBBbmQgYXMgYSBmdXJ0aGVyIGRhdGFwb2ludCwgYG1lbWNnMV9vb21fZmluaXNoYCAtIHRoYXQncyAqYWxzbyogb25seSB1c2VkIHdpdGhpbiB0aGUgYG1lbV9jZ3JvdXBfb29tYCBwYXRoLiBXaGljaCBzZWVtcyBzZW5zaWJsZSwgc2luY2UgaXQncyBtb3N0IGxpa2VseSBoYW5kbGluZyB0YXNrcyBpbnRlcm5hbCB0byBkZWFsaW5nIHdpdGggdGhlIE9PTSBldmVudHMuIFNvIHRoZSBxdWVzdGlvbiBpcyB3aGF0IGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uLCBhbmQgd2hhdCBvdGhlciBmYWN0b3JzIGNvbWUgaW50byBwbGF5P1xuXG5cbiIsIklucHV0VG9rZW5zIjo3MjEzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6MzguMTUyMDI1NTQyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg2MTc2NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnMV9vb21fZmluaXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmM9MTQzMz1ib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDcyLVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNDczOnZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZClcXG5tbS9tZW1jb250cm9sLXYxLmMtMTQ3NC17XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9Njc9Ym9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpO1xcbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpO1xcbm1tL21lbWNvbnRyb2wtdjEuaC02OS12b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTExMD1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX29vbV9wcmVwYXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTExNC19XFxubW0vbWVtY29udHJvbC12MS5oOjExNTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZCkge31cXG5tbS9tZW1jb250cm9sLXYxLmgtMTE2LXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE5MTg9c3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBtYXNrLCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTkzMS1cXG5tbS9tZW1jb250cm9sLmM6MTkzMjpcXHRtZW1jZzFfb29tX2ZpbmlzaChtZW1jZywgbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtMTkzMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6NDAuNjM4MjEwMzY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk3NTQzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBZGRyZXNzaW5nIHRoZSBDb21waWxlcidzIEdydW1ibGVzKipcblxuQWxyaWdodCwgc28gdGhpcyBpcyBqdXN0IGEgcXVpY2sgY2xlYW51cC4gSXQncyBhIGNsYXNzaWMgY2FzZSBvZiB0aGUgY29tcGlsZXIgYmVpbmcgYSBsaXR0bGUgdG9vIHBlZGFudGljLCBzcXVhd2tpbmcgYWJvdXQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZS4gVGhlIGdvb2QgbmV3cyBpcywgZnJvbSBhICpmdW5jdGlvbmFsKiBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhIG5vbi1pc3N1ZS4gVGhlIHZhcmlhYmxlIGlzIG9ubHkgYmVpbmcgZmVkIGludG8gYW4gaW5saW5lIGZ1bmN0aW9uIHRoYXQgZG9lcyBhYnNvbHV0ZWx5IG5vdGhpbmcuIE5vIGNvZGUgcGF0aCBhY3R1YWxseSAqdXNlcyogdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUuIEl0J3MgcHVyZWx5IGFib3V0IHNpbGVuY2luZyB0aGF0IHBlc2t5IHdhcm5pbmcuIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQncyBub3Qgd29ydGggdGhlIGVmZm9ydCBmb3Igc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgZWZmZWN0IHRoZSBvdXRjb21lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTAyLCJPdXRwdXRUb2tlbnMiOjk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTc6NTE6NDQuMDg3OTY4MjM3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIGEgcG9pbnRlciBhcmd1bWVudCBpbiBhIGR1bW15IGlubGluZSBmdW5jdGlvbiB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZC4gVGhpcyBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcgKGUuZy4gZnJvbSBLTVNBTiksIGJ1dCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IHNpbmNlIHRoZSB2YXJpYWJsZSBpcyBvbmx5IHBhc3NlZCB0byBhbm90aGVyIGR1bW15IGlubGluZSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90aGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyBhIHBvaW50ZXIgYXJndW1lbnQgaW4gYSBkdW1teSBpbmxpbmUgZnVuY3Rpb24gd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQuIFRoaXMgZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIChlLmcuIGZyb20gS01TQU4pLCBidXQgaGFzIG5vIGZ1bmN0aW9uYWwgZWZmZWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdyBzaW5jZSB0aGUgdmFyaWFibGUgaXMgb25seSBwYXNzZWQgdG8gYW5vdGhlciBkdW1teSBpbmxpbmUgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6f8hr[1] Phase: Running StartedAt: 2026-06-26 17:51:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f8hr[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-26 17:51:55 +0000 UTC FinishedAt: 2026-06-26 17:52:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}