LyoKCiAgICBidHR2LWNhcmRzLmMKCiAgICB0aGlzIGZpbGUgaGFzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25zIC0gY2FyZC1zcGVjaWZpYyBzdHVmZgogICAgbGlrZSB0aGUgYmlnIHR2Y2FyZHMgYXJyYXkgZm9yIHRoZSBtb3N0IHBhcnQKCiAgICBDb3B5cmlnaHQgKEMpIDE5OTYsOTcsOTggUmFscGggIE1ldHpsZXIgKHJqa21AdGhwLnVuaS1rb2Vsbi5kZSkKCQkJICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQogICAgKGMpIDE5OTktMjAwMSBHZXJkIEtub3JyIDxrcmF4ZWxAZ29sZGJhY2guaW4tYmVybGluLmRlPgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgoKKi8KCiNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxsaW51eC9wY2kuaD4KI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CgojaW5jbHVkZSA8YXNtL2lvLmg+CgojaW5jbHVkZSAiYnR0dnAuaCIKCi8qIGZ3ZCBkZWNsICovCnN0YXRpYyB2b2lkIGJvb3RfbXNwMzR4eChzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgcGluKTsKc3RhdGljIHZvaWQgYm9vdF9idDgzMihzdHJ1Y3QgYnR0diAqYnR2KTsKc3RhdGljIHZvaWQgaGF1cHBhdWdlX2VlcHJvbShzdHJ1Y3QgYnR0diAqYnR2KTsKc3RhdGljIHZvaWQgYXZlcm1lZGlhX2VlcHJvbShzdHJ1Y3QgYnR0diAqYnR2KTsKc3RhdGljIHZvaWQgb3NwcmV5X2VlcHJvbShzdHJ1Y3QgYnR0diAqYnR2KTsKc3RhdGljIHZvaWQgbW9kdGVjX2VlcHJvbShzdHJ1Y3QgYnR0diAqYnR2KTsKc3RhdGljIHZvaWQgaW5pdF9QWEMyMDAoc3RydWN0IGJ0dHYgKmJ0dik7CnN0YXRpYyB2b2lkIGluaXRfUlRWMjQoc3RydWN0IGJ0dHYgKmJ0dik7CgpzdGF0aWMgdm9pZCB3aW52aWV3X2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCk7CnN0YXRpYyB2b2lkIGx0OTQxNV9hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsIGludCBzZXQpOwpzdGF0aWMgdm9pZCBhdmVybWVkaWFfdHZwaG9uZV9hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsCgkJCQkgICAgaW50IHNldCk7CnN0YXRpYyB2b2lkIGF2ZXJtZWRpYV90dl9zdGVyZW9fYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LAoJCQkJICAgICAgaW50IHNldCk7CnN0YXRpYyB2b2lkIHRlcnJhdHZfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KTsKc3RhdGljIHZvaWQgZ3ZiY3R2M3BjaV9hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsIGludCBzZXQpOwpzdGF0aWMgdm9pZCBndmJjdHY1cGNpX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCk7CnN0YXRpYyB2b2lkIHdpbmZhc3QyMDAwX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCk7CnN0YXRpYyB2b2lkIHB2YnQ4NzhwOWJfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KTsKc3RhdGljIHZvaWQgZnYyMDAwc19hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsIGludCBzZXQpOwpzdGF0aWMgdm9pZCB3aW5kdnJfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KTsKc3RhdGljIHZvaWQgYWR0dms1MDNfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KTsKc3RhdGljIHZvaWQgcnY2MDVfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CnN0YXRpYyB2b2lkIGVhZ2xlX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwpzdGF0aWMgdm9pZCB4Z3VhcmRfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CnN0YXRpYyB2b2lkIGl2YzEyMF9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKc3RhdGljIHZvaWQgZ3ZjMTEwMF9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKCnN0YXRpYyB2b2lkIFBYQzIwMF9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKCnN0YXRpYyB2b2lkIHBpY29sb190ZXRyYV9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKc3RhdGljIHZvaWQgcGljb2xvX3RldHJhX2luaXQoc3RydWN0IGJ0dHYgKmJ0dik7CgpzdGF0aWMgdm9pZCB0aWJldENTMTZfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CnN0YXRpYyB2b2lkIHRpYmV0Q1MxNl9pbml0KHN0cnVjdCBidHR2ICpidHYpOwoKc3RhdGljIHZvaWQga29kaWNvbTQ0MDByX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwpzdGF0aWMgdm9pZCBrb2RpY29tNDQwMHJfaW5pdChzdHJ1Y3QgYnR0diAqYnR2KTsKCnN0YXRpYyB2b2lkIHNpZ21hU0xDX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwpzdGF0aWMgdm9pZCBzaWdtYVNRX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwoKc3RhdGljIGludCB0ZXJyYXRlY19hY3RpdmVfcmFkaW9fdXBncmFkZShzdHJ1Y3QgYnR0diAqYnR2KTsKc3RhdGljIGludCB0ZWE1NzU3X3JlYWQoc3RydWN0IGJ0dHYgKmJ0dik7CnN0YXRpYyBpbnQgdGVhNTc1N193cml0ZShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgdmFsdWUpOwpzdGF0aWMgdm9pZCBpZGVudGlmeV9ieV9lZXByb20oc3RydWN0IGJ0dHYgKmJ0diwKCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgZWVwcm9tX2RhdGFbMjU2XSk7CnN0YXRpYyBpbnQgX19kZXZpbml0IHB2cl9ib290KHN0cnVjdCBidHR2ICpidHYpOwoKLyogY29uZmlnIHZhcmlhYmxlcyAqLwpzdGF0aWMgdW5zaWduZWQgaW50IHRyaXRvbjE9MDsKc3RhdGljIHVuc2lnbmVkIGludCB2c2Z4PTA7CnN0YXRpYyB1bnNpZ25lZCBpbnQgbGF0ZW5jeSA9IFVOU0VUOwppbnQgbm9fb3ZlcmxheT0tMTsKCnN0YXRpYyB1bnNpZ25lZCBpbnQgY2FyZFtCVFRWX01BWF0gICA9IHsgWyAwIC4uLiAoQlRUVl9NQVgtMSkgXSA9IFVOU0VUIH07CnN0YXRpYyB1bnNpZ25lZCBpbnQgcGxsW0JUVFZfTUFYXSAgICA9IHsgWyAwIC4uLiAoQlRUVl9NQVgtMSkgXSA9IFVOU0VUIH07CnN0YXRpYyB1bnNpZ25lZCBpbnQgdHVuZXJbQlRUVl9NQVhdICA9IHsgWyAwIC4uLiAoQlRUVl9NQVgtMSkgXSA9IFVOU0VUIH07CnN0YXRpYyB1bnNpZ25lZCBpbnQgc3Zoc1tCVFRWX01BWF0gICA9IHsgWyAwIC4uLiAoQlRUVl9NQVgtMSkgXSA9IFVOU0VUIH07CnN0YXRpYyB1bnNpZ25lZCBpbnQgcmVtb3RlW0JUVFZfTUFYXSA9IHsgWyAwIC4uLiAoQlRUVl9NQVgtMSkgXSA9IFVOU0VUIH07CnN0YXRpYyBzdHJ1Y3QgYnR0diAgKm1hc3RlcltCVFRWX01BWF0gPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBOVUxMIH07CiNpZmRlZiBNT0RVTEUKc3RhdGljIHVuc2lnbmVkIGludCBhdXRvbG9hZCA9IDE7CiNlbHNlCnN0YXRpYyB1bnNpZ25lZCBpbnQgYXV0b2xvYWQgPSAwOwojZW5kaWYKc3RhdGljIHVuc2lnbmVkIGludCBncGlvbWFzayA9IFVOU0VUOwpzdGF0aWMgdW5zaWduZWQgaW50IGF1ZGlvYWxsID0gVU5TRVQ7CnN0YXRpYyB1bnNpZ25lZCBpbnQgYXVkaW9tdXhbNV0gPSB7IFsgMCAuLi4gNCBdID0gVU5TRVQgfTsKCi8qIGluc21vZCBvcHRpb25zICovCm1vZHVsZV9wYXJhbSh0cml0b24xLCAgICBpbnQsIDA0NDQpOwptb2R1bGVfcGFyYW0odnNmeCwgICAgICAgaW50LCAwNDQ0KTsKbW9kdWxlX3BhcmFtKG5vX292ZXJsYXksIGludCwgMDQ0NCk7Cm1vZHVsZV9wYXJhbShsYXRlbmN5LCAgICBpbnQsIDA0NDQpOwptb2R1bGVfcGFyYW0oZ3Bpb21hc2ssICAgaW50LCAwNDQ0KTsKbW9kdWxlX3BhcmFtKGF1ZGlvYWxsLCAgIGludCwgMDQ0NCk7Cm1vZHVsZV9wYXJhbShhdXRvbG9hZCwgICBpbnQsIDA0NDQpOwoKbW9kdWxlX3BhcmFtX2FycmF5KGNhcmQsICAgICBpbnQsIE5VTEwsIDA0NDQpOwptb2R1bGVfcGFyYW1fYXJyYXkocGxsLCAgICAgIGludCwgTlVMTCwgMDQ0NCk7Cm1vZHVsZV9wYXJhbV9hcnJheSh0dW5lciwgICAgaW50LCBOVUxMLCAwNDQ0KTsKbW9kdWxlX3BhcmFtX2FycmF5KHN2aHMsICAgICBpbnQsIE5VTEwsIDA0NDQpOwptb2R1bGVfcGFyYW1fYXJyYXkocmVtb3RlLCAgIGludCwgTlVMTCwgMDQ0NCk7Cm1vZHVsZV9wYXJhbV9hcnJheShhdWRpb211eCwgaW50LCBOVUxMLCAwNDQ0KTsKCk1PRFVMRV9QQVJNX0RFU0ModHJpdG9uMSwic2V0IEVUQkYgcGNpIGNvbmZpZyBiaXQgIgoJCSAiW2VuYWJsZSBidWcgY29tcGF0aWJpbGl0eSBmb3IgdHJpdG9uMSArIG90aGVyc10iKTsKTU9EVUxFX1BBUk1fREVTQyh2c2Z4LCJzZXQgVlNGWCBwY2kgY29uZmlnIGJpdCAiCgkJICJbeWV0IGFub3RoZXIgY2hpcHNldCBmbGF3IHdvcmthcm91bmRdIik7Ck1PRFVMRV9QQVJNX0RFU0MobGF0ZW5jeSwicGNpIGxhdGVuY3kgdGltZXIiKTsKTU9EVUxFX1BBUk1fREVTQyhjYXJkLCJzcGVjaWZ5IFRWL2dyYWJiZXIgY2FyZCBtb2RlbCwgc2VlIENBUkRMSVNUIGZpbGUgZm9yIGEgbGlzdCIpOwpNT0RVTEVfUEFSTV9ERVNDKHBsbCwic3BlY2lmeSBpbnN0YWxsZWQgY3J5c3RhbCAoMD1ub25lLCAyOD0yOCBNSHosIDM1PTM1IE1IeikiKTsKTU9EVUxFX1BBUk1fREVTQyh0dW5lciwic3BlY2lmeSBpbnN0YWxsZWQgdHVuZXIgdHlwZSIpOwpNT0RVTEVfUEFSTV9ERVNDKGF1dG9sb2FkLCJhdXRvbWF0aWNhbGx5IGxvYWQgaTJjIG1vZHVsZXMgbGlrZSB0dW5lci5vLCBkZWZhdWx0IGlzIDEgKHllcykiKTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIGxpc3Qgb2YgY2FyZCBJRHMgZm9yIGJ0ODc4KyBjYXJkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgpzdGF0aWMgc3RydWN0IENBUkQgewoJdW5zaWduZWQgaWQ7CglpbnQgY2FyZG5yOwoJY2hhciAqbmFtZTsKfSBjYXJkc1tdIF9fZGV2aW5pdGRhdGEgPSB7Cgl7IDB4MTNlYjAwNzAsIEJUVFZfQk9BUkRfSEFVUFBBVUdFODc4LCAgIkhhdXBwYXVnZSBXaW5UViIgfSwKCXsgMHgzOTAwMDA3MCwgQlRUVl9CT0FSRF9IQVVQUEFVR0U4NzgsICAiSGF1cHBhdWdlIFdpblRWLUQiIH0sCgl7IDB4NDUwMDAwNzAsIEJUVFZfQk9BUkRfSEFVUFBBVUdFUFZSLCAgIkhhdXBwYXVnZSBXaW5UVi9QVlIiIH0sCgl7IDB4ZmYwMDAwNzAsIEJUVFZfQk9BUkRfT1NQUkVZMXgwLCAgICAgIk9zcHJleS0xMDAiIH0sCgl7IDB4ZmYwMTAwNzAsIEJUVFZfQk9BUkRfT1NQUkVZMngwX1NWSUQsIk9zcHJleS0yMDAiIH0sCgl7IDB4ZmYwMjAwNzAsIEJUVFZfQk9BUkRfT1NQUkVZNTAwLCAgICAgIk9zcHJleS01MDAiIH0sCgl7IDB4ZmYwMzAwNzAsIEJUVFZfQk9BUkRfT1NQUkVZMjAwMCwgICAgIk9zcHJleS0yMDAwIiB9LAoJeyAweGZmMDQwMDcwLCBCVFRWX0JPQVJEX09TUFJFWTU0MCwgICAgICJPc3ByZXktNTQwIiB9LAoJeyAweGZmMDcwMDcwLCBCVFRWX0JPQVJEX09TUFJFWTQ0MCwgICAgICJPc3ByZXktNDQwIiB9LAoKCXsgMHgwMDAxMTAwMiwgQlRUVl9CT0FSRF9BVElfVFZXT05ERVIsICAiQVRJIFRWIFdvbmRlciIgfSwKCXsgMHgwMDAzMTAwMiwgQlRUVl9CT0FSRF9BVElfVFZXT05ERVJWRSwiQVRJIFRWIFdvbmRlci9WRSIgfSwKCgl7IDB4NjYwNjEwN2QsIEJUVFZfQk9BUkRfV0lORkFTVDIwMDAsICAgIkxlYWR0ZWsgV2luRmFzdCBUViAyMDAwIiB9LAoJeyAweDY2MDcxMDdkLCBCVFRWX0JPQVJEX1dJTkZBU1RWQzEwMCwgICJMZWFkdGVrIFdpbkZhc3QgVkMgMTAwIiB9LAoJeyAweDY2MDkxMDdkLCBCVFRWX0JPQVJEX1dJTkZBU1QyMDAwLCAgICJMZWFkdGVrIFRWIDIwMDAgWFAiIH0sCgl7IDB4MjYzNjEwYjQsIEJUVFZfQk9BUkRfU1RCMiwgICAgICAgICAgIlNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQiIH0sCgl7IDB4MjY0NTEwYjQsIEJUVFZfQk9BUkRfU1RCMiwgICAgICAgICAgIlNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQiIH0sCgl7IDB4NDAyMDEwZmMsIEJUVFZfQk9BUkRfR1ZCQ1RWM1BDSSwgICAgIkktTyBEYXRhIENvLiBHVi1CQ1RWMy9QQ0kiIH0sCgl7IDB4NDA1MDEwZmMsIEJUVFZfQk9BUkRfR1ZCQ1RWNFBDSSwgICAgIkktTyBEYXRhIENvLiBHVi1CQ1RWNC9QQ0kiIH0sCgl7IDB4NDA3MDEwZmMsIEJUVFZfQk9BUkRfR1ZCQ1RWNVBDSSwgICAgIkktTyBEYXRhIENvLiBHVi1CQ1RWNS9QQ0kiIH0sCgl7IDB4ZDAxODEwZmMsIEJUVFZfQk9BUkRfR1ZCQ1RWNVBDSSwgICAgIkktTyBEYXRhIENvLiBHVi1CQ1RWNS9QQ0kiIH0sCgoJeyAweDAwMTIxMWJkLCBCVFRWX0JPQVJEX1BJTk5BQ0xFLCAgICAgICJQaW5uYWNsZSBQQ1RWIiB9LAoJLyogc29tZSBjYXJkcyBzaGlwIHdpdGggYnl0ZXN3YXBwZWQgSURzIC4uLiAqLwoJeyAweDEyMDBiZDExLCBCVFRWX0JPQVJEX1BJTk5BQ0xFLCAgICAgICJQaW5uYWNsZSBQQ1RWIFtic3dhcF0iIH0sCgl7IDB4ZmYwMGJkMTEsIEJUVFZfQk9BUkRfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYgW2Jzd2FwXSIgfSwKCS8qIHRoaXMgc2VlbXMgdG8gaGFwcGVuIGFzIHdlbGwgLi4uICovCgl7IDB4ZmYxMjExYmQsIEJUVFZfQk9BUkRfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYiIH0sCgoJeyAweDMwMDAxMjFhLCBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNLCAgICIzRGZ4IFZvb2Rvb1RWIEZNLyBWb29kb29UViAyMDAiIH0sCgl7IDB4MjYzNzEwYjQsIEJUVFZfQk9BUkRfVk9PRE9PVFZfRk0sICAgIjNEZnggVm9vZG9vVFYgRk0vIFZvb2Rvb1RWIDIwMCIgfSwKCXsgMHgzMDYwMTIxYSwgQlRUVl9CT0FSRF9TVEIyLAkgICIzRGZ4IFZvb2Rvb1RWIDEwMC8gU1RCIE9FTSIgfSwKCgl7IDB4MzAwMDE0NGYsIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MywgIihBc2tleSBNYWdpYy9vdGhlcnMpIFRWaWV3OTkgQ1BIMDZ4IiB9LAoJeyAweGEwMDUxNDRmLCBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjMsICJDUEgwNlggVFZpZXc5OS1DYXJkIiB9LAoJeyAweDMwMDIxNDRmLCBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjEsICIoQXNrZXkgTWFnaWMvb3RoZXJzKSBUVmlldzk5IENQSDA1eCIgfSwKCXsgMHgzMDA1MTQ0ZiwgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxLCAiKEFza2V5IE1hZ2ljL290aGVycykgVFZpZXc5OSBDUEgwNjEvMDZMIChUMS9MQykiIH0sCgl7IDB4NTAwMDE0NGYsIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MSwgIkFza2V5IENQSDA1MCIgfSwKCXsgMHgzMDAwMTRmZiwgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxLCAiVFZpZXcgOTkgKENQSDA2MSkiIH0sCgl7IDB4MzAwMjE0ZmYsIEJUVFZfQk9BUkRfUEhPRUJFX1RWTUFTLCAgIlBob2ViZSBUViBNYXN0ZXIgKENQSDA2MCkiIH0sCgoJeyAweDAwMDExNDYxLCBCVFRWX0JPQVJEX0FWUEhPTkU5OCwgICAgICJBVmVyTWVkaWEgVFZQaG9uZTk4IiB9LAoJeyAweDAwMDIxNDYxLCBCVFRWX0JPQVJEX0FWRVJNRURJQTk4LCAgICJBVmVybWVkaWEgVFZDYXB0dXJlIDk4IiB9LAoJeyAweDAwMDMxNDYxLCBCVFRWX0JPQVJEX0FWUEhPTkU5OCwgICAgICJBVmVyTWVkaWEgVFZQaG9uZTk4IiB9LAoJeyAweDAwMDQxNDYxLCBCVFRWX0JPQVJEX0FWRVJNRURJQTk4LCAgICJBVmVyTWVkaWEgVFZDYXB0dXJlIDk4IiB9LAoJeyAweDAzMDAxNDYxLCBCVFRWX0JPQVJEX0FWRVJNRURJQTk4LCAgICJWRE9NQVRFIFRWIFRVTkVSIENBUkQiIH0sCgoJeyAweDExMTcxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUgKFBoaWxpcHMgUEFMIEIvRykiIH0sCgl7IDB4MTExODE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSAoVGVtaWMgUEFMIEIvRykiIH0sCgl7IDB4MTExOTE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSAoUGhpbGlwcyBQQUwgSSkiIH0sCgl7IDB4MTExYTE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSAoVGVtaWMgUEFMIEkpIiB9LAoKCXsgMHgxMTIzMTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWUkFESU8sICAiVGVycmF0ZWMgVFYgUmFkaW8rIiB9LAoJeyAweDExMjcxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFYsICAgICAgICJUZXJyYXRlYyBUVisgKFYxLjA1KSIgICAgfSwKCS8qIGNsYXNoZXMgd2l0aCBGbHlWaWRlbwoJICp7IDB4MTg1MjE4NTIsIEJUVFZfQk9BUkRfVEVSUkFUViwgICAgICJUZXJyYXRlYyBUVisgKFYxLjEwKSIgICAgfSwgKi8KCXsgMHgxMTM0MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChMUjEwMikiIH0sCgl7IDB4MTEzNTE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUVSLCAgIlRlcnJhdGVjIFRWYWx1ZSBSYWRpbyIgfSwgLyogTFIxMDIgKi8KCXsgMHg1MDE4MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIiB9LCAgICAgICAvKiA/PyAqLwoJeyAweGZmM2IxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZBTFVFUiwgICJUZXJyYXRlYyBUVmFsdWUgUmFkaW8iIH0sIC8qID8/ICovCgoJeyAweDQwMDAxNWIwLCBCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUUsICJab2x0cml4IEdlbmllIFRWIiB9LAoJeyAweDQwMGExNWIwLCBCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUUsICJab2x0cml4IEdlbmllIFRWIiB9LAoJeyAweDQwMGQxNWIwLCBCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUUsICJab2x0cml4IEdlbmllIFRWIC8gUmFkaW8iIH0sCgl7IDB4NDAxMDE1YjAsIEJUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRSwgIlpvbHRyaXggR2VuaWUgVFYgLyBSYWRpbyIgfSwKCXsgMHg0MDE2MTViMCwgQlRUVl9CT0FSRF9aT0xUUklYX0dFTklFLCAiWm9sdHJpeCBHZW5pZSBUViAvIFJhZGlvIiB9LAoKCXsgMHgxNDMwYWEwMCwgQlRUVl9CT0FSRF9QVjE0MywgICAgICAgICAiUHJvdmlkZW8gUFYxNDNBIiB9LAoJeyAweDE0MzFhYTAwLCBCVFRWX0JPQVJEX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0IiIH0sCgl7IDB4MTQzMmFhMDAsIEJUVFZfQk9BUkRfUFYxNDMsICAgICAgICAgIlByb3ZpZGVvIFBWMTQzQyIgfSwKCXsgMHgxNDMzYWEwMCwgQlRUVl9CT0FSRF9QVjE0MywgICAgICAgICAiUHJvdmlkZW8gUFYxNDNEIiB9LAoJeyAweDE0MzNhYTAzLCBCVFRWX0JPQVJEX1BWMTQzLCAgICAgICAgICJTZWN1cml0eSBFeWVzIiB9LAoKCXsgMHgxNDYwYWEwMCwgQlRUVl9CT0FSRF9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBBLTEiIH0sCgl7IDB4MTQ2MWFhMDEsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQS0yIiB9LAoJeyAweDE0NjJhYTAyLCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEEtMyIgfSwKCXsgMHgxNDYzYWEwMywgQlRUVl9CT0FSRF9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBBLTQiIH0sCgoJeyAweDE0NjRhYTA0LCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEItMSIgfSwKCXsgMHgxNDY1YWEwNSwgQlRUVl9CT0FSRF9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBCLTIiIH0sCgl7IDB4MTQ2NmFhMDYsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQi0zIiB9LAoJeyAweDE0NjdhYTA3LCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEItNCIgfSwKCgl7IDB4YTEzMmZmMDAsIEJUVFZfQk9BUkRfSVZDMTAwLCAgICAgICAgIklWQy0xMDAiICB9LAoJeyAweGExNTUwMDAwLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwIiAgfSwKCXsgMHhhMTU1MDAwMSwgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMCIgIH0sCgl7IDB4YTE1NTAwMDIsIEJUVFZfQk9BUkRfSVZDMjAwLCAgICAgICAgIklWQy0yMDAiICB9LAoJeyAweGExNTUwMDAzLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwIiAgfSwKCXsgMHhhMTU1MDEwMCwgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMEciIH0sCgl7IDB4YTE1NTAxMDEsIEJUVFZfQk9BUkRfSVZDMjAwLCAgICAgICAgIklWQy0yMDBHIiB9LAoJeyAweGExNTUwMTAyLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwRyIgfSwKCXsgMHhhMTU1MDEwMywgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMEciIH0sCgl7IDB4YTE4MmZmMDAsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoJeyAweGExODJmZjAxLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKCXsgMHhhMTgyZmYwMiwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgl7IDB4YTE4MmZmMDMsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoJeyAweGExODJmZjA0LCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKCXsgMHhhMTgyZmYwNSwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgl7IDB4YTE4MmZmMDYsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoJeyAweGExODJmZjA3LCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKCXsgMHhhMTgyZmYwOCwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgl7IDB4YTE4MmZmMDksIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoJeyAweGExODJmZjBhLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKCXsgMHhhMTgyZmYwYiwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgl7IDB4YTE4MmZmMGMsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoJeyAweGExODJmZjBkLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKCXsgMHhhMTgyZmYwZSwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgl7IDB4YTE4MmZmMGYsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoKCXsgMHg0MTQyNDM0NCwgQlRUVl9CT0FSRF9HUkFORFRFQywgICAgICAiR3JhbmRUZWMgTXVsdGkgQ2FwdHVyZSIgfSwKCXsgMHgwMTAyMDMwNCwgQlRUVl9CT0FSRF9YR1VBUkQsICAgICAgICAiR3JhbmR0ZWMgR3JhbmQgWC1HdWFyZCIgfSwKCgl7IDB4MTg1MDE4NTEsIEJUVFZfQk9BUkRfQ0hST05PU19WUzIsICAgIkZseVZpZGVvIDk4IChMUjUwKS8gQ2hyb25vcyBWaWRlbyBTaHV0dGxlIElJIiB9LAoJeyAweGEwNTAxODUxLCBCVFRWX0JPQVJEX0NIUk9OT1NfVlMyLCAgICJGbHlWaWRlbyA5OCAoTFI1MCkvIENocm9ub3MgVmlkZW8gU2h1dHRsZSBJSSIgfSwKCXsgMHgxODUxMTg1MSwgQlRUVl9CT0FSRF9GTFlWSURFTzk4RVosICAiRmx5VmlkZW8gOThFWiAoTFI1MSkvIEN5YmVyTWFpbCBBViIgfSwKCXsgMHgxODUyMTg1MiwgQlRUVl9CT0FSRF9UWVBIT09OX1RWSUVXLCAiRmx5VmlkZW8gOThGTSAoTFI1MCkvIFR5cGhvb24gVFZpZXcgVFYvRk0gVHVuZXIiIH0sCgl7IDB4NDFhMGEwNTEsIEJUVFZfQk9BUkRfRkxZVklERU9fOThGTSwgIkxpZmV2aWV3IEZseVZpZGVvIDk4IExSNTAgUmV2IFEiIH0sCgl7IDB4MTg1MDFmN2YsIEJUVFZfQk9BUkRfRkxZVklERU9fOTgsICAgIkxpZmV2aWV3IEZseXZpZGVvIDk4IiB9LAoKICAgIAl7IDB4MDEwMTE1Y2IsIEJUVFZfQk9BUkRfR01WMSwgICAgICAgICAgIkFHIEdNVjEiIH0sCgl7IDB4MDEwMTE0YzcsIEJUVFZfQk9BUkRfTU9EVEVDXzIwNSwgICAgIk1vZHVsYXIgVGVjaG5vbG9neSBNTTIwMS9NTTIwMi9NTTIwNS9NTTIxMC9NTTIxNSBQQ1RWIiB9LAoKCXsgMHgxMGI0MjYzNiwgQlRUVl9CT0FSRF9IQVVQUEFVR0U4NzgsICAiU1RCID8/PyIgfSwKCXsgMHgyMTdkNjYwNiwgQlRUVl9CT0FSRF9XSU5GQVNUMjAwMCwgICAiTGVhZHRlayBXaW5GYXN0IFRWIDIwMDAiIH0sCgl7IDB4ZmZmNmY2ZmYsIEJUVFZfQk9BUkRfV0lORkFTVDIwMDAsICAgIkxlYWR0ZWsgV2luRmFzdCBUViAyMDAwIiB9LAoJeyAweDAzMTE2MDAwLCBCVFRWX0JPQVJEX1NFTlNPUkFZMzExLCAgICJTZW5zb3JheSAzMTEiIH0sCgl7IDB4MDA3OTBlMTEsIEJUVFZfQk9BUkRfV0lORFZSLCAgICAgICAgIkNhbm9wdXMgV2luRFZSIFBDSSIgfSwKCXsgMHhhMGZjYTFhMCwgQlRUVl9CT0FSRF9aT0xUUklYLCAgICAgICAiRmFjZSB0byBGYWNlIFR2bWF4IiB9LAoJeyAweDIwMDA3MDYzLCBCVFRWX0JPQVJEX1BDX0hEVFYsICAgICAgICJwY0hEVFYgSEQtMjAwMCBUViJ9LAoJeyAweDgyYjJhYTZhLCBCVFRWX0JPQVJEX1NJTVVTX0dWQzExMDAsICJTSU1VUyBHVkMxMTAwIiB9LAoJeyAweDE0NmNhYTBjLCBCVFRWX0JPQVJEX1BWOTUxLCAgICAgICAgICJpdHVuZXIgc3BlY3RyYTgiIH0sCgl7IDB4MjAwYTEyOTUsIEJUVFZfQk9BUkRfUFhDMjAwLCAgICAgICAgIkltYWdlTmF0aW9uIFBYQzIwMEEiIH0sCgoJeyAweDQwMTExNTU0LCBCVFRWX0JPQVJEX1BWX0JUODc4UF85QiwgICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVCIgfSwKCXsgMHgxN2RlMGEwMSwgQlRUVl9CT0FSRF9LV09STEQsICAgICAgICAiTWVjZXIgVFYvRk0vVmlkZW8gVHVuZXIiIH0sCgoJeyAweDAxMDUxODA1LCBCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQLCAiUGljb2xvIFRldHJhIENoaXAgIzEiIH0sCgl7IDB4MDEwNjE4MDUsIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVAsICJQaWNvbG8gVGV0cmEgQ2hpcCAjMiIgfSwKCXsgMHgwMTA3MTgwNSwgQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICMzIiB9LAoJeyAweDAxMDgxODA1LCBCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQLCAiUGljb2xvIFRldHJhIENoaXAgIzQiIH0sCgoJeyAweDE1NDA5NTExLCBCVFRWX0JPQVJEX0FDT1JQX1k4NzhGLCAiQWNvcnAgWTg3OEYiIH0sCgoJLyogbGlrZWx5IGJyb2tlbiwgdmVuZG9yIGlkIGRvZXNuJ3QgbWF0Y2ggdGhlIG90aGVyIG1hZ2ljIHZpZXdzIC4uLgoJICogeyAweGEwZmNhMDRmLCBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjMsICJHdWlsbGVtb3QgTWF4aSBUViBWaWRlbyAzIiB9LCAqLwoKCS8qIERWQiBjYXJkcyAodXNpbmcgcGNpIGZ1bmN0aW9uIC4xIGZvciBtcGVnIGRhdGEgeGZlcikgKi8KCXsgMHgwMTAxMDA3MSwgQlRUVl9CT0FSRF9ORUJVTEFfRElHSVRWLCAiTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUViIgfSwKCXsgMHgwNzYxMTQ2MSwgQlRUVl9CT0FSRF9BVkRWQlRfNzYxLCAgICAiQXZlck1lZGlhIEF2ZXJUViBEVkItVCA3NjEiIH0sCgl7IDB4MDAxYzExYmQsIEJUVFZfQk9BUkRfUElOTkFDTEVTQVQsICAgIlBpbm5hY2xlIFBDVFYgU2F0IiB9LAoJeyAweDAwMjYxMWJkLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULCAgICJQaW5uYWNsZSBQQ1RWIFNBVCBDSSIgfSwKCXsgMHgwMDAxMTgyMiwgQlRUVl9CT0FSRF9UV0lOSEFOX0RTVCwgICAiVHdpbmhhbiBWaXNpb25QbHVzIERWQiIgfSwKCXsgMHhmYzAwMjcwZiwgQlRUVl9CT0FSRF9UV0lOSEFOX0RTVCwgICAiQ2hhaW5UZWNoIGRpZ2l0b3AgRFNULTEwMDAgRFZCLVMiIH0sCgl7IDB4MDc3MTE0NjEsIEJUVFZfQk9BUkRfQVZEVkJUXzc3MSwgICAgIkFWZXJtZWRpYSBBdmVyVFYgRFZCLVQgNzcxIiB9LAoJeyAweGRiMTAxOGFjLCBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURSwgICAgIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZSIgfSwKCXsgMHhkNTAwMThhYywgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURSwgICAgIkRWaUNPIEZ1c2lvbkhEVFYgNSBMaXRlIiB9LAoKCXsgMCwgLTEsIE5VTEwgfQp9OwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogYXJyYXkgd2l0aCBkZXNjcmlwdGlvbiBmb3IgYnQ4NDggLyBidDg3OCB0di9ncmFiYmVyIGNhcmRzICAgICAgICAgICAgICAgKi8KCnN0cnVjdCB0dmNhcmQgYnR0dl90dmNhcmRzW10gPSB7CgkvKiAtLS0tIGNhcmQgMHgwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9VTktOT1dOXSA9IHsKCQkubmFtZQkJPSAiICoqKiBVTktOT1dOL0dFTkVSSUMgKioqICIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMH0sCgkJLnR1bmVyX3R5cGUJPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9NSVJPXSA9IHsKCQkubmFtZQkJPSAiTUlSTyBQQ1RWIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDE1LAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7IDIsIDAsIDAsIDAsIDEwfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnR1bmVyX3R5cGUJPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9IQVVQUEFVR0VdID0gewoJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgKGJ0ODQ4KSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSA3LAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7IDAsIDEsIDIsIDMsIDR9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkudHVuZXJfdHlwZQk9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX1NUQl0gPSB7CgkJLm5hbWUJCT0gIlNUQiwgR2F0ZXdheSBQL04gNjAwMDY5OSAoYnQ4NDgpIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDcsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgNCwgMCwgMiwgMywgMX0sCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS5oYXNfcmFkaW8gICAgICA9IDEsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDA0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0lOVEVMXSA9IHsKCQkubmFtZQkJPSAiSW50ZWwgQ3JlYXRlIGFuZCBTaGFyZSBQQ0kvIFNtYXJ0IFZpZGVvIFJlY29yZGVyIElJSSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDAsCgkJLnR1bmVyCQk9IC0xLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4CT0geyAwIH0sCgkJLm5lZWRzX3R2YXVkaW8JPSAwLAoJCS50dW5lcl90eXBlCT0gNCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9ESUFNT05EXSA9IHsKCQkubmFtZQkJPSAiRGlhbW9uZCBEVFYyMDAwIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDMsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDB9LAoJCS5hdWRpb211eAk9IHsgMCwgMSwgMCwgMSwgM30sCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfQVZFUk1FRElBXSA9IHsKCQkubmFtZQkJPSAiQVZlck1lZGlhIFRWUGhvbmUiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDMsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5ncGlvbWFzawk9IDB4MGYsCgkJLmF1ZGlvbXV4CT0geyAweDBjLCAweDA0LCAweDA4LCAweDA0LCAwfSwKCQkvKiAgICAgICAgICAgICAgICAweDA0IGZvciBzb21lIGNhcmRzID8/ICovCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmF1ZGlvX2hvb2sJPSBhdmVybWVkaWFfdHZwaG9uZV9hdWRpbywKCQkuaGFzX3JlbW90ZSAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX01BVFJJWF9WSVNJT05dID0gewoJCS5uYW1lCQk9ICJNQVRSSVgtVmlzaW9uIE1WLURlbHRhIiwKCQkudmlkZW9faW5wdXRzCT0gNSwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gLTEsCgkJLnN2aHMJCT0gMywKCQkuZ3Bpb21hc2sJPSAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwLCAwfSwKCQkuYXVkaW9tdXgJPSB7MCB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkudHVuZXJfdHlwZQk9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCgkvKiAtLS0tIGNhcmQgMHgwOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9GTFlWSURFT10gPSB7CgkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIElJIChCdDg0OCkgTFIyNiAvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjI2IiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4YzAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7IDAsIDB4YzAwLCAweDgwMCwgMHg0MDAsIDB4YzAwLCAwfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9UVVJCT1RWXSA9IHsKCQkubmFtZQkJPSAiSU1TL0lYbWljcm8gVHVyYm9UViIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAzLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7IDEsIDEsIDIsIDMsIDB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMCwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9IQVVQUEFVR0U4NzhdID0gewoJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgKGJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDBmLCAvKiBvbGQ6IDcgKi8KCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMX0sCgkJLmF1ZGlvbXV4CT0geyAwLCAxLCAyLCAzLCA0fSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9NSVJPUFJPXSA9IHsKCQkubmFtZQkJPSAiTUlSTyBQQ1RWIHBybyIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDMwMTRmLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7IDB4MjAwMDEsMHgxMDAwMSwgMCwgMCwxMH0sCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0FEU1RFQ0hfVFZdID0gewoJCS5uYW1lCQk9ICJBRFMgVGVjaG5vbG9naWVzIENoYW5uZWwgU3VyZmVyIFRWIChidDg0OCkiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMTUsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMTMsIDE0LCAxMSwgNywgMCwgMH0sCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfQVZFUk1FRElBOThdID0gewoJCS5uYW1lCQk9ICJBVmVyTWVkaWEgVFZDYXB0dXJlIDk4IiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gNCwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDE1LAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7IDEzLCAxNCwgMTEsIDcsIDAsIDB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkubXNwMzR4eF9hbHQgICAgPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmF1ZGlvX2hvb2sgICAgID0gYXZlcm1lZGlhX3R2X3N0ZXJlb19hdWRpbywKCQkubm9fZ3Bpb2lycSAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX1ZIWF0gPSB7CgkJLm5hbWUJCT0gIkFpbXNsYWIgVmlkZW8gSGlnaHdheSBYdHJlbWUgKFZIWCkiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gNywKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4CT0geyAwLCAyLCAxLCAzLCA0fSwgLyogb2xkOiB7IDAsIDEsIDIsIDMsIDR9ICovCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfWk9MVFJJWF0gPSB7CgkJLm5hbWUJCT0gIlpvbHRyaXggVFYtTWF4IiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDE1LAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7MCAsIDAsIDEgLCAwLCAxMH0sCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDEwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1BJWFZJRVdQTEFZVFZdID0gewoJCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsdmlldyBQbGF5VFYgKGJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDAxZmUwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkjaWYgMAoJCS8qIG9sZCAqLwoJCS5hdWRpb211eAk9IHsgMHgwMWMwMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCwgMHgwMDIwMDAsIDAgfSwKCSNlbHNlCgkJLyogMjAwMy0xMC0yMCBieSAiQW50b24gQS4gQXJhcG92IiA8YXJhcG92QG1haWwucnU+ICovCgkJLmF1ZGlvbXV4ICAgICAgID0geyAweDAwMWUwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwLCAweDAwMjAwMCwgMCB9LAoJI2VuZGlmCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gLTEsCgl9LAoJW0JUVFZfQk9BUkRfV0lOVklFV182MDFdID0gewoJCS5uYW1lCQk9ICJMZWFkdGVrIFdpblZpZXcgNjAxIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4ODMwMGY4LAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxLDB9LAoJCS5hdWRpb211eAk9IHsgMHg0ZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDd9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkudHVuZXJfdHlwZQk9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5hdWRpb19ob29rCT0gd2ludmlld19hdWRpbywKCQkuaGFzX3JhZGlvCT0gMSwKCX0sCglbQlRUVl9CT0FSRF9BVkVDX0lOVEVSQ0FQXSA9IHsKCQkubmFtZQkJPSAiQVZFQyBJbnRlcmNhcHR1cmUiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAyLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMCwKCQkubXV4c2VsCQk9IHsyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7MSwgMCwgMCwgMCwgMH0sCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfTElGRV9GTFlLSVRdID0gewoJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyBJSSBFWiAvRmx5S2l0IExSMzggQnQ4NDggKGNhcHR1cmUgb25seSkiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAtMSwKCQkuc3ZocwkJPSAtMSwKCQkuZ3Bpb21hc2sJPSAweDhkZmYwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4CT0geyAwIH0sCgkJLm5vX21zcDM0eHgJPSAxLAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDE0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0NFSV9SQUZGTEVTXSA9IHsKCQkubmFtZQkJPSAiQ0VJIFJhZmZsZXMgQ2FyZCIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDMsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkubXV4c2VsCQk9IHsyLCAzLCAxLCAxfSwKCQkudHVuZXJfdHlwZQk9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX0NPTkZFUkVOQ0VUVl0gPSB7CgkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4LyBMdWNreSBTdGFyIEltYWdlIFdvcmxkIENvbmZlcmVuY2VUViBMUjUwIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMiwgIC8qIHR1bmVyLCBsaW5lIGluICovCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDE4MDAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwLCAweDE4MDB9LAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9QSE9FQkVfVFZNQVNdID0gewoJCS5uYW1lCQk9ICJBc2tleSBDUEgwNTAvIFBob2ViZSBUdiBNYXN0ZXIgKyBGTSIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweGMwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4CT0gezAsIDEsIDB4ODAwLCAweDQwMCwgMHhjMDAsIDB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX01PRFRFQ18yMDVdID0gewoJCS5uYW1lCQk9ICJNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViwgYnQ4NzgiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IC0xLAoJCS5ncGlvbWFzawk9IDcsCgkJLm11eHNlbAkJPSB7IDIsIDMsIC0xIH0sCgkJLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKCQkuYXVkaW9tdXgJPSB7IDAsIDAsIDAsIDAsIDAgfSwKCQkubm9fbXNwMzR4eAk9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FMUFNfVFNCQjVfUEFMX0ksCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDE4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjFdID0gewoJCS5uYW1lCQk9ICJBc2tleSBDUEgwNVgvMDZYIChidDg3OCkgW21hbnkgdmVuZG9yc10iLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHhlMDAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsweDQwMCwgMHg0MDAsIDB4NDAwLCAweDQwMCwgMHhjMDB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmVtb3RlICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfVk9CSVNfQk9PU1RBUl0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4wIChCdDg0OCkvIFRlcnJhIFRWYWx1ZSBWZXJzaW9uIDEuMC8gVm9iaXMgVFYtQm9vc3RhciIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDFmMGZmZiwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4ICAgICAgID0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAwLCAweDQwMDAwfSwKCQkubmVlZHNfdHZhdWRpbwk9IDAsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuYXVkaW9faG9vayAgICAgPSB0ZXJyYXR2X2F1ZGlvLAoJfSwKCVtCVFRWX0JPQVJEX0hBVVBQQVVHX1dDQU1dID0gewoJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luQ2FtIG5ld2VyIChidDg3OCkiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDMsCgkJLmdwaW9tYXNrCT0gNywKCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMX0sCgkJLmF1ZGlvbXV4CT0geyAwLCAxLCAyLCAzLCA0fSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnR1bmVyX3R5cGUJPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9NQVhJXSA9IHsKCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTgvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjUwIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMiwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4MTgwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4CT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19TRUNBTSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJLyogLS0tLSBjYXJkIDB4MWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfVEVSUkFUVl0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4xIChidDg3OCkiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHgxZjBmZmYsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMHgyMDAwMCwgMHgzMDAwMCwgMHgxMDAwMCwgMHgwMDAwMCwgMHg0MDAwMH0sCgkJLm5lZWRzX3R2YXVkaW8JPSAwLAoJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmF1ZGlvX2hvb2sJPSB0ZXJyYXR2X2F1ZGlvLAoJCS8qIEdQSU8gd2lyaW5nOgoJCUV4dGVybmFsIDIwIHBpbiBjb25uZWN0b3IgKGZvciBBY3RpdmUgUmFkaW8gVXBncmFkZSBib2FyZCkKCQlncGlvMDA6IGkyYy1zZGEKCQlncGlvMDE6IGkyYy1zY2wKCQlncGlvMDI6IG9tNTYxMC1kYXRhCgkJZ3BpbzAzOiBvbTU2MTAtY2xrCgkJZ3BpbzA0OiBvbTU2MTAtd3JlCgkJZ3BpbzA1OiBvbTU2MTAtc3RlcmVvCgkJZ3BpbzA2OiByZHM2NTg4LWRhdm4KCQlncGlvMDc6IFBpbiA3IG4uYy4KCQlncGlvMDg6IG5JT1cKCQlncGlvMDkrMTA6IG5JT1IsIG5TRUwgPz8gKGJ0ODc4KQoJCQlncGlvMDk6IG5JT1IgKGJ0ODQ4KQoJCQlncGlvMTA6IG5TRUwgKGJ0ODQ4KQoJCVNvdW5kIFJvdXRpbmc6CgkJZ3BpbzE2OiB1Mi1BMCAoMXN0IDQwNTJidCkKCQlncGlvMTc6IHUyLUExCgkJZ3BpbzE4OiB1Mi1uRU4KCQlncGlvMTk6IHU0LUEwICgybmQgNDA1MikKCQlncGlvMjA6IHU0LUExCgkJCXU0LW5FTiAtIEdORAoJCUJ0c3B5OgoJCQkwMDAwMCA6IENkcm9tIChpbnRlcm5hbCBhdWRpbyBpbnB1dCkKCQkJMTAwMDAgOiBleHQuIFZpZGVvIGF1ZGlvIGlucHV0CgkJCTIwMDAwIDogVFYgTW9ubwoJCQlhMDAwMCA6IFRWIE1vbm8vMgoJCTFhMDAwMCA6IFRWIFN0ZXJlbwoJCQkzMDAwMCA6IFJhZGlvCgkJCTQwMDAwIDogTXV0ZQoJKi8KCgl9LAoJW0JUVFZfQk9BUkRfUFhDMjAwXSA9IHsKCQkvKiBKYW5uaWsgRnJpdHNjaCA8amFubmlrQHRlY2hmYWsudW5pLWJpZWxlZmVsZC5kZT4gKi8KCQkubmFtZQkJPSAiSW1hZ2VuYXRpb24gUFhDMjAwIiwKCQkudmlkZW9faW5wdXRzCT0gNSwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gLTEsCgkJLnN2aHMJCT0gMSwgLyogd2FzOiA0ICovCgkJLmdwaW9tYXNrCT0gMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMH0sCgkJLmF1ZGlvbXV4CT0geyAwIH0sCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm11eHNlbF9ob29rICAgID0gUFhDMjAwX211eHNlbCwKCgl9LAoJW0JUVFZfQk9BUkRfRkxZVklERU9fOThdID0gewoJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4MTgwMCwgIC8qIDB4OGRmZTAwICovCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMCwgMHgwODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwLCAwIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfSVBST1RWXSA9IHsKCQkubmFtZQkJPSAiRm9ybWFjIGlQcm9UViwgRm9ybWFjIFByb1RWIEkgKGJ0ODQ4KSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMywKCQkuZ3Bpb21hc2sJPSAxLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7IDEsIDAsIDAsIDAsIDAgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJLyogLS0tLSBjYXJkIDB4MjAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfSU5URUxfQ19TX1BDSV0gPSB7CgkJLm5hbWUJCT0gIkludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAwLAoJCS50dW5lcgkJPSAtMSwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMCB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMCwKCQkudHVuZXJfdHlwZQk9IDQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfVEVSUkFUVkFMVUVdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBUZXJyYVRWYWx1ZSBWZXJzaW9uIEJ0ODc4IiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4ZmZmZjAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7IDB4NTAwLCAwLCAweDMwMCwgMHg5MDAsIDB4OTAwfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9XSU5GQVNUMjAwMF0gPSB7CgkJLm5hbWUJCT0gIkxlYWR0ZWsgV2luRmFzdCAyMDAwLyBXaW5GYXN0IDIwMDAgWFAiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEsIDB9LCAvKiBUViwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCgkjaWYgMAoJCS5ncGlvbWFzawk9IDB4YzMzMDAwLAoJCS5hdWRpb211eAk9IHsgMHg0MjIwMDAsMHgxMDAwLDB4MDAwMCwweDYyMDAwMCwweDgwMDAwMCB9LAoJI2Vsc2UKCQkvKiBBbGV4YW5kZXIgVmFyYWtpbiA8YXZhcmFraW5AaG90bWFpbC5jb20+IFtzdGVyZW8gdmVyc2lvbl0gKi8KCQkuZ3Bpb21hc2sJPSAweGIzMzAwMCwKCQkuYXVkaW9tdXgJPSB7IDB4MTIyMDAwLDB4MTAwMCwweDAwMDAsMHg2MjAwMDAsMHg4MDAwMDAgfSwKCSNlbmRpZgoJCS8qIEF1ZGlvIFJvdXRpbmcgZm9yICJXaW5GYXN0IDIwMDAgWFAiIChubyB0diBzdGVyZW8gISkKCQkJZ3BpbzIzIC0tIGhlZjQwNTI6bkVuYWJsZSAoMHg4MDAwMDApCgkJCWdwaW8xMiAtLSBoZWY0MDUyOkExCgkJCWdwaW8xMyAtLSBoZWY0MDUyOkEwCgkJMHgwMDAwOiBleHRlcm5hbCBhdWRpbwoJCTB4MTAwMDogRk0KCQkweDIwMDA6IFRWCgkJMHgzMDAwOiBuLmMuCgkJTm90ZTogVGhlcmUgZXhpc3RzIGFub3RoZXIgdmFyaWFudCAiV2luZmFzdCAyMDAwIiB3aXRoIHR2IHN0ZXJlbyAhPwoJCU5vdGU6IGVlcHJvbSBvbmx5IGNvbnRhaW5zIEZGIGFuZCBwY2kgc3Vic3lzdGVtIGlkIDEwN2Q6NjYwNgoJCSovCgkJLm5lZWRzX3R2YXVkaW8JPSAwLAoJCS5wbGwJCT0gUExMXzI4LAoJCS5oYXNfcmFkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gNSwgLyogZGVmYXVsdCBmb3Igbm93LCBncGlvIHJlYWRzIEJGRkYwNiBmb3IgUGFsIGJnK2RrICovCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmF1ZGlvX2hvb2sJPSB3aW5mYXN0MjAwMF9hdWRpbywKCQkuaGFzX3JlbW90ZSAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX0NIUk9OT1NfVlMyXSA9IHsKCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCAvIENocm9ub3MgVmlkZW8gU2h1dHRsZSBJSSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDMsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDE4MDAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwLCAweDE4MDB9LAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDI0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1RZUEhPT05fVFZJRVddID0gewoJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAgLyBUeXBob29uIFRWaWV3IFRWL0ZNIFR1bmVyIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMywKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4MTgwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4CT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMCwgMCB9LAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yYWRpbwk9IDEsCgl9LAoJW0JUVFZfQk9BUkRfUFhFTFZXUExUVlBST10gPSB7CgkJLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBwcm8iLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHhmZiwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5hdWRpb211eAk9IHsgMHgyMSwgMHgyMCwgMHgyNCwgMHgyYywgMHgyOSwgMHgyOSB9LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjNdID0gewoJCS5uYW1lCQk9ICJBc2tleSBDUEgwNlggVFZpZXc5OSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDU1MWUwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMH0sCgkJLmF1ZGlvbXV4CT0geyAweDU1MTQwMCwgMHg1NTEyMDAsIDAsIDAsIDB4NTUxYzAwLCAweDU1MTIwMCB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IDEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yZW1vdGUgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9QSU5OQUNMRV0gPSB7CgkJLm5hbWUJCT0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHgwMzAwMEYsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMiwgMHhkMDAwMSwgMCwgMCwgMX0sCgkJLm5lZWRzX3R2YXVkaW8JPSAwLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1NUQjJdID0gewoJCS5uYW1lCQk9ICJTVEIgVFYgUENJIEZNLCBHYXRld2F5IFAvTiA2MDAwNzA0IChidDg3OCksIDNEZnggVm9vZG9vVFYgMTAwIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDcsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgNCwgMCwgMiwgMywgMX0sCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS5oYXNfcmFkaW8gICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfQVZQSE9ORTk4XSA9IHsKCQkubmFtZQkJPSAiQVZlck1lZGlhIFRWUGhvbmUgOTgiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSA0LAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMTUsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMTMsIDQsIDExLCA3LCAwLCAwfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX3JhZGlvCT0gMSwKCQkuYXVkaW9faG9vawk9IGF2ZXJtZWRpYV90dnBob25lX2F1ZGlvLAoJfSwKCVtCVFRWX0JPQVJEX1BWOTUxXSA9IHsKCQkubmFtZQkJPSAiUHJvVmlkZW8gUFY5NTEiLCAvKiBwaWMxNmM1NCAqLwoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4CT0geyAwLCAwLCAwLCAwLCAwfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9PTkFJUl9UVl0gPSB7CgkJLm5hbWUJCT0gIkxpdHRsZSBPbkFpciBUViIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweGUwMGIsCgkJLm11eHNlbAkJPSB7MiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4CT0gezB4ZmY5ZmY2LCAweGZmOWZmNiwgMHhmZjFmZjcsIDAsIDB4ZmYzZmZjfSwKCQkubm9fbXNwMzR4eAk9IDEsCgkJLnR1bmVyX3R5cGUJPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJLyogLS0tLSBjYXJkIDB4MmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfU0lHTUFfVFZJSV9GTV0gPSB7CgkJLm5hbWUJCT0gIlNpZ21hIFRWSUktRk0iLAoJCS52aWRlb19pbnB1dHMJPSAyLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IC0xLAoJCS5ncGlvbWFzawk9IDMsCgkJLm11eHNlbAkJPSB7MiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4CT0gezEsIDEsIDAsIDIsIDN9LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkucGxsCQk9IFBMTF9OT05FLAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTjJdID0gewoJCS5uYW1lCQk9ICJNQVRSSVgtVmlzaW9uIE1WLURlbHRhIDIiLAoJCS52aWRlb19pbnB1dHMJPSA1LAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAtMSwKCQkuc3ZocwkJPSAzLAoJCS5ncGlvbWFzawk9IDAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDB9LAoJCS5hdWRpb211eAk9IHswIH0sCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRV0gPSB7CgkJLm5hbWUJCT0gIlpvbHRyaXggR2VuaWUgVFYvRk0iLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHhiY2YwM2YsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMHhiYzgwM2YsIDB4YmM5MDNmLCAweGJjYjAzZiwgMCwgMHhiY2IwM2Z9LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IDIxLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX1RFUlJBVFZSQURJT10gPSB7CgkJLm5hbWUJCT0gIlRlcnJhdGVjIFRWL1JhZGlvKyIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDcwMDAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAsIDB4NDAwMDAsIDB4MjAwMDAgfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5wbGwJCT0gUExMXzM1LAoJCS50dW5lcl90eXBlCT0gMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX3JhZGlvCT0gMSwKCX0sCgoJLyogLS0tLSBjYXJkIDB4MzAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfRFlOQUxJTktdID0gewoJCS5uYW1lCQk9ICJBc2tleSBDUEgwM3gvIER5bmFsaW5rIE1hZ2ljIFRWaWV3IiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDE1LAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXgJPSB7MiwwLDAsMCwxfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9HVkJDVFYzUENJXSA9IHsKCQkubmFtZQkJPSAiSU9EQVRBIEdWLUJDVFYzL1BDSSIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDAxMGYwMCwKCQkubXV4c2VsCQk9IHsyLCAzLCAwLCAwfSwKCQkuYXVkaW9tdXgJPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCwgMCwgMH0sCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfQUxQU19UU0hDNl9OVFNDLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5hdWRpb19ob29rCT0gZ3ZiY3R2M3BjaV9hdWRpbywKCX0sCglbQlRUVl9CT0FSRF9QWEVMVldQTFRWUEFLXSA9IHsKCQkubmFtZQkJPSAiUHJvbGluayBQVi1CVDg3OFArNEUgLyBQaXhlbFZpZXcgUGxheVRWIFBBSyAvIExlbmNvIE1YVFYtOTU3OCBDUCIsCgkJLnZpZGVvX2lucHV0cwk9IDUsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMywKCQkuZ3Bpb21hc2sJPSAweEFBMDAwMCwKCQkubXV4c2VsCQk9IHsgMiwzLDEsMSwtMSB9LAoJCS5kaWdpdGFsX21vZGUgICA9IERJR0lUQUxfTU9ERV9DQU1FUkEsCgkJLmF1ZGlvbXV4CT0geyAweDIwMDAwLCAwLCAweDgwMDAwLCAweDgwMDAwLCAweGE4MDAwLCAweDQ2MDAwICB9LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yZW1vdGUJPSAxLAoJCS8qIEdQSU8gd2lyaW5nOiAoZGlmZmVyZW50IGZyb20gUmV2LjRDICEpCgkJCUdQSU8xNzogVTQuQTAgKGZpcnN0IGhlZjQwNTJidCkKCQkJR1BJTzE5OiBVNC5BMQoJCQlHUElPMjA6IFU1LkExIChzZWNvbmQgaGVmNDA1MmJ0KQoJCQlHUElPMjE6IFU0Lm5FTgoJCQlHUElPMjI6IEJUODMyIFJlc2V0IExpbmUKCQkJR1BJTzIzOiBBNSxBMCwgVTUsbkVOCgkJTm90ZTogQXQgaTJjPTB4OGEgaXMgYSBCdDgzMiBjaGlwLCB3aGljaCBjaGFuZ2VzIHRvIDB4ODggYWZ0ZXIgYmVpbmcgcmVzZXQgdmlhIEdQSU8yMgoJCSovCgl9LAoJW0JUVFZfQk9BUkRfRUFHTEVdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJFYWdsZSBXaXJlbGVzcyBDYXByaWNvcm4yIChidDg3OEEpIiwKCQkudmlkZW9faW5wdXRzICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDcsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxLCAxfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDMsIDR9LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSAvKiBUVU5FUl9BTFBTX1RNREgyX05UU0MgKi8sCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDM0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1BJTk5BQ0xFUFJPXSA9IHsKCQkvKiBEYXZpZCBIw6RyZGVtYW4gPGRhdmlkQDJnZW4uY29tPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIFN0dWRpbyBQcm8iLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDMsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMzAwMEYsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMSwgMHhkMDAwMSwgMCwgMCwgMTB9LAoJCQkJLyogc291bmQgcGF0aCAoNSBzb3VyY2VzKToKCQkJCU1VWDEgKG1hc2sgMHgwMyksIEVuYWJsZSBQaW4gMHgwOCAoMD1lbmFibGUsIDE9ZGlzYWJsZSkKCQkJCQkwPSBleHQuIEF1ZGlvIElOCgkJCQkJMT0gZnJvbSBNVVgyCgkJCQkJMj0gTW9ubyBUViBzb3VuZCBmcm9tIFR1bmVyCgkJCQkJMz0gbm90IGNvbm5lY3RlZAoJCQkJTVVYMiAobWFzayAweDMwMDAwKToKCQkJCQkwLDIsMz0gZnJvbSBNU1AzNHh4CgkJCQkJMT0gRk0gc3RlcmVvIFJhZGlvIGZyb20gVHVuZXIgKi8KCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9UVklFV19SRFNfRk1dID0gewoJCS8qIENsYWFzIExhbmdiZWhuIDxjbGFhc0BiaWdmb290LmNvbT4sCgkJU3ZlbiBHcm90aGtsYWdzIDxzdmVuQHVwYi5kZT4gKi8KCQkubmFtZQkJPSAiVHlwaG9vbiBUVmlldyBSRFMgKyBGTSBTdGVyZW8gLyBLTkMxIFRWIFN0YXRpb24gUkRTIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMywKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4MWMsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMCwgMCwgMHgxMCwgOCwgNCB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmFkaW8JPSAxLAoJfSwKCVtCVFRWX0JPQVJEX0xJRkVURUNfOTQxNV0gPSB7CgkJLyogVGltIFL2c3Rlcm11bmR0IDxyb3N0ZXJtQHVuaS1tdWVuc3Rlci5kZT4KCQlpbiBkZS5jb21wLm9zLnVuaXgubGludXguaGFyZHdhcmU6CgkJCW9wdGlvbnMgYnR0diBjYXJkPTAgcGxsPTEgcmFkaW89MSBncGlvbWFzaz0weDE4ZTAKCQkJYXVkaW9tdXg9MHg0NGM3MWYsMHg0NGQ3MWYsMCwweDQ0ZDcxZiwweDQ0ZGZmZgoJCQlvcHRpb25zIHR1bmVyIHR5cGU9NSAqLwoJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyAyMDAwIC9GbHlWaWRlbyBBMi8gTGlmZXRlYyBMVCA5NDE1IFRWIFtMUjkwXSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDE4ZTAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsgMHgwMDAwLDB4MDgwMCwweDEwMDAsMHgxMDAwLDB4MThlMCB9LAoJCQkvKiBGb3IgY2FyZHMgd2l0aCB0ZGE5ODIwL3RkYTk4MjE6CgkJCQkweDAwMDA6IFR1bmVyIG5vcm1hbCBzdGVyZW8KCQkJCTB4MDA4MDogVHVuZXIgQTIgU0FQIChzZWNvbmQgYXVkaW8gcHJvZ3JhbSA9IFp3ZWlrYW5hbHRvbikKCQkJCTB4MDg4MDogVHVuZXIgQTIgc3RlcmVvICovCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9CRVNUQlVZX0VBU1lUVl0gPSB7CgkJLyogTWlndWVsIEFuZ2VsIEFsdmFyZXogPG1hYWNydXpAbmF2ZWdhbGlhLmNvbT4KCQlvbGQgRWFzeSBUViBCVDg0OCB2ZXJzaW9uIChtb2RlbCBDUEgwMzEpICovCgkJLm5hbWUgICAgICAgICAgID0gIkFza2V5IENQSDAzMS8gQkVTVEJVWSBFYXN5IFRWIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSAweEYsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDIsIDAsIDAsIDAsIDEwfSwKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCgkvKiAtLS0tIGNhcmQgMHgzOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9GTFlWSURFT185OEZNXSA9IHsKCQkvKiBHb3Jkb24gSGV5ZG9uIDxnamhleWRvbkBiaWdmb290LmNvbSAoJzk4KSAqLwoJCS5uYW1lICAgICAgICAgICA9ICJMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMywKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgxODAwLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMCwgMCB9LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSA1LAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCQkvKiBUaGlzIGlzIHRoZSB1bHRpbWF0ZSBjaGVhcG8gY2FwdHVyZSBjYXJkCgkJKiBqdXN0IGEgQlQ4NDhBIG9uIGEgc21hbGwgUENCIQoJCSogU3RldmUgSG9zZ29vZCA8c3RldmVAZXF1aWluZXQuY29tPiAqLwoJW0JUVFZfQk9BUkRfR1JBTkRURUNdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJHcmFuZFRlYyAnR3JhbmQgVmlkZW8gQ2FwdHVyZScgKEJ0ODQ4KSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS5zdmhzICAgICAgICAgICA9IDEsCgkJLmdwaW9tYXNrICAgICAgID0gMCwKCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAoJCS50dW5lcl90eXBlICAgICA9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX0FTS0VZX0NQSDA2MF0gPSB7CgkJLyogRGFuaWVsIEhlcnJpbmd0b24gPGRhbmllbC5oZXJyaW5ndG9uQGhvbWUuY29tPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJBc2tleSBDUEgwNjAvIFBob2ViZSBUViBNYXN0ZXIgT25seSAoTm8gRk0pIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4ZTAwLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4ICAgICAgID0geyAweDQwMCwgMHg0MDAsIDB4NDAwLCAweDQwMCwgMHg4MDAsIDB4NDAwIH0sCgkJLm5lZWRzX3R2YXVkaW8gID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfNDAzNkZZNV9OVFNDLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX0FTS0VZX0NQSDAzWF0gPSB7CgkJLyogTWF0dGkgTW90dHVzIDxtb3R0dXNAcGh5c2ljLnV0LmVlPiAqLwoJCS5uYW1lCQk9ICJBc2tleSBDUEgwM3ggVFYgQ2FwdHVyZXIiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMzAwMEYsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDB9LAoJCS5hdWRpb211eCAgICAgICA9IHsgMiwwLDAsMCwxIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gMCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJLyogLS0tLSBjYXJkIDB4M2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfTU0xMDBQQ1RWXSA9IHsKCQkvKiBQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+ICovCgkJLm5hbWUgICAgICAgICAgID0gIk1vZHVsYXIgVGVjaG5vbG9neSBNTTEwMFBDVFYiLAoJCS52aWRlb19pbnB1dHMgICA9IDIsCgkJLmF1ZGlvX2lucHV0cyAgID0gMiwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAtMSwKCQkuZ3Bpb21hc2sgICAgICAgPSAxMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eCAgICAgICA9IHsgMiwgMCwgMCwgMSwgOH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9HTVYxXSA9IHsKCQkvKiBBZHJpYW4gQ294IDxhZHJpYW5AaHVtYm9sZHQuY28udWsgKi8KCQkubmFtZQkJPSAiQUcgRWxlY3Ryb25pY3MgR01WMSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lcgkJPSAtMSwKCQkuc3ZocwkJPSAxLAoJCS5ncGlvbWFzayAgICAgICA9IDB4RiwKCQkubXV4c2VsCQk9IHsgMiwgMn0sCgkJLmF1ZGlvbXV4ICAgICAgID0geyB9LAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9CRVNUQlVZX0VBU1lUVjJdID0gewoJCS8qIE1pZ3VlbCBBbmdlbCBBbHZhcmV6IDxtYWFjcnV6QG5hdmVnYWxpYS5jb20+CgkJbmV3IEVhc3kgVFYgQlQ4NzggdmVyc2lvbiAobW9kZWwgQ1BIMDYxKQoJCXNwZWNpYWwgdGhhbmtzIHRvIEluZm9ybWF0aWNhIE1pZXJlcyBmb3IgcHJvdmlkaW5nIHRoZSBjYXJkICovCgkJLm5hbWUgICAgICAgICAgID0gIkFza2V5IENQSDA2MS8gQkVTVEJVWSBFYXN5IFRWIChidDg3OCkiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDIsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4RkYsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDEsIDAsIDQsIDQsIDl9LAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9BVElfVFZXT05ERVJdID0gewoJCS8qIEx1a2FzIEdlYmF1ZXIgPGdlYnlAdm9sbnkuY3o+ICovCgkJLm5hbWUJCT0gIkFUSSBUVi1Xb25kZXIiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHhmMDNmLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCgkJLmF1ZGlvbXV4CT0geyAweGJmZmUsIDAsIDB4YmZmZiwgMCwgMHhiZmZlfSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDXzQwMDZGTjVfTVVMVElfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCgkvKiAtLS0tIGNhcmQgMHg0MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9BVElfVFZXT05ERVJWRV0gPSB7CgkJLyogTHVrYXMgR2ViYXVlciA8Z2VieUB2b2xueS5jej4gKi8KCQkubmFtZQkJPSAiQVRJIFRWLVdvbmRlciBWRSIsCgkJLnZpZGVvX2lucHV0cwk9IDIsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gLTEsCgkJLmdwaW9tYXNrCT0gMSwKCQkubXV4c2VsCQk9IHsgMiwgMywgMCwgMX0sCgkJLmF1ZGlvbXV4CT0geyAwLCAwLCAxLCAwLCAwfSwKCQkubm9fbXNwMzR4eAk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ180MDA2Rk41X01VTFRJX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9GTFlWSURFTzIwMDBdID0gewoJCS8qIERlZUpheSA8ZGVlamF5QHdlc3RlbDkwMC5uZXQgKDIwMDBTKSAqLwoJCS5uYW1lICAgICAgICAgICA9ICJMaWZldmlldyBGbHlWaWRlbyAyMDAwUyBMUjkwIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDMsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzawk9IDB4MThlMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMCwgMX0sCgkJCQkvKiBSYWRpbyBjaGFuZ2VkIGZyb20gMWU4MCB0byAweDgwMCB0byBtYWtlCgkJCQlGbHlWaWRlbzIwMDBTIGluIC5odSBoYXBweSAoZ20pKi8KCQkJCS8qIC1kay0/Pz86IHNldCBtdXRlPTB4MTgwMCBmb3IgdGRhOTg3NGggZGF1Z2h0ZXJib2FyZCAqLwoJCS5hdWRpb211eAk9IHsgMHgwMDAwLDB4MDgwMCwweDEwMDAsMHgxMDAwLDB4MTgwMCwgMHgxMDgwIH0sCgkJLmF1ZGlvX2hvb2sJPSBmdjIwMDBzX2F1ZGlvLAoJCS5ub19tc3AzNHh4CT0gMSwKCQkubm9fdGRhOTg3NQk9IDEsCgkJLm5lZWRzX3R2YXVkaW8gID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gNSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9URVJSQVRWQUxVRVJdID0gewoJCS5uYW1lCQk9ICJUZXJyYXRlYyBUVmFsdWVSYWRpbyIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweGZmZmYwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4CT0geyAweDUwMCwgMHg1MDAsIDB4MzAwLCAweDkwMCwgMHg5MDB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmFkaW8JPSAxLAoJfSwKCVtCVFRWX0JPQVJEX0dWQkNUVjRQQ0ldID0gewoJCS8qIFRBTkFLQSBLZWkgPHBlZzAwNjI1QG5pZnR5LmNvbT4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiSU9EQVRBIEdWLUJDVFY0L1BDSSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAxMGYwMCwKCQkubXV4c2VsICAgICAgICAgPSB7MiwgMywgMCwgMH0sCgkJLmF1ZGlvbXV4ICAgICAgID0gezB4MTAwMDAsIDAsIDB4MTAwMDAsIDAsIDAsIDB9LAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1NIQVJQXzJVNUpGNTU0MF9OVFNDLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5hdWRpb19ob29rICAgICA9IGd2YmN0djNwY2lfYXVkaW8sCgl9LAoKCS8qIC0tLS0gY2FyZCAweDQ0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiM0RmeCBWb29kb29UViBGTSAoRXVybyksIFZvb2Rvb1RWIDIwMCAoVVNBKSIsCgkJLyogdHJ5ICJpbnNtb2QgbXNwMzQwMCBzaW1wbGU9MCIgaWYgeW91IGhhdmUKCQkqIHNvdW5kIHByb2JsZW1zIHdpdGggdGhpcyBjYXJkLiAqLwoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IC0xLAoJCS5ncGlvbWFzayAgICAgICA9IDB4NGY4YTAwLAoJCS8qIDB4MTAwMDAwOiAxPU1TUCBlbmFibGVkICgwPWRpc2FibGUgYWdhaW4pCgkJKiAweDAxMDAwMDogQ29ubmVjdGVkIHRvICJTMCIgb24gdGRhOTg4MCAoMD1QYWwvQkcsIDE9TlRTQykgKi8KCQkuYXVkaW9tdXggICAgICAgPSB7MHg5NDdmZmYsIDB4OTg3ZmZmLDB4OTQ3ZmZmLDB4OTQ3ZmZmLCAweDk0N2ZmZn0sCgkJLyogdHZ0dW5lciwgcmFkaW8sICAgZXh0ZXJuYWwsaW50ZXJuYWwsIG11dGUsICBzdGVyZW8KCQkqIHR1bmVyLCBDb21wb3NpdCwgU1ZpZCwgQ29tcG9zaXQtb24tU3ZpZC1hZGFwdGVyICovCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzICwwICwxfSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9NVDIwMzIsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnBsbAkJPSBQTExfMjgsCgkJLmhhc19yYWRpbwk9IDEsCgl9LAoJW0JUVFZfQk9BUkRfQUlNTVNdID0gewoJCS8qIFBoaWxpcCBCbHVuZGVsbCA8cGJAbmV4dXMuY28udWs+ICovCgkJLm5hbWUgICAgICAgICAgID0gIkFjdGl2ZSBJbWFnaW5nIEFJTU1TIiwKCQkudmlkZW9faW5wdXRzICAgPSAxLAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnR1bmVyX3R5cGUgICAgID0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiB9LAoJCS5ncGlvbWFzayAgICAgICA9IDAKCX0sCglbQlRUVl9CT0FSRF9QVl9CVDg3OFBfUExVU10gPSB7CgkJLyogVG9tYXN6IFB5cmEgPGhlbGxmaXJlQHNlZGV6LmlxLnBsPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuNEMsOEUpIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDQsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDE1LAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCgkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAxMSwgNywgMTMsIDB9LCAvKiBUViBhbmQgUmFkaW8gd2l0aCBzYW1lIEdQSU8gISAqLwoJCS5uZWVkc190dmF1ZGlvICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IDI1LAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmVtb3RlICAgICA9IDEsCgkJLyogR1BJTyB3aXJpbmc6CgkJCUdQSU8wOiBVNC5BMCAoaGVmNDA1MmJ0KQoJCQlHUElPMTogVTQuQTEKCQkJR1BJTzI6IFU0LkExIChzZWNvbmQgaGVmNDA1MmJ0KQoJCQlHUElPMzogVTQubkVOLCBVNS5BMCwgQTUubkVOCgkJCUdQSU84LTE1OiB2cmQ4NjZiID8KCQkqLwoJfSwKCVtCVFRWX0JPQVJEX0ZMWVZJREVPOThFWl0gPSB7CgkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4RVogKGNhcHR1cmUgb25seSkgTFI1MSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIJCT0gLTEsCgkJLnN2aHMJCT0gMiwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sIC8qIEFWMSwgQVYyLCBTVkhTLCBDVmlkIGFkYXB0ZXIgb24gU1ZIUyAqLwoJCS5wbGwJCT0gUExMXzI4LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCgkvKiAtLS0tIGNhcmQgMHg0OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9QVl9CVDg3OFBfOUJdID0gewoJCS8qIERhcml1c3ogS293YWxld3NraSA8ZGFyZWtrQGF1dG9tZXgucGw+ICovCgkJLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCs5QiAoUGxheVRWIFBybyByZXYuOUIgRk0rTklDQU0pIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4M2YsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuYXVkaW9tdXgJPSB7IDB4MDEsIDB4MDAsIDB4MDMsIDB4MDMsIDB4MDksIDB4MDIgfSwKCQkubmVlZHNfdHZhdWRpbyAgPSAxLAoJCS5ub19tc3AzNHh4CT0gMSwKCQkubm9fdGRhOTg3NQk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSA1LAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5hdWRpb19ob29rCT0gcHZidDg3OHA5Yl9hdWRpbywgLyogTm90ZTogbm90IGFsbCBjYXJkcyBoYXZlIHN0ZXJlbyAqLwoJCS5oYXNfcmFkaW8JPSAxLCAgLyogTm90ZTogbm90IGFsbCBjYXJkcyBoYXZlIHJhZGlvICovCgkJLmhhc19yZW1vdGUgICAgID0gMSwKCQkvKiBHUElPIHdpcmluZzoKCQkJR1BJTzA6IEEwIGhlZjQwNTIKCQkJR1BJTzE6IEExIGhlZjQwNTIKCQkJR1BJTzM6IG5FTiBoZWY0MDUyCgkJCUdQSU84LTE1OiB2cmQ4NjZiCgkJCUdQSU8yMCwyMiwyMzogUjMwLFIyOSxSMjgKCQkqLwoJfSwKCVtCVFRWX0JPQVJEX1NFTlNPUkFZMzExXSA9IHsKCQkvKiBDbGF5IEt1bnogPGNrdW56QG1haWwuYXJjLm5hc2EuZ292PiAqLwoJCS8qIHlvdSBtdXN0IGp1bXBlciBKUDUgZm9yIHRoZSBjYXJkIHRvIHdvcmsgKi8KCQkubmFtZSAgICAgICAgICAgPSAiU2Vuc29yYXkgMzExIiwKCQkudmlkZW9faW5wdXRzICAgPSA1LAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnN2aHMgICAgICAgICAgID0gNCwKCQkuZ3Bpb21hc2sgICAgICAgPSAwLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCwgMH0sCgkJLmF1ZGlvbXV4ICAgICAgID0geyAwIH0sCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9SVjYwNV0gPSB7CgkJLyogTWlndWVsIEZyZWl0YXMgPG1pZ3VlbEBjZXR1Yy5wdWMtcmlvLmJyPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJSZW1vdGVWaXNpb24gTVggKFJWNjA1KSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMTYsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSAtMSwKCQkuc3ZocyAgICAgICAgICAgPSAtMSwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAoJCS5ncGlvbWFzazIgICAgICA9IDB4MDdmZiwKCQkubXV4c2VsICAgICAgICAgPSB7IDB4MzMsIDB4MTMsIDB4MjMsIDB4NDMsIDB4ZjMsIDB4NzMsIDB4ZTMsIDB4MDMsCgkJCQkweGQzLCAweGIzLCAweGMzLCAweDYzLCAweDkzLCAweDUzLCAweDgzLCAweGEzIH0sCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS50dW5lcl90eXBlICAgICA9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5tdXhzZWxfaG9vayAgICA9IHJ2NjA1X211eHNlbCwKCX0sCglbQlRUVl9CT0FSRF9QT1dFUkNMUl9NVFY4NzhdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJQb3dlcmNvbG9yIE1UVjg3OC8gTVRWODc4Ui8gTVRWODc4RiIsCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAyLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgxQzgwMEYsICAvKiBCaXQwLTI6IEF1ZGlvIHNlbGVjdCwgOC0xMjpyZW1vdGUgY29udHJvbCAxNDpyZW1vdGUgdmFsaWQgMTU6cmVtb3RlIHJlc2V0ICovCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAxLCAxLCB9LAoJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMSwgMiwgMiwgNCB9LAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnBsbAkJPSBQTExfMjgsCgkJLmhhc19yYWRpbwk9IDEsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDRjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1dJTkRWUl0gPSB7CgkJLyogTWFzYWtpIFN1enVraSA8bWFzYWtpQGJ0cmVlLm9yZz4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiQ2Fub3B1cyBXaW5EVlIgUENJIChDT01QQVEgUHJlc2FyaW8gMzUyNEpQLCA1MTEySlApIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4MTQwMDA3LAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAoJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMSwgMiwgMywgNCwgMCB9LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuYXVkaW9faG9vayAgICAgPSB3aW5kdnJfYXVkaW8sCgl9LAoJW0JUVFZfQk9BUkRfR1JBTkRURUNfTVVMVEldID0gewoJCS5uYW1lICAgICAgICAgICA9ICJHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIENhcmQgKEJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS5zdmhzICAgICAgICAgICA9IC0xLAoJCS5ncGlvbWFzayAgICAgICA9IDAsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCgkJLmF1ZGlvbXV4ICAgICAgID0geyAwIH0sCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9LV09STERdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJKZXR3YXkgVFYvQ2FwdHVyZSBKVy1UVjg3OC1GQkssIEt3b3JsZCBLVy1UVjg3OFJGIiwKCQkudmlkZW9faW5wdXRzICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICA9IDMsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDcsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sICAgLyogVHVuZXIsIFNWaWQsIFNWSFMsIFNWaWQgdG8gU1ZIUyBjb25uZWN0b3IgKi8KCQkuYXVkaW9tdXggICAgICAgPSB7IDAgLDAgLDQsIDQsNCw0fSwvKiBZZXMsIHRoaXMgdHVuZXIgdXNlcyB0aGUgc2FtZSBhdWRpbyBvdXRwdXQgZm9yIFRWIGFuZCBGTSByYWRpbyEKCQkJCQkJKiBUaGlzIGNhcmQgbGFja3MgZXh0ZXJuYWwgQXVkaW8gSW4sIHNvIHdlIG11dGUgaXQgb24gRXh0LiAmIEludC4KCQkJCQkJKiBUaGUgUENCIGNhbiB0YWtlIGEgc2J4MTYzNy9zYngxNjczLCB3aXJpbmcgdW5rbm93bi4KCQkJCQkJKiBUaGlzIGNhcmQgbGFja3MgUENJIHN1YnN5c3RlbSBJRCwgc2lnaC4KCQkJCQkJKiBhdWRpb211eD0xOiBsb3dlciB2b2x1bWUsIDIrMzogbXV0ZQoJCQkJCQkqIGJ0d2luY2FwIHVzZXMgMHg4MDAwMC8weDgwMDAzCgkJCQkJCSovCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSA1LAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS8qIFNhbXN1bmcgVENQQTkwOTVQQzI3QSAoQkcrREspLCBwaGlsaXBzIGNvbXBhdGlibGUsIHcvRk0sIHN0ZXJlbyBhbmQKCQlyYWRpbyBzaWduYWwgc3RyZW5ndGggaW5kaWNhdG9ycyB3b3JrIGZpbmUuICovCgkJLmhhc19yYWRpbwk9IDEsCgkJLyogR1BJTyBJbmZvOgoJCQlHUElPMCwxOiAgIEhFRjQwNTIgQTAsQTEKCQkJR1BJTzI6ICAgICBIRUY0MDUyIG5FTkFCTEUKCQkJR1BJTzMtNzogICBuLmMuCgkJCUdQSU84LTEzOiAgSVJEQzM1NyBkYXRhMC01IChkYXRhNiBuLmMuID8pIFtjaGlwIG5vdCBwcmVzZW50IG9uIG15IGNhcmRdCgkJCUdQSU8xNCwxNTogPz8KCQkJR1BJTzE2LTIxOiBuLmMuCgkJCUdQSU8yMiwyMzogPz8KCQkJPz8gICAgICAgOiBtdHU4YjU2ZXAgbWljcm9jb250cm9sbGVyIGZvciBJUiAoR1BJTyB3aXJpbmcgdW5rbm93bikqLwoJfSwKCVtCVFRWX0JPQVJEX0RTUF9UQ1ZJREVPXSA9IHsKCQkvKiBBcnRodXIgVGV0emxhZmYtRGVhcywgRFNQIERlc2lnbiBMdGQgPHNvZnR3YXJlQGRzcGRlc2lnbi5jb20+ICovCgkJLm5hbWUgICAgICAgICAgID0gIkRTUCBEZXNpZ24gVENWSURFTyIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuc3ZocyAgICAgICAgICAgPSAtMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJCS8qIC0tLS0gY2FyZCAweDUwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0hBVVBQQVVHRVBWUl0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UViBQVlIiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxLCAxfSwKCQkubmVlZHNfdHZhdWRpbyAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCgkJLmdwaW9tYXNrICAgICAgID0gNywKCQkuYXVkaW9tdXggICAgICAgPSB7N30sCgl9LAoJW0JUVFZfQk9BUkRfR1ZCQ1RWNVBDSV0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNS9QQ0kiLAoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwZjBmODAsCgkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDB9LAoJCS5hdWRpb211eCAgICAgICA9IHsweDAzMDAwMCwgMHgwMTAwMDAsIDAsIDAsIDB4MDIwMDAwLCAwfSwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuYXVkaW9faG9vayAgICAgPSBndmJjdHY1cGNpX2F1ZGlvLAoJCS5oYXNfcmFkaW8gICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfT1NQUkVZMXgwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMC8xNTAgKDg3OCkiLCAvKiAweDEoMnwzKS00NUM2LUMxICovCgkJLnZpZGVvX2lucHV0cyAgID0gNCwgICAgICAgICAgICAgICAgICAvKiBpZC1pbnB1dHMtY2xvY2sgKi8KCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS5zdmhzICAgICAgICAgICA9IDMsCgkJLm11eHNlbCAgICAgICAgID0geyAzLCAyLCAwLCAxIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX09TUFJFWTF4MF84NDhdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAwLzE1MCAoODQ4KSIsIC8qIDB4MDQtNTRDMC1DMSAmIG9sZGVyIGJvYXJkcyAqLwoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSAtMSwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSB9LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCX0sCgoJCS8qIC0tLS0gY2FyZCAweDU0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX09TUFJFWTEwMV84NDhdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxICg4NDgpIiwgLyogMHgwNS00MEMwLUMxICovCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS5zdmhzICAgICAgICAgICA9IDEsCgkJLm11eHNlbCAgICAgICAgID0geyAzLCAxIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX09TUFJFWTF4MV0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDEvMTUxIiwgICAgICAgLyogMHgxKDR8NSktMDAwNC1DNCAqLwoJCS52aWRlb19pbnB1dHMgICA9IDEsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSAtMSwKCQkuc3ZocyAgICAgICAgICAgPSAtMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDAgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfT1NQUkVZMXgxX1NWSURdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxLzE1MSB3LyBzdmlkIiwgIC8qIDB4KDE2fDE3fDIwKS0wMEM0LUMxICovCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS5zdmhzICAgICAgICAgICA9IDEsCgkJLm11eHNlbCAgICAgICAgID0geyAwLCAxIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX09TUFJFWTJ4eF0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAvMjAxLzI1MC8yNTEiLCAgLyogMHgxKDh8OXxFfEYpLTAwMDQtQzQgKi8KCQkudmlkZW9faW5wdXRzICAgPSAxLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnN2aHMgICAgICAgICAgID0gLTEsCgkJLm11eHNlbCAgICAgICAgID0geyAwIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgl9LAoKCQkvKiAtLS0tIGNhcmQgMHg1OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9PU1BSRVkyeDBfU1ZJRF0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAvMjUwIiwgICAvKiAweDEoQXxCKS0wMEM0LUMxICovCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS5zdmhzICAgICAgICAgICA9IDEsCgkJLm11eHNlbCAgICAgICAgID0geyAwLCAxIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfT1NQUkVZMngwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIxMC8yMjAiLCAgIC8qIDB4MShBfEIpLTA0QzAtQzEgKi8KCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnN2aHMgICAgICAgICAgID0gMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9PU1BSRVk1MDBdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgNTAwIiwgICAvKiA1MDAgKi8KCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnN2aHMgICAgICAgICAgID0gMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfT1NQUkVZNTQwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDU0MCIsICAgLyogNTQwICovCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJI2lmIDAgLyogVE9ETyAuLi4gKi8KCQkuc3ZocyAgICAgICAgICAgPSBPU1BSRVk1NDBfU1ZJRF9BTkFMT0csCgkJLm11eHNlbCAgICAgICAgID0geyAgICAgICBbT1NQUkVZNTQwX0NPTVBfQU5BTE9HXSA9IDIsCgkJCQkJW09TUFJFWTU0MF9TVklEX0FOQUxPR10gPSAzLCB9LAoJI2VuZGlmCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJI2lmIDAgLyogVE9ETyAuLi4gKi8KCQkubXV4c2VsX2hvb2sgICAgPSBvc3ByZXlfNTQwX211eHNlbCwKCQkucGljdHVyZV9ob29rICAgPSBvc3ByZXlfNTQwX3NldF9waWN0dXJlLAoJI2VuZGlmCgl9LAoKCQkvKiAtLS0tIGNhcmQgMHg1QyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9PU1BSRVkyMDAwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIwMDAiLCAgLyogMjAwMCAqLwoJCS52aWRlb19pbnB1dHMgICA9IDIsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAtMSwKCQkuc3ZocyAgICAgICAgICAgPSAxLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLCAgICAgIC8qIG11c3QgYXZvaWQsIGNvbmZsaWN0cyB3aXRoIHRoZSBidDg2MCAqLwoJfSwKCVtCVFRWX0JPQVJEX0lEU19FQUdMRV0gPSB7CgkJLyogTSBHIEJlcmJlcmljaCA8YmVyYmVyaWNAZm9yd2lzcy51bmktcGFzc2F1LmRlPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJJRFMgRWFnbGUiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSAtMSwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSAtMSwKCQkuZ3Bpb21hc2sgICAgICAgPSAwLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAoJCS5tdXhzZWxfaG9vayAgICA9IGVhZ2xlX211eHNlbCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJfSwKCVtCVFRWX0JPQVJEX1BJTk5BQ0xFU0FUXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiUGlubmFjbGUgUENUViBTYXQiLAoJCS52aWRlb19pbnB1dHMgICA9IDIsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS50dW5lcl90eXBlICAgICA9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMywgMCwgMSwgMn0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS5ub19ncGlvaXJxICAgICA9IDEsCgkJLmhhc19kdmIgICAgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9GT1JNQUNfUFJPVFZdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJGb3JtYWMgUHJvVFYgSUkgKGJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMywKCQkuZ3Bpb21hc2sgICAgICAgPSAyLAoJCS8qIFRWLCBDb21wMSwgQ29tcG9zaXRlIG92ZXIgU1ZJRCBjb24sIFNWSUQgKi8KCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eCAgICAgICA9IHsgMiwgMiwgMCwgMCwgMCB9LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkuaGFzX3JhZGlvICAgICAgPSAxLAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJLyogc291bmQgcm91dGluZzoKCQlHUElPPTB4MDAsMHgwMSwweDAzOiBtdXRlICg/KQoJCTB4MDI6IGJvdGggVFYgYW5kIHJhZGlvICh0dW5lcjogRk0xMjE2L0kpCgkJVGhlIGNhcmQgaGFzIG9uYm9hcmQgYXVkaW8gY29ubmVjdG9ycyBsYWJlbGVkICJjZHJvbSIgYW5kICJib2FyZCIsCgkJbm90IHNvbGRlcmVkIGhlcmUsIHRob3VnaCB1bmtub3duIHdpcmluZy4KCQlDYXJkIGxhY2tzOiBleHRlcm5hbCBhdWRpbyBpbiwgcGNpIHN1YnN5c3RlbSBpZC4KCSovCgl9LAoKCQkvKiAtLS0tIGNhcmQgMHg2MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9NQUNIVFZdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJNYWNoVFYiLAoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IC0xLAoJCS5ncGlvbWFzayAgICAgICA9IDcsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDMsIDR9LAoJCS5uZWVkc190dmF1ZGlvICA9IDEsCgkJLnR1bmVyX3R5cGUgICAgID0gNSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgl9LAoJW0JUVFZfQk9BUkRfRVVSRVNZU19QSUNPTE9dID0gewoJCS5uYW1lICAgICAgICAgICA9ICJFdXJlc3lzIFBpY29sbyIsCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDAsIDF9LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9QVjE1MF0gPSB7CgkJLyogTHVjIFZhbiBIb2V5bGFuZHQgPGx1Y0BlLW1hZ2ljLmJlPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJQcm9WaWRlbyBQVjE1MCIsIC8qIDB4NGYgKi8KCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnN2aHMgICAgICAgICAgID0gLTEsCgkJLmdwaW9tYXNrICAgICAgID0gMCwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX0FEX1RWSzUwM10gPSB7CgkJLyogSGlyb3NoaSBUYWtla2F3YSA8c2lhbkBiaWcub3IuanA+ICovCgkJLyogVGhpcyBjYXJkIGxhY2tzIHN1YnN5c3RlbSBJRCAqLwoJCS5uYW1lICAgICAgICAgICA9ICJBRC1UVks1MDMiLCAvKiAweDYzICovCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMWU4MDA3LAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAoJCS8qICAgICAgICAgICAgICAgICAgVHVuZXIsIFJhZGlvLCBleHRlcm5hbCwgaW50ZXJuYWwsIG9mZiwgIG9uICovCgkJLmF1ZGlvbXV4ICAgICAgID0geyAweDA4LCAgMHgwZiwgIDB4MGEsICAgICAweDA4LCAgICAgMHgwZiwgMHgwOCB9LAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gMiwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuYXVkaW9faG9vawk9IGFkdHZrNTAzX2F1ZGlvLAoJfSwKCgkJLyogLS0tLSBjYXJkIDB4NjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfSEVSQ1VMRVNfU01fVFZdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJIZXJjdWxlcyBTbWFydCBUViBTdGVyZW8iLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKCQkubmVlZHNfdHZhdWRpbyAgPSAxLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IDUsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLyogTm90ZXM6CgkJLSBjYXJkIGxhY2tzIHN1YnN5c3RlbSBJRAoJCS0gc3RlcmVvIHZhcmlhbnQgdy8gZGF1Z2h0ZXIgYm9hcmQgd2l0aCB0ZGE5ODc0YSBAMHhiMAoJCS0gQXVkaW8gUm91dGluZzoKCQkJYWx3YXlzIGZyb20gdGRhOTg3NCBpbmRlcGVuZGVudCBvZiBHUElPICg/KQoJCQlleHRlcm5hbCBsaW5lIGluOiB1bmtub3duCgkJLSBPdGhlciBjaGlwczogZW03OHAxNTZlbHAgQCAweDk2IChwcm9iYWJseSBJUiByZW1vdGUgY29udHJvbCkKCQkJaGVmNDA1MyAoaW5zdGVhZCA0MDUyKSBmb3IgdW5rbm93biBmdW5jdGlvbgoJCSovCgl9LAoJW0JUVFZfQk9BUkRfUEFDRVRWXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiUGFjZSBUViAmIFJhZGlvIENhcmQiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwgLyogVHVuZXIsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLwoJCS5ncGlvbWFzayAgICAgICA9IDAsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS50dW5lcl90eXBlICAgICA9IDEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yYWRpbyAgICAgID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLyogQnQ4NzgsIEJ0ODMyLCBGSTEyNDYgdHVuZXI7IG5vIHBjaSBzdWJzeXN0ZW0gaWQKCQlvbmx5IGludGVybmFsIGxpbmUgb3V0OiAoNHBpbiBoZWFkZXIpIFJHR0wKCQlSYWRpbyBtdXN0IGJlIGRlY29kZWQgYnkgbXNwMzQxMGQgKG5vdCByb3V0ZWQgdGhyb3VnaCkqLwoJCS8qCgkJLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwgIHRvZG8hCgkJKi8KCX0sCglbQlRUVl9CT0FSRF9JVkMyMDBdID0gewoJCS8qIENocmlzIFdpbGxpbmcgPGNocmlzQHZpc2xhYi51c3lkLmVkdS5hdT4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiSVZDLTIwMCIsCgkJLnZpZGVvX2lucHV0cyAgID0gMSwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS50dW5lcl90eXBlICAgICA9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5zdmhzICAgICAgICAgICA9IC0xLAoJCS5ncGlvbWFzayAgICAgICA9IDB4ZGYsCgkJLm11eHNlbCAgICAgICAgID0geyAyIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJfSwKCVtCVFRWX0JPQVJEX1hHVUFSRF0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIkdyYW5kIFgtR3VhcmQgLyBUcnVzdCA4MTRQQ0kiLAoJCS52aWRlb19pbnB1dHMgICA9IDE2LAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnN2aHMgICAgICAgICAgID0gLTEsCgkJLnR1bmVyX3R5cGUgICAgID0gNCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuZ3Bpb21hc2syICAgICAgPSAweGZmLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwyLDIsMiwgMywzLDMsMywgMSwxLDEsMSwgMCwwLDAsMCB9LAoJCS5tdXhzZWxfaG9vayAgICA9IHhndWFyZF9tdXhzZWwsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJfSwKCgkJLyogLS0tLSBjYXJkIDB4NjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfTkVCVUxBX0RJR0lUVl0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIk5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYiLAoJCS52aWRlb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnN2aHMgICAgICAgICAgID0gLTEsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19kdmIgICAgICAgID0gMSwKCQkubm9fZ3Bpb2lycSAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX1BWMTQzXSA9IHsKCQkvKiBKb3JnZSBCb25jb21wdGUgLSBEVEkyIDxqb3JnZUBkdGkyLm5ldD4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiUHJvVmlkZW8gUFYxNDMiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSAtMSwKCQkuc3ZocyAgICAgICAgICAgPSAtMSwKCQkuZ3Bpb21hc2sgICAgICAgPSAwLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAoJCS5hdWRpb211eCAgICAgICA9IHsgMCB9LAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfVkQwMDlYMV9NSU5JRElOXSA9IHsKCQkvKiBNLktsYWhyQHBoeXRlYy5kZSAqLwoJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIE1pbmlESU4gKGJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IC0xLCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLwoJCS5zdmhzICAgICAgICAgICA9IDMsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAoJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwoJCS5uZWVkc190dmF1ZGlvICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX1ZEMDA5WDFfQ09NQkldID0gewoJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIENvbWJpIChidDg3OCkiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSAtMSwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KCQkuc3ZocyAgICAgICAgICAgPSAzLAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KCQkubmVlZHNfdHZhdWRpbyAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJCS8qIC0tLS0gY2FyZCAweDZjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1ZEMDA5X01JTklESU5dID0gewoJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5IE1pbmlESU4gKGJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMTAsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSAtMSwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KCQkuc3ZocyAgICAgICAgICAgPSA5LAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCgkJLmdwaW9tYXNrMiAgICAgID0gMHgwMywgLyogZ3Bpb21hc2syIGRlZmluZXMgdGhlIGJpdHMgdXNlZCB0byBzd2l0Y2ggYXVkaW8KCQkJCQl2aWEgdGhlIHVwcGVyIG5pYmJsZSBvZiBtdXhzZWwuIGhlcmU6IHVzZWQgZm9yCgkJCQkJeHRlcm5hbCB2aWRlby1tdXggKi8KCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDIsIDB4MTIsIDB4MjIsIDB4MzIsIDB4MDMsIDB4MTMsIDB4MjMsIDB4MzMsIDB4MDEsIDB4MDAgfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KCQkubmVlZHNfdHZhdWRpbyAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9WRDAwOV9DT01CSV0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDkgQ29tYmkgKGJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMTAsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSAtMSwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KCQkuc3ZocyAgICAgICAgICAgPSA5LAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCgkJLmdwaW9tYXNrMiAgICAgID0gMHgwMywgLyogZ3Bpb21hc2syIGRlZmluZXMgdGhlIGJpdHMgdXNlZCB0byBzd2l0Y2ggYXVkaW8KCQkJCQl2aWEgdGhlIHVwcGVyIG5pYmJsZSBvZiBtdXhzZWwuIGhlcmU6IHVzZWQgZm9yCgkJCQkJeHRlcm5hbCB2aWRlby1tdXggKi8KCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDIsIDB4MTIsIDB4MjIsIDB4MzIsIDB4MDMsIDB4MTMsIDB4MjMsIDB4MzMsIDB4MDEsIDB4MDEgfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KCQkubmVlZHNfdHZhdWRpbyAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9JVkMxMDBdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJJVkMtMTAwIiwKCQkudmlkZW9faW5wdXRzICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnR1bmVyX3R5cGUgICAgID0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gLTEsCgkJLmdwaW9tYXNrICAgICAgID0gMHhkZiwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgl9LAoJW0JUVFZfQk9BUkRfSVZDMTIwXSA9IHsKCQkvKiBJVkMtMTIwRyAtIEFsYW4gR2FyZmllbGQgPGFsYW5AZnJvbW9yYml0LmNvbT4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiSVZDLTEyMEciLAoJCS52aWRlb19pbnB1dHMgICA9IDE2LAoJCS5hdWRpb19pbnB1dHMgICA9IDAsICAgIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCgkJLnR1bmVyICAgICAgICAgID0gLTEsICAgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSAtMSwgICAvKiBjYXJkIGhhcyBubyBzdmhzICovCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKCQkJCTB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAgfSwKCQkubXV4c2VsX2hvb2sgICAgPSBpdmMxMjBfbXV4c2VsLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCX0sCgoJCS8qIC0tLS0gY2FyZCAweDcwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1BDX0hEVFZdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJwY0hEVFYgSEQtMjAwMCBUViIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfQVRTQywKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX2R2YiAgICAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX1RXSU5IQU5fRFNUXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiVHdpbmhhbiBEU1QgKyBjbG9uZXMiLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkubm9fdmlkZW8gICAgICAgPSAxLAoJCS5oYXNfZHZiICAgICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfV0lORkFTVFZDMTAwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiV2luZmFzdCBWQzEwMCIsCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLm11eHNlbCAgICAgICAgID0geyAzLCAxLCAxLCAzfSwgLyogVmlkIEluLCBTVmlkIEluLCBWaWQgb3ZlciBTVmlkIGluIGNvbm5lY3RvciAqLwoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgl9LAoJW0JUVFZfQk9BUkRfVEVWNTYwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiVGVwcHJvIFRFVi01NjAvSW50ZXJWaXNpb24gSVYtNTYwIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDMsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDEsIDEsIDEsIDEsIDB9LAoJCS5uZWVkc190dmF1ZGlvICA9IDEsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAoJfSwKCgkJLyogLS0tLSBjYXJkIDB4NzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfU0lNVVNfR1ZDMTEwMF0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIlNJTVVTIEdWQzExMDAiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSAtMSwKCQkuc3ZocyAgICAgICAgICAgPSAtMSwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAyLCAyLCAyfSwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDNGLAoJCS5tdXhzZWxfaG9vayAgICA9IGd2YzExMDBfbXV4c2VsLAoJfSwKCVtCVFRWX0JPQVJEX05HU1RWX1BMVVNdID0gewoJCS8qIENhcmxvcyBTaWx2YSByM3Bla0ByM3Blay5ob21lbGludXgub3JnIHx8IGNhcmQgMHg3NSAqLwoJCS5uYW1lICAgICAgICAgICA9ICJOR1MgTkdTVFYrIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKCQkubXV4c2VsICAgICAgICAgPSB7MiwgMywgMCwgMH0sCgkJLmF1ZGlvbXV4ICAgICAgID0gezAsIDAsIDAsIDAsIDB4MDAwMDAzLCAwfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yZW1vdGUgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9MTUxCVDRdID0gewoJCS8qIGh0dHA6Ly9saW51eG1lZGlhbGFicy5jb20gKi8KCQkubmFtZSAgICAgICAgICAgPSAiTE1MQlQ0IiwKCQkudmlkZW9faW5wdXRzICAgPSA0LCAvKiBJTjEsSU4yLElOMyxJTjQgKi8KCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS5zdmhzICAgICAgICAgICA9IC0xLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLnR1bmVyX3R5cGUgICAgID0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfVEVLUkFNX00yMDVdID0gewoJCS8qIEhlbG1yb29zIEhhcnJpIDxoYXJyaS5oZWxtcm9vc0BwcC5pbmV0LmZpPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJUZWtyYW0gTTIwNSBQUk8iLAoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDY4LAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMX0sCgkJLmF1ZGlvbXV4ICAgICAgID0geyAweDY4LCAweDY4LCAweDYxLCAweDYxLCAweDAwIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJfSwKCgkJLyogLS0tLSBjYXJkIDB4NzggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfQ09OVFZGTUldID0gewoJCS8qIEphdmllciBDZW5kYW4gQXJlcyA8amNlbmRhbkBseWNvcy5lcz4gKi8KCQkvKiBidDg3OCBUViArIEZNIHdpdGhvdXQgc3Vic3lzdGVtIElEICovCgkJLm5hbWUgICAgICAgICAgID0gIkNvbmNlcHRyb25pYyBDT05UVkZNaSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDIsIDMgfSwKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX3JlbW90ZSAgICAgPSAxLAoJCS5oYXNfcmFkaW8gICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVBdID0gewoJCS8qRXJpYyBERUJJRUYgPGRlYmllZkB0ZWxlbXNhLmNvbT4qLwoJCS8qRVVSRVNZUyBQaWNvbG8gVGV0cmEgOiA0IENvbmV4YW50IEZ1c2lvbiA4NzhBLCBubyBhdWRpbywgdmlkZW8gaW5wdXQgc2V0IHdpdGggYW5hbG9nIG11bHRpcGxleGVycyBHUElPIGNvbnRyb2xlZCovCgkJLyogYWRkcyBwaWNvbG9fdGV0cmFfbXV4c2VsKCksIHBpY29sb190ZXRyYV9pbml0KCksIHRoZSBmb2xvd2luZyBkZWNsYXJhdGlvbiBzdHJ1Y3VyZSwgYW5kICNkZWZpbmUgQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUCovCgkJLyoweDc5IGluIGJ0dHYuaCovCgkJLm5hbWUgICAgICAgICAgID0gIkV1cmVzeXMgUGljb2xvIFRldHJhIiwKCQkudmlkZW9faW5wdXRzICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnN2aHMgICAgICAgICAgID0gLTEsCgkJLmdwaW9tYXNrICAgICAgID0gMCwKCQkuZ3Bpb21hc2syICAgICAgPSAweDNDPDwxNiwvKlNldCB0aGUgR1BJT1sxOF0tPkdQSU9bMjFdIGFzIG91dHB1dCBwaW4uPT0+IGRyaXZlIHRoZSB2aWRlbyBpbnB1dHMgdGhyb3VnaCBhbmFsb2cgbXVsdGlwbGV4ZXJzKi8KCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCQkubXV4c2VsICAgICAgICAgPSB7MiwyLDIsMn0sLyo4NzhBIGlucHV0IGlzIGFsd2F5cyBNVVgwLCBzZWUgYWJvdmUuKi8KCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkubXV4c2VsX2hvb2sgICAgPSBwaWNvbG9fdGV0cmFfbXV4c2VsLC8qUmVxdWlyZWQgYXMgaXQgZG9lc24ndCBmb2xsb3cgdGhlIGNsYXNzaWMgaW5wdXQgc2VsZWN0aW9uIHBvbGljeSovCgkJLnR1bmVyX3R5cGUgICAgID0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfU1BJUklUX1RWXSA9IHsKCQkvKiBTcGlyaXQgVFYgVHVuZXIgZnJvbSBodHRwOi8vc3Bpcml0bW9kZW1zLmNvbS5hdSAqLwoJCS8qIFN0YWZmb3JkIEdvb2RzZWxsIDxzdXJnZUBnb2xpYXRoLmhvbWV1bml4Lm9yZz4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiU3Bpcml0IFRWIFR1bmVyIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDAwMDAwMGYsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAxLCAxIH0sCgkJLmF1ZGlvbXV4ICAgICAgID0geyAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX0FWRFZCVF83NzFdID0gewoJCS8qIFdvbGZyYW0gSm9vc3QgPHdvam9AZnJva2FzY2h3ZWkuZGU+ICovCgkJLm5hbWUgICAgICAgICAgID0gIkFWZXJNZWRpYSBBVmVyVFYgRFZCLVQgNzcxIiwKCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5zdmhzICAgICAgICAgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5tdXhzZWwgICAgICAgICA9IHsgMyAsIDMgfSwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLmhhc19kdmIgICAgICAgID0gMSwKCQkubm9fZ3Bpb2lycSAgICAgPSAxLAoJCS5oYXNfcmVtb3RlICAgICA9IDEsCgl9LAoJCS8qIC0tLS0gY2FyZCAweDdjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0FWRFZCVF83NjFdID0gewoJCS8qIE1hdHQgSmVzc29uIDxkdmJAamVzc29uLmVjbGlwc2UuY28udWs+ICovCgkJLyogQmFzZWQgb24gdGhlIE5lYnVsYSBjYXJkIGRhdGEgLSBhZGRlZCByZW1vdGUgYW5kIG5ldyBjYXJkIG51bWJlciAtIEJUVFZfQk9BUkRfQVZEVkJUXzc2MSwgc2VlIGFsc28gaXIta2JkLWdwaW8uYyAqLwoJCS5uYW1lICAgICAgICAgICA9ICJBdmVyTWVkaWEgQXZlclRWIERWQi1UIDc2MSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkudHVuZXIgICAgICAgICAgPSAtMSwKCQkuc3ZocyAgICAgICAgICAgPSAxLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSwgMiwgMH0sIC8qIENvbXAwLCBTLVZpZGVvLCA/LCA/ICovCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfZHZiICAgICAgICA9IDEsCgkJLm5vX2dwaW9pcnEgICAgID0gMSwKCQkuaGFzX3JlbW90ZSAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX01BVFJJWF9WSVNJT05TUV0gPSB7CgkJLyogYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlICovCgkJLm5hbWUgICAgICAgICAgICAgPSAiTUFUUklYIFZpc2lvbiBTaWdtYS1TUSIsCgkJLnZpZGVvX2lucHV0cyAgICAgPSAxNiwKCQkuYXVkaW9faW5wdXRzICAgICA9IDAsCgkJLnR1bmVyICAgICAgICAgICAgPSAtMSwKCQkuc3ZocyAgICAgICAgICAgICA9IC0xLAoJCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAoJCS5tdXhzZWwgICAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAoJCQkJMywgMywgMywgMywgMywgMywgMywgMyB9LAoJCS5tdXhzZWxfaG9vayAgICAgID0gc2lnbWFTUV9tdXhzZWwsCgkJLmF1ZGlvbXV4ICAgICAgICAgPSB7IDAgfSwKCQkubm9fbXNwMzR4eCAgICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgkgID0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX01BVFJJWF9WSVNJT05TTENdID0gewoJCS8qIGFuZHJlLnNjaHdhcnpAbWF0cml4LXZpc2lvbi5kZSAqLwoJCS5uYW1lICAgICAgICAgICAgID0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU0xDIiwKCQkudmlkZW9faW5wdXRzICAgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgICAgPSAwLAoJCS50dW5lciAgICAgICAgICAgID0gLTEsCgkJLnN2aHMgICAgICAgICAgICAgPSAtMSwKCQkuZ3Bpb21hc2sgICAgICAgICA9IDB4MCwKCQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiB9LAoJCS5tdXhzZWxfaG9vayAgICAgID0gc2lnbWFTTENfbXV4c2VsLAoJCS5hdWRpb211eCAgICAgICAgID0geyAwIH0sCgkJLm5vX21zcDM0eHggICAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICAgID0gLTEsCgkJLnR1bmVyX2FkZHIJICA9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgkJLyogQlRUVl9CT0FSRF9BUEFDX1ZJRVdDT01QICovCglbQlRUVl9CT0FSRF9BUEFDX1ZJRVdDT01QXSA9IHsKCQkvKiBBdHRpbGEgS29uZG9yb3MgPGF0dGlsYS5rb25kb3Jvc0BjaGVsbG8uaHU+ICovCgkJLyogYnQ4NzggVFYgKyBGTSAweDAwMDAwMDAwIHN1YnN5c3RlbSBJRCAqLwoJCS5uYW1lICAgICAgICAgICA9ICJBUEFDIFZpZXdjb21wIDg3OChBTUFYKSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gLTEsCgkJLmdwaW9tYXNrICAgICAgID0gMHhGRiwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eCAgICAgICA9IHsgMiwgMCwgMCwgMCwgMTB9LAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmVtb3RlICAgICA9IDEsICAgLyogbWluaXJlbW90ZSB3b3Jrcywgc2VlIGlyLWtiZC1ncGlvLmMgKi8KCQkuaGFzX3JhZGlvICAgICAgPSAxLCAgIC8qIG5vdCBldmVyeSBjYXJkIGhhcyByYWRpbyAqLwoJfSwKCgkJLyogLS0tLSBjYXJkIDB4ODAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFXSA9IHsKCQkvKiBDaHJpcyBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIERWQi1UIExpdGUiLAoJCS50dW5lciAgICAgICAgICA9IC0xLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkubm9fdmlkZW8gICAgICAgPSAxLAoJCS5oYXNfZHZiICAgICAgICA9IDEsCgkJLnR1bmVyX3R5cGUgICAgID0gLTEsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfVkdFQVJfTVlWQ0RdID0gewoJCS8qIFN0ZXZlbiA8cGhvdG9uMzhAcGNob21lLmNvbS50dz4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiVi1HZWFyIE15VkNEIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4M2YsCgkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDB9LAoJCS5hdWRpb211eCAgICAgICA9IHsweDMxLCAweDMxLCAweDMxLCAweDMxLCAweDMxLCAweDMxfSwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX3JhZGlvICAgICAgPSAwLAoJI2lmIDAKCQkuaGFzX3JlbW90ZSAgICAgPSAxLAoJI2VuZGlmCgl9LAoJW0JUVFZfQk9BUkRfU1VQRVJfVFZdID0gewoJCS8qIFJpY2sgQyA8Y3J5cHRkcmFnb29uQGdtYWlsLmNvbT4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiU3VwZXIgVFYgVHVuZXIiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCgkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAweDAwMDAwMSwwLDAsIDB9LAoJCS5uZWVkc190dmF1ZGlvICA9IDEsCgkJLmhhc19yYWRpbyAgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9USUJFVF9DUzE2XSA9IHsKCQkvKiBDaHJpcyBGYW5uaW5nIDx2aWRlbzRsaW51eEBoYXlkb24ubmV0PiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJUaWJldCBTeXN0ZW1zICdQcm9ncmVzcyBEVlInIENTMTYiLAoJCS52aWRlb19pbnB1dHMgICA9IDE2LAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gLTEsCgkJLnN2aHMgICAgICAgICAgID0gLTEsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyIH0sCgkJLnBsbAkJPSBQTExfMjgsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyCT0gMSwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkubXV4c2VsX2hvb2sgICAgPSB0aWJldENTMTZfbXV4c2VsLAoJfSwKCVtCVFRWX0JPQVJEX0tPRElDT01fNDQwMFJdID0gewoJCS8qIEJpbGwgQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPiAqLwoJCS8qCgkJKiBOb3RlIHRoYXQsIGJlY2F1c2Ugb2YgdGhlIGNhcmQncyB3aXJpbmcsIHRoZSAibWFzdGVyIgoJCSogQlQ4NzhBIGNoaXAgKGkuZS4gdGhlIG9uZSB3aGljaCBjb250cm9scyB0aGUgYW5hbG9nIHN3aXRjaAoJCSogYW5kIG11c3QgdXNlIHRoaXMgY2FyZCB0eXBlKSBpcyB0aGUgMm5kIG9uZSBkZXRlY3RlZC4gIFRoZQoJCSogb3RoZXIgMyBjaGlwcyBzaG91bGQgdXNlIGNhcmQgdHlwZSAweDg1LCB3aG9zZSBkZXNjcmlwdGlvbgoJCSogZm9sbG93cyB0aGlzIG9uZS4gIFRoZXJlIGlzIGEgRUVQUk9NIG9uIHRoZSBjYXJkICh3aGljaCBpcwoJCSogY29ubmVjdGVkIHRvIHRoZSBJMkMgb2Ygb25lIG9mIHRob3NlIG90aGVyIGNoaXBzKSwgYnV0IGlzCgkJKiBub3QgY3VycmVudGx5IGhhbmRsZWQuICBUaGVyZSBpcyBhbHNvIGEgZmFjaWxpdHkgZm9yIGEKCQkqICJtb25pdG9yIiwgd2hpY2ggaXMgYWxzbyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkLgoJCSovCgkJLm5hbWUgICAgICAgICAgID0gIktvZGljb20gNDQwMFIgKG1hc3RlcikiLAoJCS52aWRlb19pbnB1dHMJPSAxNiwKCQkuYXVkaW9faW5wdXRzCT0gMCwKCQkudHVuZXIJCT0gLTEsCgkJLnR1bmVyX3R5cGUJPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuc3ZocwkJPSAtMSwKCQkvKiBHUElPIGJpdHMgMC05IHVzZWQgZm9yIGFuYWxvZyBzd2l0Y2g6CgkJKiAgIDAwIC0gMDM6CWNhbWVyYSBzZWxlY3RvcgoJCSogICAwNCAtIDA2OgljaGFubmVsIChjb250cm9sbGVyKSBzZWxlY3RvcgoJCSogICAwNzoJZGF0YSAoMS0+b24sIDAtPm9mZikKCQkqICAgMDg6CXN0cm9iZQoJCSogICAwOToJcmVzZXQKCQkqIGJpdCAxNiBpcyBpbnB1dCBmcm9tIHN5bmMgc2VwYXJhdG9yIGZvciB0aGUgY2hhbm5lbAoJCSovCgkJLmdwaW9tYXNrCT0gMHgwMDAzZmYsCgkJLm5vX2dwaW9pcnEgICAgID0gMSwKCQkubXV4c2VsCQk9IHsgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyB9LAoJCS5wbGwJCT0gUExMXzI4LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkubm9fdGRhNzQzMgk9IDEsCgkJLm5vX3RkYTk4NzUJPSAxLAoJCS5tdXhzZWxfaG9vawk9IGtvZGljb200NDAwcl9tdXhzZWwsCgl9LAoJW0JUVFZfQk9BUkRfS09ESUNPTV80NDAwUl9TTF0gPSB7CgkJLyogQmlsbCBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+ICovCgkJLyogTm90ZSB0aGF0LCBmb3IgcmVhc29ucyB1bmtub3duLCB0aGUgIm1hc3RlciIgQlQ4NzhBIGNoaXAgKGkuZS4gdGhlCgkJKiBvbmUgd2hpY2ggY29udHJvbHMgdGhlIGFuYWxvZyBzd2l0Y2gsIGFuZCBtdXN0IHVzZSB0aGUgY2FyZCB0eXBlKQoJCSogaXMgdGhlIDJuZCBvbmUgZGV0ZWN0ZWQuICBUaGUgb3RoZXIgMyBjaGlwcyBzaG91bGQgdXNlIHRoaXMgY2FyZAoJCSogdHlwZQoJCSovCgkJLm5hbWUJCT0gIktvZGljb20gNDQwMFIgKHNsYXZlKSIsCgkJLnZpZGVvX2lucHV0cwk9IDE2LAoJCS5hdWRpb19pbnB1dHMJPSAwLAoJCS50dW5lcgkJPSAtMSwKCQkudHVuZXJfdHlwZQk9IC0xLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5zdmhzCQk9IC0xLAoJCS5ncGlvbWFzawk9IDB4MDEwMDAwLAoJCS5ub19ncGlvaXJxICAgICA9IDEsCgkJLm11eHNlbAkJPSB7IDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKCQkucGxsCQk9IFBMTF8yOCwKCQkubm9fbXNwMzR4eAk9IDEsCgkJLm5vX3RkYTc0MzIJPSAxLAoJCS5ub190ZGE5ODc1CT0gMSwKCQkubXV4c2VsX2hvb2sJPSBrb2RpY29tNDQwMHJfbXV4c2VsLAoJfSwKCQkvKiAtLS0tIGNhcmQgMHg4Ni0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0FETElOS19SVFYyNF0gPSB7CgkJLyogTWljaGFlbCBIZW5zb24gPG1oZW5zb25AY2xhcml0eXZpLmNvbT4gKi8KCQkvKiBBZGxpbmsgUlRWMjQgd2l0aCBzcGVjaWFsIHVubG9jayBjb2RlcyAqLwoJCS5uYW1lICAgICAgICAgICA9ICJBZGxpbmsgUlRWMjQiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgl9LAoJCS8qIC0tLS0gY2FyZCAweDg3LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEVdID0gewoJCS8qIE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QG0xay5uZXQ+ICovCgkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgNSBMaXRlIiwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0xHX1REVlNfSDA2MkYsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEgfSwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwZTAwMDA3LAoJCS5hdWRpb211eCAgICAgICA9IHsgMHgwMDQwMDAwNSwgMCwgMHgwMDAwMDAwMSwgMCwgMHgwMGMwMDAwNywgMCB9LAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS5oYXNfZHZiICAgICAgICA9IDEsCgl9LAoJCS8qIC0tLS0gY2FyZCAweDg4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfQUNPUlBfWTg3OEZdID0gewoJCS8qIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBicnR1cmJvLmNvbS5icj4gKi8KCQkubmFtZQkJPSAiQWNvcnAgWTg3OEYiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHgwMWZlMDAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eCAgICAgICA9IHsgMHgwMDFlMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCwgMHgwMDIwMDAsIDAgfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9ZTUVDX1RWRjY2VDVfQl9ERkYsCgkJLnR1bmVyX2FkZHIJPSAweGMxID4+MSwKCQkucmFkaW9fYWRkciAgICAgPSAweGMxID4+MSwKCQkuaGFzX3JhZGlvCT0gMSwKCX0sCgkJLyogLS0tLSBjYXJkIDB4ODkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfQ09OQ0VQVFJPTklDX0NUVkZNSTJdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJDb25jZXB0cm9uaWMgQ1RWRk1pIHYyIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDAxYzAwMDcsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCgkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAyLCAzIH0sCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVOQV85NTMzX0RJLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmVtb3RlICAgICA9IDEsCgkJLmhhc19yYWRpbyAgICAgID0gMSwKCX0sCgkJLyogLS0tLSBjYXJkIDB4OGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfUFZfQlQ4NzhQXzJFXSA9IHsKCQkubmFtZSAgICAgICAgICA9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuMkUpIiwKCQkudmlkZW9faW5wdXRzICA9IDUsCgkJLmF1ZGlvX2lucHV0cyAgPSAxLAoJCS50dW5lciAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICA9IDMsCgkJLmdwaW9tYXNrICAgICAgPSAweDAxZmUwMCwKCQkubXV4c2VsICAgICAgICA9IHsgMiwzLDEsMSwtMSB9LAoJCS5kaWdpdGFsX21vZGUgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKCQkuYXVkaW9tdXggICAgICA9IHsgMHgwMDQwMCwgMHgxMDQwMCwgMHgwNDQwMCwgMHg4MDAwMCwgMHgxMjQwMCwgMHg0NjAwMCAgfSwKCQkubm9fbXNwMzR4eCAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgPSBUVU5FUl9MR19QQUxfRk0sCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yZW1vdGUgICAgPSAxLAoJfSwKCQkvKiAtLS0tIGNhcmQgMHg4YiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9QVl9NNDkwMF0gPSB7CgkJLyogU+lyZ2lvIEZvcnRpZXIgPHNlcmdpb2ZvcnRpZXJAeWFob28uY29tLmJyPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJQcm9saW5rIFBpeGVsVmlldyBQbGF5VFYgTVBFRzIgUFYtTTQ5MDAiLAoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgzZiwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MjEsIDB4MjAsIDB4MjQsIDB4MmMsIDB4MjksIDB4MjkgfSwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9ZTUVDX1RWRl81NTMzTUYsCgkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmFkaW8gICAgICA9IDEsCgkJLmhhc19yZW1vdGUgICAgID0gMSwKCX0sCgkJLyogLS0tLSBjYXJkIDB4OGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfT1NQUkVZNDQwXSAgPSB7CgkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSA0NDAiLAoJCS52aWRlb19pbnB1dHMgICA9IDEsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAtMSwKCQkuc3ZocyAgICAgICAgICAgPSAxLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiB9LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgl9LAoJCS8qIC0tLS0gY2FyZCAweDhkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0FTT1VORF9TS1lFWUVdID0gewoJCS5uYW1lCQk9ICJBc291bmQgU2t5ZXllIFBDVFYiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMTUsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAoJCS5hdWRpb211eAk9IHsyLDAsMCwwLDF9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IDIsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKfTsKCnN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnR0dl9udW1fdHZjYXJkcyA9IEFSUkFZX1NJWkUoYnR0dl90dmNhcmRzKTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpzdGF0aWMgdW5zaWduZWQgY2hhciBlZXByb21fZGF0YVsyNTZdOwoKLyoKICogaWRlbnRpZnkgY2FyZAogKi8Kdm9pZCBfX2RldmluaXQgYnR0dl9pZGNhcmQoc3RydWN0IGJ0dHYgKmJ0dikKewoJdW5zaWduZWQgaW50IGdwaW9iaXRzOwoJaW50IGksdHlwZTsKCXVuc2lnbmVkIHNob3J0IHRtcDsKCgkvKiByZWFkIFBDSSBzdWJzeXN0ZW0gSUQgKi8KCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJ0di0+Yy5wY2ksIFBDSV9TVUJTWVNURU1fSUQsICZ0bXApOwoJYnR2LT5jYXJkaWQgPSB0bXAgPDwgMTY7CglwY2lfcmVhZF9jb25maWdfd29yZChidHYtPmMucGNpLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwgJnRtcCk7CglidHYtPmNhcmRpZCB8PSB0bXA7CgoJaWYgKDAgIT0gYnR2LT5jYXJkaWQgJiYgMHhmZmZmZmZmZiAhPSBidHYtPmNhcmRpZCkgewoJCS8qIGxvb2sgZm9yIHRoZSBjYXJkICovCgkJZm9yICh0eXBlID0gLTEsIGkgPSAwOyBjYXJkc1tpXS5pZCAhPSAwOyBpKyspCgkJCWlmIChjYXJkc1tpXS5pZCAgPT0gYnR2LT5jYXJkaWQpCgkJCQl0eXBlID0gaTsKCgkJaWYgKHR5cGUgIT0gLTEpIHsKCQkJLyogZm91bmQgaXQgKi8KCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBkZXRlY3RlZDogJXMgW2NhcmQ9JWRdLCAiCgkJCSAgICAgICAiUENJIHN1YnN5c3RlbSBJRCBpcyAlMDR4OiUwNHhcbiIsCgkJCSAgICAgICBidHYtPmMubnIsY2FyZHNbdHlwZV0ubmFtZSxjYXJkc1t0eXBlXS5jYXJkbnIsCgkJCSAgICAgICBidHYtPmNhcmRpZCAmIDB4ZmZmZiwKCQkJICAgICAgIChidHYtPmNhcmRpZCA+PiAxNikgJiAweGZmZmYpOwoJCQlidHYtPmMudHlwZSA9IGNhcmRzW3R5cGVdLmNhcmRucjsKCQl9IGVsc2UgewoJCQkvKiA0MDQgKi8KCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBzdWJzeXN0ZW06ICUwNHg6JTA0eCAoVU5LTk9XTilcbiIsCgkJCSAgICAgICBidHYtPmMubnIsIGJ0di0+Y2FyZGlkICYgMHhmZmZmLAoJCQkgICAgICAgKGJ0di0+Y2FyZGlkID4+IDE2KSAmIDB4ZmZmZik7CgkJCXByaW50ayhLRVJOX0RFQlVHICJwbGVhc2UgbWFpbCBpZCwgYm9hcmQgbmFtZSBhbmQgIgoJCQkgICAgICAgInRoZSBjb3JyZWN0IGNhcmQ9IGluc21vZCBvcHRpb24gdG8gdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tXG4iKTsKCQl9Cgl9CgoJLyogbGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBhdXRvZGV0ZWN0ZWQgdHlwZSAqLwoJaWYgKGNhcmRbYnR2LT5jLm5yXSA8IGJ0dHZfbnVtX3R2Y2FyZHMpCgkJYnR2LT5jLnR5cGU9Y2FyZFtidHYtPmMubnJdOwoKCS8qIHByaW50IHdoaWNoIGNhcmQgY29uZmlnIHdlIGFyZSB1c2luZyAqLwoJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiB1c2luZzogJXMgW2NhcmQ9JWQsJXNdXG4iLGJ0di0+Yy5uciwKCSAgICAgICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5hbWUsIGJ0di0+Yy50eXBlLAoJICAgICAgIGNhcmRbYnR2LT5jLm5yXSA8IGJ0dHZfbnVtX3R2Y2FyZHMKCSAgICAgICA/ICJpbnNtb2Qgb3B0aW9uIiA6ICJhdXRvZGV0ZWN0ZWQiKTsKCgkvKiBvdmVyd3JpdGUgZ3BpbyBzdHVmZiA/PyAqLwoJaWYgKFVOU0VUID09IGF1ZGlvYWxsICYmIFVOU0VUID09IGF1ZGlvbXV4WzBdKQoJCXJldHVybjsKCglpZiAoVU5TRVQgIT0gYXVkaW9tdXhbMF0pIHsKCQlncGlvYml0cyA9IDA7CgkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewoJCQlidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmF1ZGlvbXV4W2ldID0gYXVkaW9tdXhbaV07CgkJCWdwaW9iaXRzIHw9IGF1ZGlvbXV4W2ldOwoJCX0KCX0gZWxzZSB7CgkJZ3Bpb2JpdHMgPSBhdWRpb2FsbDsKCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CgkJCWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9tdXhbaV0gPSBhdWRpb2FsbDsKCQl9Cgl9CglidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrID0gKFVOU0VUICE9IGdwaW9tYXNrKSA/IGdwaW9tYXNrIDogZ3Bpb2JpdHM7CglwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IGdwaW8gY29uZmlnIG92ZXJyaWRlOiBtYXNrPTB4JXgsIG11eD0iLAoJICAgICAgIGJ0di0+Yy5ucixidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrKTsKCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKCQlwcmludGsoIiVzMHgleCIsIGkgPyAiLCIgOiAiIiwgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb211eFtpXSk7Cgl9CglwcmludGsoIlxuIik7Cn0KCi8qCiAqIChtb3N0KSBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbnMgZ29lcyBoZXJlCiAqLwoKLyogU29tZSBNb2R1bGFyIFRlY2hub2xvZ3kgY2FyZHMgaGF2ZSBhbiBlZXByb20sIGJ1dCBubyBzdWJzeXN0ZW0gSUQgKi8Kdm9pZCBpZGVudGlmeV9ieV9lZXByb20oc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgY2hhciBlZXByb21fZGF0YVsyNTZdKQp7CglpbnQgdHlwZSA9IC0xOwoKCWlmICgwID09IHN0cm5jbXAoZWVwcm9tX2RhdGEsIkdFVCBNTTIweFBDVFYiLDEzKSkKCQl0eXBlID0gQlRUVl9CT0FSRF9NT0RURUNfMjA1OwoJZWxzZSBpZiAoMCA9PSBzdHJuY21wKGVlcHJvbV9kYXRhKzIwLCJQaWNvbG8iLDcpKQoJCXR5cGUgPSBCVFRWX0JPQVJEX0VVUkVTWVNfUElDT0xPOwoJZWxzZSBpZiAoZWVwcm9tX2RhdGFbMF0gPT0gMHg4NCAmJiBlZXByb21fZGF0YVsyXT09IDApCgkJdHlwZSA9IEJUVFZfQk9BUkRfSEFVUFBBVUdFOyAvKiBvbGQgYnQ4NDggKi8KCglpZiAoLTEgIT0gdHlwZSkgewoJCWJ0di0+Yy50eXBlID0gdHlwZTsKCQlwcmludGsoImJ0dHYlZDogZGV0ZWN0ZWQgYnkgZWVwcm9tOiAlcyBbY2FyZD0lZF1cbiIsCgkJICAgICAgIGJ0di0+Yy5uciwgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5uYW1lLCBidHYtPmMudHlwZSk7Cgl9Cn0KCnN0YXRpYyB2b2lkIGZseXZpZGVvX2dwaW8oc3RydWN0IGJ0dHYgKmJ0dikKewoJaW50IGdwaW8saGFzX3JlbW90ZSxoYXNfcmFkaW8saXNfY2FwdHVyZV9vbmx5LGlzX2xyOTAsaGFzX3RkYTk4MjBfdGRhOTgyMTsKCWludCB0dW5lcj0tMSx0dHlwZTsKCglncGlvX2lub3V0KDB4ZmZmZmZmLCAwKTsKCXVkZWxheSg4KTsgIC8qIHdpdGhvdXQgdGhpcyB3ZSB3b3VsZCBzZWUgdGhlIDB4MTgwMCBtYXNrICovCglncGlvID0gZ3Bpb19yZWFkKCk7CgkvKiBGSVhNRTogbXVzdCByZXN0b3JlIE9VUl9FTiA/Pz8gKi8KCgkvKiBhbGwgY2FyZHMgcHJvdmlkZSBHUElPIGluZm8sIHNvbWUgaGF2ZSBhbiBhZGRpdGlvbmFsIGVlcHJvbQoJICogTFI1MDogR1BJTyBjb2RpbmcgY2FuIGJlIGZvdW5kIGxvd2VyIHJpZ2h0IENQMSAuLiBDUDkKCSAqICAgICAgIENQOT1HUElPMjMgLi4gQ1AxPUdQSU8xNTsgd2hlbiBPUEVOLCB0aGUgY29ycmVzcG9uZGluZyBHUElPIHJlYWRzIDEuCgkgKiAgICAgICBHUElPMTQtMTI6IG4uYy4KCSAqIExSOTA6IEdQOT1HUElPMjMgLi4gR1AxPUdQSU8xNSAocmlnaHQgYWJvdmUgdGhlIGJ0ODc4KQoKCSAqIGxvd2VzdCAzIGJ5dGVzIGFyZSByZW1vdGUgY29udHJvbCBjb2RlcyAobm8gaGFuZHNoYWtlIG5lZWRlZCkKCSAqIHh4eEZGRjogTm8gcmVtb3RlIGNvbnRyb2wgY2hpcCBzb2xkZXJlZAoJICogeHh4RjAwKExSMjYvTFI1MCksIHh4eEZFMChMUjkwKTogUmVtb3RlIGNvbnRyb2wgY2hpcCAoTFZBMDAxIG9yIENGNDUpIHNvbGRlcmVkCgkgKiBOb3RlOiBTb21lIGJpdHMgYXJlIEF1ZGlvX01hc2sgIQoJICovCgl0dHlwZT0oZ3BpbyYweDBmMDAwMCk+PjE2OwoJc3dpdGNoKHR0eXBlKSB7CgljYXNlIDB4MDogdHVuZXI9MjsgLyogTlRTQywgZS5nLiBUUEk4TlNSMTFQICovCgkJYnJlYWs7CgljYXNlIDB4MjogdHVuZXI9Mzk7LyogTEcgTlRTQyAobmV3ZXIgVEFQQyBzZXJpZXMpIFRBUEMtSDcwMVAgKi8KCQlicmVhazsKCWNhc2UgMHg0OiB0dW5lcj01OyAvKiBQaGlsaXBzIFBBTCBUUEk4UFNCMDJQLCBUUEk4UFNCMTJQLCBUUEk4UFNCMTJEIG9yIEZJMTIxNiwgRk0xMjE2ICovCgkJYnJlYWs7CgljYXNlIDB4NjogdHVuZXI9Mzc7LyogTEcgUEFMIChuZXdlciBUQVBDIHNlcmllcykgVEFQQy1HNzAyUCAqLwoJCWJyZWFrOwoJCWNhc2UgMHhDOiB0dW5lcj0zOyAvKiBQaGlsaXBzIFNFQ0FNKCtQQUwpIEZRMTIxNk1FIG9yIEZJMTIxNk1GICovCgkJYnJlYWs7CglkZWZhdWx0OgoJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogRmx5VmlkZW9fZ3BpbzogdW5rbm93biB0dW5lciB0eXBlLlxuIiwgYnR2LT5jLm5yKTsKCX0KCgloYXNfcmVtb3RlICAgICAgICAgID0gICBncGlvICYgMHg4MDAwMDA7CgloYXNfcmFkaW8JICAgID0gICBncGlvICYgMHg0MDAwMDA7CgkvKiAgIHVua25vd24gICAgICAgICAgICAgICAgICAgMHgyMDAwMDA7CgkgKiAgIHVua25vd24yICAgICAgICAgICAgICAgICAgMHgxMDAwMDA7ICovCglpc19jYXB0dXJlX29ubHkgICAgID0gIShncGlvICYgMHgwMDgwMDApOyAvKiBHUElPMTUgKi8KCWhhc190ZGE5ODIwX3RkYTk4MjEgPSAhKGdwaW8gJiAweDAwNDAwMCk7Cglpc19scjkwICAgICAgICAgICAgID0gIShncGlvICYgMHgwMDIwMDApOyAvKiBlbHNlIExSMjYvTFI1MCAoTFIzOC9MUjUxIGYuIGNhcHR1cmUgb25seSkgKi8KCS8qCgkgKiBncGlvICYgMHgwMDEwMDAgICAgb3V0cHV0IGJpdCBmb3IgYXVkaW8gcm91dGluZyAqLwoKCWlmKGlzX2NhcHR1cmVfb25seSkKCQl0dW5lcj00OyAvKiBObyB0dW5lciBwcmVzZW50ICovCgoJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBGbHlWaWRlbyBSYWRpbz0lcyBSZW1vdGVDb250cm9sPSVzIFR1bmVyPSVkIGdwaW89MHglMDZ4XG4iLAoJICAgICAgIGJ0di0+Yy5uciwgaGFzX3JhZGlvPyAieWVzIjoibm8gIiwgaGFzX3JlbW90ZT8gInllcyI6Im5vICIsIHR1bmVyLCBncGlvKTsKCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogRmx5VmlkZW8gIExSOTA9JXMgdGRhOTgyMS90ZGE5ODIwPSVzIGNhcHR1cmVfb25seT0lc1xuIiwKCQlidHYtPmMubnIsIGlzX2xyOTA/InllcyI6Im5vICIsIGhhc190ZGE5ODIwX3RkYTk4MjE/InllcyI6Im5vICIsCgkJaXNfY2FwdHVyZV9vbmx5PyJ5ZXMiOiJubyAiKTsKCglpZih0dW5lciE9IC0xKSAvKiBvbmx5IHNldCBpZiBrbm93biB0dW5lciBhdXRvZGV0ZWN0ZWQsIGVsc2UgbGV0IGluc21vZCBvcHRpb24gdGhyb3VnaCAqLwoJCWJ0di0+dHVuZXJfdHlwZSA9IHR1bmVyOwoJYnR2LT5oYXNfcmFkaW8gPSBoYXNfcmFkaW87CgoJLyogTFI5MCBBdWRpbyBSb3V0aW5nIGlzIGRvbmUgYnkgMiBoZWY0MDUyLCBzbyBBdWRpb19NYXNrIGhhcyA0IGJpdHM6IDB4MDAxYzgwCgkgKiBMUjI2L0xSNTAgb25seSBoYXMgMSBoZWY0MDUyLCBBdWRpb19NYXNrIDB4MDAwYzAwCgkgKiBBdWRpbyBvcHRpb25zOiBmcm9tIHR1bmVyLCBmcm9tIHRkYTk4MjEvdGRhOTgyMShtb25vLHN0ZXJlbyxzYXApLCBmcm9tIHRkYTk4NzQsIGV4dC4sIG11dGUgKi8KCWlmKGhhc190ZGE5ODIwX3RkYTk4MjEpIGJ0di0+YXVkaW9faG9vayA9IGx0OTQxNV9hdWRpbzsKCS8qIHRvZG86IGlmKGhhc190ZGE5ODc0KSBidHYtPmF1ZGlvX2hvb2sgPSBmdjIwMDBzX2F1ZGlvOyAqLwp9CgpzdGF0aWMgaW50IG1pcm9fdHVuZXJtYXBbXSA9IHsgMCw2LDIsMywgICA0LDUsNiwwLCAgMywwLDQsNSwgIDUsMiwxNiwxLAoJCQkgICAgICAgMTQsMiwxNywxLCA0LDEsNCwzLCAgMSwyLDE2LDEsIDQsNCw0LDQgfTsKc3RhdGljIGludCBtaXJvX2ZtdHVuZXJbXSAgPSB7IDAsMCwwLDAsICAgMCwwLDAsMCwgIDAsMCwwLDAsICAwLDAsMCwxLAoJCQkgICAgICAgMSwxLDEsMSwgICAxLDEsMSwwLCAgMCwwLDAsMCwgIDAsMSwwLDAgfTsKCnN0YXRpYyB2b2lkIG1pcm9fcGlubmFjbGVfZ3BpbyhzdHJ1Y3QgYnR0diAqYnR2KQp7CglpbnQgaWQsbXNwLGdwaW87CgljaGFyICppbmZvOwoKCWdwaW9faW5vdXQoMHhmZmZmZmYsIDApOwoJZ3BpbyA9IGdwaW9fcmVhZCgpOwoJaWQgICA9ICgoZ3Bpbz4+MTApICYgNjMpIC0xOwoJbXNwICA9IGJ0dHZfSTJDUmVhZChidHYsIEkyQ19NU1AzNDAwLCAiTVNQMzR4eCIpOwoJaWYgKGlkIDwgMzIpIHsKCQlidHYtPnR1bmVyX3R5cGUgPSBtaXJvX3R1bmVybWFwW2lkXTsKCQlpZiAoMCA9PSAoZ3BpbyAmIDB4MjApKSB7CgkJCWJ0di0+aGFzX3JhZGlvID0gMTsKCQkJaWYgKCFtaXJvX2ZtdHVuZXJbaWRdKSB7CgkJCQlidHYtPmhhc19tYXRjaGJveCA9IDE7CgkJCQlidHYtPm1ib3hfd2UgICAgPSAoMTw8Nik7CgkJCQlidHYtPm1ib3hfbW9zdCAgPSAoMTw8Nyk7CgkJCQlidHYtPm1ib3hfY2xrICAgPSAoMTw8OCk7CgkJCQlidHYtPm1ib3hfZGF0YSAgPSAoMTw8OSk7CgkJCQlidHYtPm1ib3hfbWFzayAgPSAoMTw8Nil8KDE8PDcpfCgxPDw4KXwoMTw8OSk7CgkJCX0KCQl9IGVsc2UgewoJCQlidHYtPmhhc19yYWRpbyA9IDA7CgkJfQoJCWlmICgtMSAhPSBtc3ApIHsKCQkJaWYgKGJ0di0+Yy50eXBlID09IEJUVFZfQk9BUkRfTUlSTykKCQkJCWJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9NSVJPUFJPOwoJCQlpZiAoYnR2LT5jLnR5cGUgPT0gQlRUVl9CT0FSRF9QSU5OQUNMRSkKCQkJCWJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9QSU5OQUNMRVBSTzsKCQl9CgkJcHJpbnRrKEtFUk5fSU5GTwoJCSAgICAgICAiYnR0diVkOiBtaXJvOiBpZD0lZCB0dW5lcj0lZCByYWRpbz0lcyBzdGVyZW89JXNcbiIsCgkJICAgICAgIGJ0di0+Yy5uciwgaWQrMSwgYnR2LT50dW5lcl90eXBlLAoJCSAgICAgICAhYnR2LT5oYXNfcmFkaW8gPyAibm8iIDoKCQkgICAgICAgKGJ0di0+aGFzX21hdGNoYm94ID8gIm1hdGNoYm94IiA6ICJmbXR1bmVyIiksCgkJICAgICAgICgtMSA9PSBtc3ApID8gIm5vIiA6ICJ5ZXMiKTsKCX0gZWxzZSB7CgkJLyogbmV3IGNhcmRzIHdpdGggbWljcm90dW5lIHR1bmVyICovCgkJaWQgPSA2MyAtIGlkOwoJCWJ0di0+aGFzX3JhZGlvID0gMDsKCQlzd2l0Y2ggKGlkKSB7CgkJY2FzZSAxOgoJCQlpbmZvID0gIlBBTCAvIG1vbm8iOwoJCQlicmVhazsKCQljYXNlIDI6CgkJCWluZm8gPSAiUEFMK1NFQ0FNIC8gc3RlcmVvIjsKCQkJYnR2LT5oYXNfcmFkaW8gPSAxOwoJCQlicmVhazsKCQljYXNlIDM6CgkJCWluZm8gPSAiTlRTQyAvIHN0ZXJlbyI7CgkJCWJ0di0+aGFzX3JhZGlvID0gMTsKCQkJYnJlYWs7CgkJY2FzZSA0OgoJCQlpbmZvID0gIlBBTCtTRUNBTSAvIG1vbm8iOwoJCQlicmVhazsKCQljYXNlIDU6CgkJCWluZm8gPSAiTlRTQyAvIG1vbm8iOwoJCQlicmVhazsKCQljYXNlIDY6CgkJCWluZm8gPSAiTlRTQyAvIHN0ZXJlbyI7CgkJCWJyZWFrOwoJCWNhc2UgNzoKCQkJaW5mbyA9ICJQQUwgLyBzdGVyZW8iOwoJCQlicmVhazsKCQlkZWZhdWx0OgoJCQlpbmZvID0gIm9vcHM6IHVua25vd24gY2FyZCI7CgkJCWJyZWFrOwoJCX0KCQlpZiAoLTEgIT0gbXNwKQoJCQlidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfUElOTkFDTEVQUk87CgkJcHJpbnRrKEtFUk5fSU5GTwoJCSAgICAgICAiYnR0diVkOiBwaW5uYWNsZS9tdDogaWQ9JWQgaW5mbz1cIiVzXCIgcmFkaW89JXNcbiIsCgkJICAgICAgIGJ0di0+Yy5uciwgaWQsIGluZm8sIGJ0di0+aGFzX3JhZGlvID8gInllcyIgOiAibm8iKTsKCQlidHYtPnR1bmVyX3R5cGUgID0gMzM7CgkJYnR2LT5waW5uYWNsZV9pZCA9IGlkOwoJfQp9CgovKiBHUElPMjEgICBMOiBCdWZmZXIgYWt0aXYsIEg6IEJ1ZmZlciBpbmFrdGl2ICovCiNkZWZpbmUgTE0xODgyX1NZTkNfRFJJVkUgICAgIDB4MjAwMDAwTAoKc3RhdGljIHZvaWQgaW5pdF9pZHNfZWFnbGUoc3RydWN0IGJ0dHYgKmJ0dikKewoJZ3Bpb19pbm91dCgweGZmZmZmZiwweEZGRkYzNyk7CglncGlvX3dyaXRlKDB4MjAwMDIwKTsKCgkvKiBmbGFzaCBzdHJvYmUgaW52ZXJ0ZXIgPyEgKi8KCWdwaW9fd3JpdGUoMHgyMDAwMjQpOwoKCS8qIHN3aXRjaCBzeW5jIGRyaXZlIG9mZiAqLwoJZ3Bpb19iaXRzKExNMTg4Ml9TWU5DX0RSSVZFLExNMTg4Ml9TWU5DX0RSSVZFKTsKCgkvKiBzZXQgQlQ4NDggbXV4ZWwgdG8gMiAqLwoJYnRhb3IoKDIpPDw1LCB+KDI8PDUpLCBCVDg0OF9JRk9STSk7Cn0KCi8qIE11eHNlbCBoZWxwZXIgZm9yIHRoZSBJRFMgRWFnbGUuCiAqIHRoZSBlYWdsZXMgZG9lcyBub3QgdXNlIHRoZSBzdGFuZGFyZCBtdXhzZWwtYml0cyBidXQKICogaGFzIGl0cyBvd24gbXVsdGlwbGV4ZXIgKi8Kc3RhdGljIHZvaWQgZWFnbGVfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJYnRhb3IoKDIpPDw1LCB+KDM8PDUpLCBCVDg0OF9JRk9STSk7CglncGlvX2JpdHMoMyxidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtpbnB1dCY3XSk7CgogICAgICAgLyogY29tcG9zaXRlICovCiAgICAgICAvKiBzZXQgY2hyb21hIEFEQyB0byBzbGVlcCAqLwogICAgICAgYnRvcihCVDg0OF9BRENfQ19TTEVFUCwgQlQ4NDhfQURDKTsKICAgICAgIC8qIHNldCB0byBjb21wb3NpdGUgdmlkZW8gKi8KICAgICAgIGJ0YW5kKH5CVDg0OF9DT05UUk9MX0NPTVAsIEJUODQ4X0VfQ09OVFJPTCk7CiAgICAgICBidGFuZCh+QlQ4NDhfQ09OVFJPTF9DT01QLCBCVDg0OF9PX0NPTlRST0wpOwoKICAgICAgIC8qIHN3aXRjaCBzeW5jIGRyaXZlIG9mZiAqLwogICAgICAgZ3Bpb19iaXRzKExNMTg4Ml9TWU5DX0RSSVZFLExNMTg4Ml9TWU5DX0RSSVZFKTsKfQoKc3RhdGljIHZvaWQgZ3ZjMTEwMF9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQp7CglzdGF0aWMgY29uc3QgaW50IG1hc2tzW10gPSB7MHgzMCwgMHgwMSwgMHgxMiwgMHgyM307CglncGlvX3dyaXRlKG1hc2tzW2lucHV0JTRdKTsKfQoKLyogTE1MQlQ0eCBpbml0aWFsaXphdGlvbiAtIHRvIGFsbG93IGFjY2VzcyB0byBHUElPIGJpdHMgZm9yIHNlbnNvcnMgaW5wdXQgYW5kCiAgIGFsYXJtcyBvdXRwdXQKCiAgIEdQSU9iaXQgICAgfCAxMCB8IDkgfCA4IHwgNyB8IDYgfCA1IHwgNCB8IDMgfCAyIHwgMSB8IDAgfAogICBhc3NpZ25tZW50IHwgVEkgfCBPM3xJTnh8IE8yfCBPMXxJTjR8SU4zfElOMnxJTjF8ICAgfCAgIHwKCiAgIElOIC0gc2Vuc29yIGlucHV0cywgSU54IC0gc2Vuc29yIGlucHV0cyBhbmQgVEkgWE9SZWQgdG9nZXRoZXIKICAgTzEsTzIsTzMgLSBhbGFybSBvdXRwdXRzIChyZWxheXMpCgogICBPVVQgRU5BQkxFICAgMSAgICAxICAgMCAgLiAxICAxICAgMCAgIDAgLiAwICAgMCAgIDAgICAgMCAgID0gMHg2QzAKCiovCgpzdGF0aWMgdm9pZCBpbml0X2xtbGJ0NHgoc3RydWN0IGJ0dHYgKmJ0dikKewoJcHJpbnRrKEtFUk5fREVCVUcgIkxNTEJUNHggaW5pdFxuIik7CglidHdyaXRlKDB4MDAwMDAwLCBCVDg0OF9HUElPX1JFR19JTlApOwoJZ3Bpb19pbm91dCgweGZmZmZmZiwgMHgwMDA2QzApOwoJZ3Bpb193cml0ZSgweDAwMDAwMCk7Cn0KCnN0YXRpYyB2b2lkIHNpZ21hU1FfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJdW5zaWduZWQgaW50IGlubXV4ID0gaW5wdXQgJSA4OwoJZ3Bpb19pbm91dCggMHhmLCAweGYgKTsKCWdwaW9fYml0cyggMHhmLCBpbm11eCApOwp9CgpzdGF0aWMgdm9pZCBzaWdtYVNMQ19tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQp7Cgl1bnNpZ25lZCBpbnQgaW5tdXggPSBpbnB1dCAlIDQ7CglncGlvX2lub3V0KCAzPDw5LCAzPDw5ICk7CglncGlvX2JpdHMoIDM8PDksIGlubXV4PDw5ICk7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpzdGF0aWMgdm9pZCBidHR2X3Jlc2V0X2F1ZGlvKHN0cnVjdCBidHR2ICpidHYpCnsKCS8qCgkgKiBCVDg3OEEgaGFzIGEgYXVkaW8tcmVzZXQgcmVnaXN0ZXIuCgkgKiAxLiBUaGlzIHJlZ2lzdGVyIGlzIGFuIGF1ZGlvIHJlc2V0IGZ1bmN0aW9uIGJ1dCBpdCBpcyBpbgoJICogICAgZnVuY3Rpb24tMCAodmlkZW8gY2FwdHVyZSkgYWRkcmVzcyBzcGFjZS4KCSAqIDIuIEl0IGlzIGVub3VnaCB0byBkbyB0aGlzIG9uY2UgcGVyIHBvd2VyLXVwIG9mIHRoZSBjYXJkLgoJICogMy4gVGhlcmUgaXMgYSB0eXBvIGluIHRoZSBDb25leGFudCBkb2MgLS0gaXQgaXMgbm90IGF0CgkgKiAgICAweDVCLCBidXQgYXQgMHgwNTguIChCIGlzIGFuIG9kZC1udW1iZXIsIG9idmlvdXNseSBhIHR5cG8hKS4KCSAqIC0tLy9TaHJpa3VtYXIgMDMwNjA5CgkgKi8KCWlmIChidHYtPmlkICE9IDg3OCkKCQlyZXR1cm47CgoJaWYgKGJ0dHZfZGVidWcpCgkJcHJpbnRrKCJidHR2JWQ6IEJUODc4QSBBUkVTRVRcbiIsYnR2LT5jLm5yKTsKCWJ0d3JpdGUoKDE8PDcpLCAweDA1OCk7Cgl1ZGVsYXkoMTApOwoJYnR3cml0ZSggICAgIDAsIDB4MDU4KTsKfQoKLyogaW5pdGlhbGl6YXRpb24gcGFydCBvbmUgLS0gYmVmb3JlIHJlZ2lzdGVyaW5nIGkyYyBidXMgKi8Kdm9pZCBfX2RldmluaXQgYnR0dl9pbml0X2NhcmQxKHN0cnVjdCBidHR2ICpidHYpCnsKCXN3aXRjaCAoYnR2LT5jLnR5cGUpIHsKCWNhc2UgQlRUVl9CT0FSRF9IQVVQUEFVR0U6CgljYXNlIEJUVFZfQk9BUkRfSEFVUFBBVUdFODc4OgoJCWJvb3RfbXNwMzR4eChidHYsNSk7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfVk9PRE9PVFZfRk06CgkJYm9vdF9tc3AzNHh4KGJ0diwyMCk7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfQVZFUk1FRElBOTg6CgkJYm9vdF9tc3AzNHh4KGJ0diwxMSk7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfSEFVUFBBVUdFUFZSOgoJCXB2cl9ib290KGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfVFdJTkhBTl9EU1Q6CgljYXNlIEJUVFZfQk9BUkRfQVZEVkJUXzc3MToKCWNhc2UgQlRUVl9CT0FSRF9QSU5OQUNMRVNBVDoKCQlidHYtPnVzZV9pMmNfaHcgPSAxOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX0FETElOS19SVFYyNDoKCQlpbml0X1JUVjI0KCBidHYgKTsKCQlicmVhazsKCgl9CglpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX2R2YikKCQlidHR2X3Jlc2V0X2F1ZGlvKGJ0dik7Cn0KCi8qIGluaXRpYWxpemF0aW9uIHBhcnQgdHdvIC0tIGFmdGVyIHJlZ2lzdGVyaW5nIGkyYyBidXMgKi8Kdm9pZCBfX2RldmluaXQgYnR0dl9pbml0X2NhcmQyKHN0cnVjdCBidHR2ICpidHYpCnsKCWludCB0ZGE5ODg3OwoJaW50IGFkZHI9QUREUl9VTlNFVDsKCglidHYtPnR1bmVyX3R5cGUgPSAtMTsKCglpZiAoQlRUVl9CT0FSRF9VTktOT1dOID09IGJ0di0+Yy50eXBlKSB7CgkJYnR0dl9yZWFkZWUoYnR2LGVlcHJvbV9kYXRhLDB4YTApOwoJCWlkZW50aWZ5X2J5X2VlcHJvbShidHYsZWVwcm9tX2RhdGEpOwoJfQoKCXN3aXRjaCAoYnR2LT5jLnR5cGUpIHsKCWNhc2UgQlRUVl9CT0FSRF9NSVJPOgoJY2FzZSBCVFRWX0JPQVJEX01JUk9QUk86CgljYXNlIEJUVFZfQk9BUkRfUElOTkFDTEU6CgljYXNlIEJUVFZfQk9BUkRfUElOTkFDTEVQUk86CgkJLyogbWlyby9waW5uYWNsZSAqLwoJCW1pcm9fcGlubmFjbGVfZ3BpbyhidHYpOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX0ZMWVZJREVPXzk4OgoJY2FzZSBCVFRWX0JPQVJEX01BWEk6CgljYXNlIEJUVFZfQk9BUkRfTElGRV9GTFlLSVQ6CgljYXNlIEJUVFZfQk9BUkRfRkxZVklERU86CgljYXNlIEJUVFZfQk9BUkRfVFlQSE9PTl9UVklFVzoKCWNhc2UgQlRUVl9CT0FSRF9DSFJPTk9TX1ZTMjoKCWNhc2UgQlRUVl9CT0FSRF9GTFlWSURFT185OEZNOgoJY2FzZSBCVFRWX0JPQVJEX0ZMWVZJREVPMjAwMDoKCWNhc2UgQlRUVl9CT0FSRF9GTFlWSURFTzk4RVo6CgljYXNlIEJUVFZfQk9BUkRfQ09ORkVSRU5DRVRWOgoJY2FzZSBCVFRWX0JPQVJEX0xJRkVURUNfOTQxNToKCQlmbHl2aWRlb19ncGlvKGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfSEFVUFBBVUdFOgoJY2FzZSBCVFRWX0JPQVJEX0hBVVBQQVVHRTg3ODoKCWNhc2UgQlRUVl9CT0FSRF9IQVVQUEFVR0VQVlI6CgkJLyogcGljayB1cCBzb21lIGNvbmZpZyBpbmZvcyBmcm9tIHRoZSBlZXByb20gKi8KCQlidHR2X3JlYWRlZShidHYsZWVwcm9tX2RhdGEsMHhhMCk7CgkJaGF1cHBhdWdlX2VlcHJvbShidHYpOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX0FWRVJNRURJQTk4OgoJY2FzZSBCVFRWX0JPQVJEX0FWUEhPTkU5ODoKCQlidHR2X3JlYWRlZShidHYsZWVwcm9tX2RhdGEsMHhhMCk7CgkJYXZlcm1lZGlhX2VlcHJvbShidHYpOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX1BYQzIwMDoKCQlpbml0X1BYQzIwMChidHYpOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQOgoJCXBpY29sb190ZXRyYV9pbml0KGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfVkhYOgoJCWJ0di0+aGFzX3JhZGlvICAgID0gMTsKCQlidHYtPmhhc19tYXRjaGJveCA9IDE7CgkJYnR2LT5tYm94X3dlICAgICAgPSAweDIwOwoJCWJ0di0+bWJveF9tb3N0ICAgID0gMDsKCQlidHYtPm1ib3hfY2xrICAgICA9IDB4MDg7CgkJYnR2LT5tYm94X2RhdGEgICAgPSAweDEwOwoJCWJ0di0+bWJveF9tYXNrICAgID0gMHgzODsKCQlicmVhazsKCWNhc2UgQlRUVl9CT0FSRF9WT0JJU19CT09TVEFSOgoJY2FzZSBCVFRWX0JPQVJEX1RFUlJBVFY6CgkJdGVycmF0ZWNfYWN0aXZlX3JhZGlvX3VwZ3JhZGUoYnR2KTsKCQlicmVhazsKCWNhc2UgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxOgoJCWlmIChidHYtPmNhcmRpZCA9PSAweDMwMDIxNDRmKSB7CgkJCWJ0di0+aGFzX3JhZGlvPTE7CgkJCXByaW50aygiYnR0diVkOiByYWRpbyBkZXRlY3RlZCBieSBzdWJzeXN0ZW0gaWQgKENQSDA1eClcbiIsYnR2LT5jLm5yKTsKCQl9CgkJYnJlYWs7CiAgICAgICBjYXNlIEJUVFZfQk9BUkRfU1RCMjoKCQlpZiAoYnR2LT5jYXJkaWQgPT0gMHgzMDYwMTIxYSkgewoJCQkvKiBGaXggdXAgZW50cnkgZm9yIDNERlggVm9vZG9vVFYgMTAwLAoJCQkgICB3aGljaCBpcyBhbiBPRU0gU1RCIGNhcmQgdmFyaWFudC4gKi8KCQkJYnR2LT5oYXNfcmFkaW89MDsKCQkJYnR2LT50dW5lcl90eXBlPVRVTkVSX1RFTUlDX05UU0M7CgkJfQoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTF4MDoKCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkxeDBfODQ4OgoJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTEwMV84NDg6CgljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMXgxOgoJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTF4MV9TVklEOgoJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTJ4eDoKCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkyeDBfU1ZJRDoKCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkyeDA6CgljYXNlIEJUVFZfQk9BUkRfT1NQUkVZNTAwOgoJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTU0MDoKCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkyMDAwOgoJCWJ0dHZfcmVhZGVlKGJ0dixlZXByb21fZGF0YSwweGEwKTsKCQlvc3ByZXlfZWVwcm9tKGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfSURTX0VBR0xFOgoJCWluaXRfaWRzX2VhZ2xlKGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfTU9EVEVDXzIwNToKCQlidHR2X3JlYWRlZShidHYsZWVwcm9tX2RhdGEsMHhhMCk7CgkJbW9kdGVjX2VlcHJvbShidHYpOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX0xNTEJUNDoKCQlpbml0X2xtbGJ0NHgoYnR2KTsKCQlicmVhazsKCWNhc2UgQlRUVl9CT0FSRF9USUJFVF9DUzE2OgoJCXRpYmV0Q1MxNl9pbml0KGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfS09ESUNPTV80NDAwUjoKCQlrb2RpY29tNDQwMHJfaW5pdChidHYpOwoJCWJyZWFrOwoJfQoKCS8qIHBsbCBjb25maWd1cmF0aW9uICovCglpZiAoIShidHYtPmlkPT04NDggJiYgYnR2LT5yZXZpc2lvbj09MHgxMSkpIHsKCQkvKiBkZWZhdWx0cyBmcm9tIGNhcmQgbGlzdCAqLwoJCWlmIChQTExfMjggPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5wbGwpIHsKCQkJYnR2LT5wbGwucGxsX2lmcmVxPTI4NjM2MzYzOwoJCQlidHYtPnBsbC5wbGxfY3J5c3RhbD1CVDg0OF9JRk9STV9YVDA7CgkJfQoJCWlmIChQTExfMzUgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5wbGwpIHsKCQkJYnR2LT5wbGwucGxsX2lmcmVxPTM1NDY4OTUwOwoJCQlidHYtPnBsbC5wbGxfY3J5c3RhbD1CVDg0OF9JRk9STV9YVDE7CgkJfQoJCS8qIGluc21vZCBvcHRpb25zIGNhbiBvdmVycmlkZSAqLwoJCXN3aXRjaCAocGxsW2J0di0+Yy5ucl0pIHsKCQljYXNlIDA6IC8qIG5vbmUgKi8KCQkJYnR2LT5wbGwucGxsX2NyeXN0YWwgPSAwOwoJCQlidHYtPnBsbC5wbGxfaWZyZXEgICA9IDA7CgkJCWJ0di0+cGxsLnBsbF9vZnJlcSAgID0gMDsKCQkJYnJlYWs7CgkJY2FzZSAxOiAvKiAyOCBNSHogKi8KCQljYXNlIDI4OgoJCQlidHYtPnBsbC5wbGxfaWZyZXEgICA9IDI4NjM2MzYzOwoJCQlidHYtPnBsbC5wbGxfb2ZyZXEgICA9IDA7CgkJCWJ0di0+cGxsLnBsbF9jcnlzdGFsID0gQlQ4NDhfSUZPUk1fWFQwOwoJCQlicmVhazsKCQljYXNlIDI6IC8qIDM1IE1IeiAqLwoJCWNhc2UgMzU6CgkJCWJ0di0+cGxsLnBsbF9pZnJlcSAgID0gMzU0Njg5NTA7CgkJCWJ0di0+cGxsLnBsbF9vZnJlcSAgID0gMDsKCQkJYnR2LT5wbGwucGxsX2NyeXN0YWwgPSBCVDg0OF9JRk9STV9YVDE7CgkJCWJyZWFrOwoJCX0KCX0KCWJ0di0+cGxsLnBsbF9jdXJyZW50ID0gLTE7CgoJLyogdHVuZXIgY29uZmlndXJhdGlvbiAoZnJvbSBjYXJkIGxpc3QgLyBhdXRvZGV0ZWN0IC8gaW5zbW9kIG9wdGlvbikgKi8KCWlmIChBRERSX1VOU0VUICE9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfYWRkcikKCQlhZGRyID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl9hZGRyOwoKCWlmIChVTlNFVCAhPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyX3R5cGUpCgkJaWYoVU5TRVQgPT0gYnR2LT50dW5lcl90eXBlKQoJCQlidHYtPnR1bmVyX3R5cGUgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyX3R5cGU7CglpZiAoVU5TRVQgIT0gdHVuZXJbYnR2LT5jLm5yXSkKCQlidHYtPnR1bmVyX3R5cGUgPSB0dW5lcltidHYtPmMubnJdOwoJcHJpbnRrKCJidHR2JWQ6IHVzaW5nIHR1bmVyPSVkXG4iLGJ0di0+Yy5ucixidHYtPnR1bmVyX3R5cGUpOwoKCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQpIHsKCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwoKCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfCBUX0RJR0lUQUxfVFY7CgkJdHVuX3NldHVwLnR5cGUgPSBidHYtPnR1bmVyX3R5cGU7CgkJdHVuX3NldHVwLmFkZHIgPSBhZGRyOwoKCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKCX0KCglpZiAoYnR2LT5waW5uYWNsZV9pZCAhPSBVTlNFVCkgewoJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIEFVRENfQ09ORklHX1BJTk5BQ0xFLAoJCQkJCQkJJmJ0di0+cGlubmFjbGVfaWQpOwoJfQoKCWJ0di0+c3ZocyA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uc3ZoczsKCWlmIChzdmhzW2J0di0+Yy5ucl0gIT0gVU5TRVQpCgkJYnR2LT5zdmhzID0gc3Zoc1tidHYtPmMubnJdOwoJaWYgKHJlbW90ZVtidHYtPmMubnJdICE9IFVOU0VUKQoJCWJ0di0+aGFzX3JlbW90ZSA9IHJlbW90ZVtidHYtPmMubnJdOwoKCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19yYWRpbykKCQlidHYtPmhhc19yYWRpbz0xOwoJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX3JlbW90ZSkKCQlidHYtPmhhc19yZW1vdGU9MTsKCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub19ncGlvaXJxKQoJCWJ0di0+Z3Bpb2lycT0xOwoJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9faG9vaykKCQlidHYtPmF1ZGlvX2hvb2s9YnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb19ob29rOwoKCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmRpZ2l0YWxfbW9kZSA9PSBESUdJVEFMX01PREVfQ0FNRVJBKSB7CgkJLyogZGV0ZWN0IEJ0ODMyIGNoaXAgZm9yIHF1YXJ0enNpZ2h0IGRpZ2l0YWwgY2FtZXJhICovCgkJaWYgKChidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQlQ4MzJfQUxUMSwgIkJ0ODMyIikgPj0wKSB8fAoJCSAgICAoYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0JUODMyX0FMVDIsICJCdDgzMiIpID49MCkpCgkJCWJvb3RfYnQ4MzIoYnR2KTsKCX0KCglpZiAoIWF1dG9sb2FkKQoJCXJldHVybjsKCgkvKiB0cnkgdG8gZGV0ZWN0IGF1ZGlvL2ZhZGVyIGNoaXBzICovCglpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fbXNwMzR4eCAmJgoJICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19NU1AzNDAwLCAiTVNQMzR4eCIpID49MCkKCQlyZXF1ZXN0X21vZHVsZSgibXNwMzQwMCIpOwoKCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm1zcDM0eHhfYWx0ICYmCgkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX01TUDM0MDBfQUxULCAiTVNQMzR4eCAoYWx0ZXJuYXRlIGFkZHJlc3MpIikgPj0wKQoJCXJlcXVlc3RfbW9kdWxlKCJtc3AzNDAwIik7CgoJaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX3RkYTk4NzUgJiYKCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfVERBOTg3NSwgIlREQTk4NzUiKSA+PTApCgkJcmVxdWVzdF9tb2R1bGUoInRkYTk4NzUiKTsKCglpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fdGRhNzQzMiAmJgoJICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19UREE3NDMyLCAiVERBNzQzMiIpID49MCkKCQlyZXF1ZXN0X21vZHVsZSgidGRhNzQzMiIpOwoKCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5lZWRzX3R2YXVkaW8pCgkJcmVxdWVzdF9tb2R1bGUoInR2YXVkaW8iKTsKCgkvKiB0dW5lciBtb2R1bGVzICovCgl0ZGE5ODg3ID0gMDsKCWlmIChidHYtPnBpbm5hY2xlX2lkICE9IFVOU0VUKQoJCXRkYTk4ODcgPSAxOwoJaWYgKDAgPT0gdGRhOTg4NyAmJiAwID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX2R2YiAmJgoJICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19UREE5ODg3LCAiVERBOTg4NyIpID49MCkKCQl0ZGE5ODg3ID0gMTsKCWlmKChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMpIHx8CgkgICAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMykgfHwKCSAgIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfUEhJTElQU19GTTEyNTZfSUgzKSB8fAoJICAgIHRkYTk4ODcpCgkJcmVxdWVzdF9tb2R1bGUoInRkYTk4ODciKTsKCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQpCgkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7Cn0KCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKc3RhdGljIHZvaWQgbW9kdGVjX2VlcHJvbShzdHJ1Y3QgYnR0diAqYnR2KQp7CglpZiggc3RybmNtcCgmKGVlcHJvbV9kYXRhWzB4MWVdKSwiVGVtaWMgNDA2NiBGWTUiLDE0KSA9PTApIHsKCQlidHYtPnR1bmVyX3R5cGU9VFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSTsKCQlwcmludGsoImJ0dHYlZDogTW9kdGVjOiBUdW5lciBhdXRvZGV0ZWN0ZWQgYnkgZWVwcm9tOiAlc1xuIiwKCQkgICAgICAgYnR2LT5jLm5yLCZlZXByb21fZGF0YVsweDFlXSk7Cgl9IGVsc2UgaWYgKHN0cm5jbXAoJihlZXByb21fZGF0YVsweDFlXSksIkFscHMgVFNCQjUiLDEwKSA9PTApIHsKCQlidHYtPnR1bmVyX3R5cGU9VFVORVJfQUxQU19UU0JCNV9QQUxfSTsKCQlwcmludGsoImJ0dHYlZDogTW9kdGVjOiBUdW5lciBhdXRvZGV0ZWN0ZWQgYnkgZWVwcm9tOiAlc1xuIiwKCQkgICAgICAgYnR2LT5jLm5yLCZlZXByb21fZGF0YVsweDFlXSk7Cgl9IGVsc2UgaWYgKHN0cm5jbXAoJihlZXByb21fZGF0YVsweDFlXSksIlBoaWxpcHMgRk0xMjQ2IiwxNCkgPT0wKSB7CgkJYnR2LT50dW5lcl90eXBlPVRVTkVSX1BISUxJUFNfTlRTQzsKCQlwcmludGsoImJ0dHYlZDogTW9kdGVjOiBUdW5lciBhdXRvZGV0ZWN0ZWQgYnkgZWVwcm9tOiAlc1xuIiwKCQkgICAgICAgYnR2LT5jLm5yLCZlZXByb21fZGF0YVsweDFlXSk7Cgl9IGVsc2UgewoJCXByaW50aygiYnR0diVkOiBNb2R0ZWM6IFVua25vd24gVHVuZXJTdHJpbmc6ICVzXG4iLAoJCSAgICAgICBidHYtPmMubnIsJmVlcHJvbV9kYXRhWzB4MWVdKTsKCX0KfQoKc3RhdGljIHZvaWQgX19kZXZpbml0IGhhdXBwYXVnZV9lZXByb20oc3RydWN0IGJ0dHYgKmJ0dikKewoJc3RydWN0IHR2ZWVwcm9tIHR2OwoKCXR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coJmJ0di0+aTJjX2NsaWVudCwgJnR2LCBlZXByb21fZGF0YSk7CglidHYtPnR1bmVyX3R5cGUgPSB0di50dW5lcl90eXBlOwoJYnR2LT5oYXNfcmFkaW8gID0gdHYuaGFzX3JhZGlvOwp9CgpzdGF0aWMgaW50IHRlcnJhdGVjX2FjdGl2ZV9yYWRpb191cGdyYWRlKHN0cnVjdCBidHR2ICpidHYpCnsKCWludCBmcmVxOwoKCWJ0di0+aGFzX3JhZGlvICAgID0gMTsKCWJ0di0+aGFzX21hdGNoYm94ID0gMTsKCWJ0di0+bWJveF93ZSAgICAgID0gMHgxMDsKCWJ0di0+bWJveF9tb3N0ICAgID0gMHgyMDsKCWJ0di0+bWJveF9jbGsgICAgID0gMHgwODsKCWJ0di0+bWJveF9kYXRhICAgID0gMHgwNDsKCWJ0di0+bWJveF9tYXNrICAgID0gMHgzYzsKCglidHYtPm1ib3hfaW93ICAgICA9IDEgPDwgIDg7CglidHYtPm1ib3hfaW9yICAgICA9IDEgPDwgIDk7CglidHYtPm1ib3hfY3NlbCAgICA9IDEgPDwgMTA7CgoJZnJlcT04ODAwMC82Mi41OwoJdGVhNTc1N193cml0ZShidHYsIDUgKiBmcmVxICsgMHgzNTgpOyAvKiB3cml0ZSAweDFlZDggKi8KCWlmICgweDFlZDggPT0gdGVhNTc1N19yZWFkKGJ0dikpIHsKCQlwcmludGsoImJ0dHYlZDogVGVycmF0ZWMgQWN0aXZlIFJhZGlvIFVwZ3JhZGUgZm91bmQuXG4iLAoJCSAgICAgICBidHYtPmMubnIpOwoJCWJ0di0+aGFzX3JhZGlvICAgID0gMTsKCQlidHYtPmhhc19tYXRjaGJveCA9IDE7Cgl9IGVsc2UgewoJCWJ0di0+aGFzX3JhZGlvICAgID0gMDsKCQlidHYtPmhhc19tYXRjaGJveCA9IDA7Cgl9CglyZXR1cm4gMDsKfQoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKgogKiBtaW5pbWFsIGJvb3RzdHJhcCBmb3IgdGhlIFdpblRWL1BWUiAtLSB1cGxvYWQgYWx0ZXJhIGZpcm13YXJlLgogKgogKiBUaGUgaGN3YW1jLnJiZiBmaXJtd2FyZSBmaWxlIGlzIG9uIHRoZSBIYXVwcGF1Z2UgZHJpdmVyIENELiAgSGF2ZQogKiBhIGxvb2sgYXQgUHZyL3B2cjQ1eHh4LkVYRSAoc2VsZi1leHRyYWN0aW5nIHppcCBhcmNoaXZlLCBjYW4gYmUKICogdW5wYWNrZWQgd2l0aCB1bnppcCkuCiAqLwojZGVmaW5lIFBWUl9HUElPX0RFTEFZCQkxMAoKI2RlZmluZSBCVFRWX0FMVF9EQVRBCQkweDAwMDAwMQojZGVmaW5lIEJUVFZfQUxUX0RDTEsJCTB4MTAwMDAwCiNkZWZpbmUgQlRUVl9BTFRfTkNPTkZJRwkweDgwMDAwMAoKc3RhdGljIGludCBfX2RldmluaXQgcHZyX2FsdGVyYV9sb2FkKHN0cnVjdCBidHR2ICpidHYsIHU4ICptaWNybywgdTMyIG1pY3JvbGVuKQp7Cgl1MzIgbjsKCXU4IGJpdHM7CglpbnQgaTsKCglncGlvX2lub3V0KDB4ZmZmZmZmLEJUVFZfQUxUX0RBVEF8QlRUVl9BTFRfRENMS3xCVFRWX0FMVF9OQ09ORklHKTsKCWdwaW9fd3JpdGUoMCk7Cgl1ZGVsYXkoUFZSX0dQSU9fREVMQVkpOwoKCWdwaW9fd3JpdGUoQlRUVl9BTFRfTkNPTkZJRyk7Cgl1ZGVsYXkoUFZSX0dQSU9fREVMQVkpOwoKCWZvciAobiA9IDA7IG4gPCBtaWNyb2xlbjsgbisrKSB7CgkJYml0cyA9IG1pY3JvW25dOwoJCWZvciAoIGkgPSAwIDsgaSA8IDggOyBpKysgKSB7CgkJCWdwaW9fYml0cyhCVFRWX0FMVF9EQ0xLLDApOwoJCQlpZiAoYml0cyAmIDB4MDEpCgkJCQlncGlvX2JpdHMoQlRUVl9BTFRfREFUQSxCVFRWX0FMVF9EQVRBKTsKCQkJZWxzZQoJCQkJZ3Bpb19iaXRzKEJUVFZfQUxUX0RBVEEsMCk7CgkJCWdwaW9fYml0cyhCVFRWX0FMVF9EQ0xLLEJUVFZfQUxUX0RDTEspOwoJCQliaXRzID4+PSAxOwoJCX0KCX0KCWdwaW9fYml0cyhCVFRWX0FMVF9EQ0xLLDApOwoJdWRlbGF5KFBWUl9HUElPX0RFTEFZKTsKCgkvKiBiZWdpbiBBbHRlcmEgaW5pdCBsb29wIChOb3QgbmVjZXNzYXJ5LGJ1dCBkb2Vzbid0IGh1cnQpICovCglmb3IgKGkgPSAwIDsgaSA8IDMwIDsgaSsrKSB7CgkJZ3Bpb19iaXRzKEJUVFZfQUxUX0RDTEssMCk7CgkJZ3Bpb19iaXRzKEJUVFZfQUxUX0RDTEssQlRUVl9BTFRfRENMSyk7Cgl9CglncGlvX2JpdHMoQlRUVl9BTFRfRENMSywwKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IF9fZGV2aW5pdCBwdnJfYm9vdChzdHJ1Y3QgYnR0diAqYnR2KQp7Cgljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OwoJaW50IHJjOwoKCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICJoY3dhbWMucmJmIiwgJmJ0di0+Yy5wY2ktPmRldik7CglpZiAocmMgIT0gMCkgewoJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogbm8gYWx0ZXJhIGZpcm13YXJlIFt2aWEgaG90cGx1Z11cbiIsCgkJICAgICAgIGJ0di0+Yy5ucik7CgkJcmV0dXJuIHJjOwoJfQoJcmMgPSBwdnJfYWx0ZXJhX2xvYWQoYnR2LCBmd19lbnRyeS0+ZGF0YSwgZndfZW50cnktPnNpemUpOwoJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBhbHRlcmEgZmlybXdhcmUgdXBsb2FkICVzXG4iLAoJICAgICAgIGJ0di0+Yy5uciwgKHJjIDwgMCkgPyAiZmFpbGVkIiA6ICJvayIpOwoJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CglyZXR1cm4gcmM7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIHNvbWUgb3NwcmV5IHNwZWNpZmljIHN0dWZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgpzdGF0aWMgdm9pZCBfX2RldmluaXQgb3NwcmV5X2VlcHJvbShzdHJ1Y3QgYnR0diAqYnR2KQp7CiAgICAgICBpbnQgaSA9IDA7CiAgICAgICB1bnNpZ25lZCBjaGFyICplZSA9IGVlcHJvbV9kYXRhOwogICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWwgPSAwOwoKICAgICAgIGlmIChidHYtPmMudHlwZSA9PSAwKSB7CgkgICAgICAgLyogdGhpcyBtaWdodCBiZSBhbiBhbnRpcXVlLi4uIGNoZWNrIGZvciBNTUFDIGxhYmVsIGluIGVlcHJvbSAqLwoJICAgICAgIGlmICgoZWVbMF09PSdNJykgJiYgKGVlWzFdPT0nTScpICYmIChlZVsyXT09J0EnKSAmJiAoZWVbM109PSdDJykpIHsKCQkgICAgICAgdW5zaWduZWQgY2hhciBjaGVja3N1bSA9IDA7CgkJICAgICAgIGZvciAoaSA9MDsgaTwyMTsgaSsrKQoJCQkgICAgICAgY2hlY2tzdW0gKz0gZWVbaV07CgkJICAgICAgIGlmIChjaGVja3N1bSAhPSBlZVsyMV0pCgkJCSAgICAgICByZXR1cm47CgkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkxeDBfODQ4OwoJCSAgICAgICBmb3IgKGkgPSAxMjsgaSA8IDIxOyBpKyspCgkJCSAgICAgICBzZXJpYWwgKj0gMTAsIHNlcmlhbCArPSBlZVtpXSAtICcwJzsKCSAgICAgICB9CiAgICAgICB9IGVsc2UgewoJICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGU7CgkgICAgICAgaW50IG9mZnNldCA9IDQqMTY7CgoJICAgICAgIGZvcig7IG9mZnNldCA8IDgqMTY7IG9mZnNldCArPSAxNikgewoJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBjaGVja3N1bSA9IDA7CgkJICAgICAgIC8qIHZlcmlmeSB0aGUgY2hlY2tzdW0gKi8KCQkgICAgICAgZm9yKGkgPSAwOyBpPDE0OyBpKyspIGNoZWNrc3VtICs9IGVlW2krb2Zmc2V0XTsKCQkJICAgICAgIGNoZWNrc3VtID0gfmNoZWNrc3VtOyAgLyogbm8gaWRlYSB3aHkgKi8KCQkJICAgICAgIGlmICgoKChjaGVja3N1bT4+OCkmMHgwRkYpID09IGVlW29mZnNldCsxNF0pICYmCgkJCQkgICAoKGNoZWNrc3VtICYgMHgwRkYpID09IGVlW29mZnNldCsxNV0pKSB7CgkJCSAgICAgICBicmVhazsKCQkgICAgICAgfQoJICAgICAgIH0KCgkgICAgICAgaWYgKG9mZnNldCA+PSA4KjE2KQoJCSAgICAgICByZXR1cm47CgoJICAgICAgIC8qIGZvdW5kIGEgdmFsaWQgZGVzY3JpcHRvciAqLwoJICAgICAgIHR5cGUgPSAoZWVbb2Zmc2V0KzRdPDw4KSB8IChlZVtvZmZzZXQrNV0pOwoKCSAgICAgICBzd2l0Y2godHlwZSkgewoKCSAgICAgICAvKiA4NDggYmFzZWQgKi8KCSAgICAgICBjYXNlIDB4MDAwNDoKCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTF4MF84NDg7CgkJICAgICAgIGJyZWFrOwoJICAgICAgIGNhc2UgMHgwMDA1OgoJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMTAxXzg0ODsKCQkgICAgICAgYnJlYWs7CgoJICAgICAgIC8qIDg3OCBiYXNlZCAqLwoJICAgICAgIGNhc2UgMHgwMDEyOgoJICAgICAgIGNhc2UgMHgwMDEzOgoJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMXgwOwoJCSAgICAgICBicmVhazsKCSAgICAgICBjYXNlIDB4MDAxNDoKCSAgICAgICBjYXNlIDB4MDAxNToKCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTF4MTsKCQkgICAgICAgYnJlYWs7CgkgICAgICAgY2FzZSAweDAwMTY6CgkgICAgICAgY2FzZSAweDAwMTc6CgkgICAgICAgY2FzZSAweDAwMjA6CgkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkxeDFfU1ZJRDsKCQkgICAgICAgYnJlYWs7CgkgICAgICAgY2FzZSAweDAwMTg6CgkgICAgICAgY2FzZSAweDAwMTk6CgkgICAgICAgY2FzZSAweDAwMUU6CgkgICAgICAgY2FzZSAweDAwMUY6CgkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkyeHg7CgkJICAgICAgIGJyZWFrOwoJICAgICAgIGNhc2UgMHgwMDFBOgoJICAgICAgIGNhc2UgMHgwMDFCOgoJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMngwX1NWSUQ7CgkJICAgICAgIGJyZWFrOwoJICAgICAgIGNhc2UgMHgwMDQwOgoJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZNTAwOwoJCSAgICAgICBicmVhazsKCSAgICAgICBjYXNlIDB4MDA1MDoKCSAgICAgICBjYXNlIDB4MDA1NjoKCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTU0MDsKCQkgICAgICAgLyogYnR0dl9vc3ByZXlfNTQwX2luaXQoYnR2KTsgKi8KCQkgICAgICAgYnJlYWs7CgkgICAgICAgY2FzZSAweDAwNjA6CgkgICAgICAgY2FzZSAweDAwNzA6CgkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkyeDA7CgkJICAgICAgIC8qIGVuYWJsZSBvdXRwdXQgb24gc2VsZWN0IGNvbnRyb2wgbGluZXMgKi8KCQkgICAgICAgZ3Bpb19pbm91dCgweGZmZmZmZiwweDAwMDMwMyk7CgkJICAgICAgIGJyZWFrOwoJICAgICAgIGRlZmF1bHQ6CgkJICAgICAgIC8qIHVua25vd24uLi5sZWF2ZSBnZW5lcmljLCBidXQgZ2V0IHNlcmlhbCAjICovCgkJICAgICAgIGJyZWFrOwoJICAgICAgIH0KCSAgICAgICBzZXJpYWwgPSAgKGVlW29mZnNldCs2XSA8PCAyNCkKCQkgICAgICAgfCAoZWVbb2Zmc2V0KzddIDw8IDE2KQoJCSAgICAgICB8IChlZVtvZmZzZXQrOF0gPDwgIDgpCgkJICAgICAgIHwgKGVlW29mZnNldCs5XSk7CiAgICAgICB9CgogICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBvc3ByZXkgZWVwcm9tOiBjYXJkPSVkIG5hbWU9JXMgc2VyaWFsPSVsZFxuIiwKCSAgICAgIGJ0di0+Yy5uciwgYnR2LT5jLnR5cGUsIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubmFtZSxzZXJpYWwpOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiBBVmVybWVkaWEgc3BlY2lmaWMgc3R1ZmYsIGZyb20gIGJrdHJfY2FyZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKc3RhdGljIGludCB0dW5lcl8wX3RhYmxlW10gPSB7CglUVU5FUl9QSElMSVBTX05UU0MsICBUVU5FUl9QSElMSVBTX1BBTCAvKiBQQUwtQkcqLywKCVRVTkVSX1BISUxJUFNfUEFMLCAgIFRVTkVSX1BISUxJUFNfUEFMIC8qIFBBTC1JKi8sCglUVU5FUl9QSElMSVBTX1BBTCwgICBUVU5FUl9QSElMSVBTX1BBTCwKCVRVTkVSX1BISUxJUFNfU0VDQU0sIFRVTkVSX1BISUxJUFNfU0VDQU0sCglUVU5FUl9QSElMSVBTX1NFQ0FNLCBUVU5FUl9QSElMSVBTX1BBTCwKCVRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszIH07CgpzdGF0aWMgaW50IHR1bmVyXzFfdGFibGVbXSA9IHsKCVRVTkVSX1RFTUlDX05UU0MsICBUVU5FUl9URU1JQ19QQUwsCglUVU5FUl9URU1JQ19QQUwsICAgVFVORVJfVEVNSUNfUEFMLAoJVFVORVJfVEVNSUNfUEFMLCAgIFRVTkVSX1RFTUlDX1BBTCwKCVRVTkVSX1RFTUlDXzQwMTJGWTUsIFRVTkVSX1RFTUlDXzQwMTJGWTUsIC8qIFRVTkVSX1RFTUlDX1NFQ0FNICovCglUVU5FUl9URU1JQ180MDEyRlk1LCBUVU5FUl9URU1JQ19QQUx9OwoKc3RhdGljIHZvaWQgX19kZXZpbml0IGF2ZXJtZWRpYV9lZXByb20oc3RydWN0IGJ0dHYgKmJ0dikKewoJaW50IHR1bmVyX21ha2UsdHVuZXJfdHZfZm0sdHVuZXJfZm9ybWF0LHR1bmVyPTA7CgoJdHVuZXJfbWFrZSAgICAgID0gKGVlcHJvbV9kYXRhWzB4NDFdICYgMHg3KTsKCXR1bmVyX3R2X2ZtICAgICA9IChlZXByb21fZGF0YVsweDQxXSAmIDB4MTgpID4+IDM7Cgl0dW5lcl9mb3JtYXQgICAgPSAoZWVwcm9tX2RhdGFbMHg0Ml0gJiAweGYwKSA+PiA0OwoJYnR2LT5oYXNfcmVtb3RlID0gKGVlcHJvbV9kYXRhWzB4NDJdICYgMHgwMSk7CgoJaWYgKHR1bmVyX21ha2UgPT0gMCB8fCB0dW5lcl9tYWtlID09IDIpCgkJaWYodHVuZXJfZm9ybWF0IDw9MHgwYSkKCQkJdHVuZXIgPSB0dW5lcl8wX3RhYmxlW3R1bmVyX2Zvcm1hdF07CglpZiAodHVuZXJfbWFrZSA9PSAxKQoJCWlmKHR1bmVyX2Zvcm1hdCA8PTkpCgkJCXR1bmVyID0gdHVuZXJfMV90YWJsZVt0dW5lcl9mb3JtYXRdOwoKCWlmICh0dW5lcl9tYWtlID09IDQpCgkJaWYodHVuZXJfZm9ybWF0ID09IDB4MDkpCgkJCXR1bmVyID0gVFVORVJfTEdfTlRTQ19ORVdfVEFQQzsgLyogVEFQQy1HNzAyUCAqLwoKCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogQXZlcm1lZGlhIGVlcHJvbVsweCUwMnglMDJ4XTogdHVuZXI9IiwKCQlidHYtPmMubnIsZWVwcm9tX2RhdGFbMHg0MV0sZWVwcm9tX2RhdGFbMHg0Ml0pOwoJaWYodHVuZXIpIHsKCQlidHYtPnR1bmVyX3R5cGU9dHVuZXI7CgkJcHJpbnRrKCIlZCIsdHVuZXIpOwoJfSBlbHNlCgkJcHJpbnRrKCJVbmtub3duIHR5cGUiKTsKCXByaW50aygiIHJhZGlvOiVzIHJlbW90ZSBjb250cm9sOiVzXG4iLAoJICAgICAgIHR1bmVyX3R2X2ZtICAgICA/ICJ5ZXMiIDogIm5vIiwKCSAgICAgICBidHYtPmhhc19yZW1vdGUgPyAieWVzIiA6ICJubyIpOwp9CgovKiB1c2VkIG9uIFZvb2RvbyBUVi9GTSAoVm9vZG9vIDIwMCksIFMwIHdpcmVkIHRvIDB4MTAwMDAgKi8Kdm9pZCBidHR2X3RkYTk4ODBfc2V0bm9ybShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgbm9ybSkKewoJLyogZml4IHVwIG91ciBjYXJkIGVudHJ5ICovCglpZihub3JtPT1WSURFT19NT0RFX05UU0MpIHsKCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uYXVkaW9tdXhbMF09MHg5NTdmZmY7CgkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmF1ZGlvbXV4WzRdPTB4OTU3ZmZmOwoJCWRwcmludGsoImJ0dHZfdGRhOTg4MF9zZXRub3JtIHRvIE5UU0NcbiIpOwoJfQoJZWxzZSB7CgkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmF1ZGlvbXV4WzBdPTB4OTQ3ZmZmOwoJCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5hdWRpb211eFs0XT0weDk0N2ZmZjsKCQlkcHJpbnRrKCJidHR2X3RkYTk4ODBfc2V0bm9ybSB0byBQQUxcbiIpOwoJfQoJLyogc2V0IEdQSU8gYWNjb3JkaW5nICovCglncGlvX2JpdHMoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzaywKCQkgIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9tdXhbYnR2LT5hdWRpb10pOwp9CgoKLyoKICogcmVzZXQvZW5hYmxlIHRoZSBNU1Agb24gc29tZSBIYXVwcGF1Z2UgY2FyZHMKICogVGhhbmtzIHRvIEt5w7ZzdGkgTcOkbGtraSAoa21hbGtraUBjYy5odXQuZmkpIQogKgogKiBIYXVwcGF1Z2U6ICBwaW4gIDUKICogVm9vZG9vOiAgICAgcGluIDIwCiAqLwpzdGF0aWMgdm9pZCBfX2RldmluaXQgYm9vdF9tc3AzNHh4KHN0cnVjdCBidHR2ICpidHYsIGludCBwaW4pCnsKCWludCBtYXNrID0gKDEgPDwgcGluKTsKCglncGlvX2lub3V0KG1hc2ssbWFzayk7CglncGlvX2JpdHMobWFzaywwKTsKCXVkZWxheSgyNTAwKTsKCWdwaW9fYml0cyhtYXNrLG1hc2spOwoKCWlmIChidHR2X2dwaW8pCgkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwibXNwMzR4eCIpOwoJaWYgKGJ0dHZfdmVyYm9zZSkKCQlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IEhhdXBwYXVnZS9Wb29kb28gbXNwMzR4eDogcmVzZXQgbGluZSAiCgkJICAgICAgICJpbml0IFslZF1cbiIsIGJ0di0+Yy5uciwgcGluKTsKfQoKc3RhdGljIHZvaWQgX19kZXZpbml0IGJvb3RfYnQ4MzIoc3RydWN0IGJ0dHYgKmJ0dikKewp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgSW1hZ2VuYXRpb24gTC1Nb2RlbCBQWEMyMDAgRnJhbWVncmFiYmVyICovCi8qICBUaGlzIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBwcm9jZWR1cmUgYXMKICogIHVzZWQgYnkgQWxlc3NhbmRybyBSdWJpbmkgaW4gaGlzIHB4YzIwMAogKiAgZHJpdmVyLCBidXQgdXNpbmcgQlRUViBmdW5jdGlvbnMgKi8KCnN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X1BYQzIwMChzdHJ1Y3QgYnR0diAqYnR2KQp7CglzdGF0aWMgaW50IHZhbHNbXSBfX2RldmluaXRkYXRhID0geyAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBkLCAweDBkLAoJCQkJCSAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LAoJCQkJCSAgICAweDAwIH07Cgl1bnNpZ25lZCBpbnQgaTsKCWludCB0bXA7Cgl1MzIgdmFsOwoKCS8qIEluaXRpYWxpc2UgR1BJTy1jb25uZXZ0ZWQgc3R1ZmYgKi8KCWdwaW9faW5vdXQoMHhmZmZmZmYsICgxPDwxMykpOwoJZ3Bpb193cml0ZSgwKTsKCXVkZWxheSgzKTsKCWdwaW9fd3JpdGUoMTw8MTMpOwoJLyogR1BJTyBpbnB1dHMgYXJlIHB1bGxlZCB1cCwgc28gbm8gbmVlZCB0byBkcml2ZQoJICogcmVzZXQgcGluIGFueSBsb25nZXIgKi8KCWdwaW9fYml0cygweGZmZmZmZiwgMCk7CglpZiAoYnR0dl9ncGlvKQoJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsInB4YzIwMCIpOwoKCS8qICB3ZSBjb3VsZC9zaG91bGQgdHJ5IGFuZCByZXNldC9jb250cm9sIHRoZSBBRCBwb3RzPyBidXQKCSAgICByaWdodCBub3cgIHdlIHNpbXBseSAgdHVybmVkIG9mZiB0aGUgY3J1c2hpbmcuICBXaXRob3V0CgkgICAgdGhpcyB0aGUgQUdDIGRyaWZ0cyBkcmlmdHMKCSAgICByZW1lbWJlciB0aGUgRU4gaXMgcmV2ZXJzZSBsb2dpYyAtLT4KCSAgICBzZXR0aW5nIEJUODQ4X0FEQ19BR0NfRU4gZGlzYWJsZSB0aGUgQUdDCgkgICAgdGJvdWx0QGVlY3MubGVoaWdoLmVkdQoJKi8KCglidHdyaXRlKEJUODQ4X0FEQ19SRVNFUlZFRHxCVDg0OF9BRENfQUdDX0VOLCBCVDg0OF9BREMpOwoKCS8qCUluaXRpYWxpc2UgTUFYNTE3IERBQyAqLwoJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBEQUMgcmVmZXJlbmNlIHZvbHRhZ2UgbGV2ZWwgLi4uXG4iKTsKCWJ0dHZfSTJDV3JpdGUoYnR2LDB4NUUsMCwweDgwLDEpOwoKCS8qCUluaXRpYWxpc2UgMTJDNTA4IFBJQyAqLwoJLyoJVGhlIEkyQ1dyaXRlIGFuZCBJMkNSZWFkIGNvbW1tYW5kcyBhcmUgYWN0dWFsbHkgdG8gdGhlCgkgKglzYW1lIGNoaXBzIC0gYnV0IHRoZSBSL1cgYml0IGlzIGluY2x1ZGVkIGluIHRoZSBhZGRyZXNzCgkgKglhcmd1bWVudCBzbyB0aGUgbnVtYmVycyBhcmUgZGlmZmVyZW50ICovCgoKCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpc2luZyAxMkM1MDggUElDIGNoaXAgLi4uXG4iKTsKCgkvKiBGaXJzdCBvZiBhbGwsIGVuYWJsZSB0aGUgY2xvY2sgbGluZS4gVGhpcyBpcyB1c2VkIGluIHRoZSBQWEMyMDAtRiAqLwoJdmFsID0gYnRyZWFkKEJUODQ4X0dQSU9fRE1BX0NUTCk7Cgl2YWwgfD0gQlQ4NDhfR1BJT19ETUFfQ1RMX0dQQ0xLTU9ERTsKCWJ0d3JpdGUodmFsLCBCVDg0OF9HUElPX0RNQV9DVEwpOwoKCS8qIFRoZW4sIHB1c2ggdG8gMCB0aGUgcmVzZXQgcGluIGxvbmcgZW5vdWdoIHRvIHJlc2V0IHRoZSAqCgkgKiBkZXZpY2Ugc2FtZSBhcyBhYm92ZSBmb3IgdGhlIHJlc2V0IGxpbmUsIGJ1dCBub3QgdGhlIHNhbWUKCSAqIHZhbHVlIHNlbnQgdG8gdGhlIEdQSU8tY29ubmVjdGVkIHN0dWZmCgkgKiB3aGljaCBvbmUgaXMgdGhlIGdvb2Qgb25lPyAqLwoJZ3Bpb19pbm91dCgweGZmZmZmZiwoMTw8MikpOwoJZ3Bpb193cml0ZSgwKTsKCXVkZWxheSgxMCk7CglncGlvX3dyaXRlKDE8PDIpOwoKCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZhbHMpOyBpKyspIHsKCQl0bXA9YnR0dl9JMkNXcml0ZShidHYsMHgxRSwwLHZhbHNbaV0sMSk7CgkJaWYgKHRtcCAhPSAtMSkgewoJCQlwcmludGsoS0VSTl9JTkZPCgkJCSAgICAgICAiSTJDIFdyaXRlKCUyLjJ4KSA9ICVpXG5JMkMgUmVhZCAoKSA9ICUyLjJ4XG5cbiIsCgkJCSAgICAgICB2YWxzW2ldLHRtcCxidHR2X0kyQ1JlYWQoYnR2LDB4MUYsTlVMTCkpOwoJCX0KCX0KCglwcmludGsoS0VSTl9JTkZPICJQWEMyMDAgSW5pdGlhbGlzZWQuXG4iKTsKfQoKCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKgogKiAgVGhlIEFkbGluayBSVFYtMjQgKGFrYSBBbmdlbG8pIGhhcyBzb21lIHNwZWNpYWwgaW5pdGlhbGlzYXRpb24gdG8gdW5sb2NrCiAqICBpdC4gVGhpcyBhcHBhcmVudGx5IGludm9sdmVzIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlIGZvciBlYWNoIDg3OCBjaGlwOgogKgogKiAgMSkgd3JpdGUgMHgwMEMzRkVGRiB0byB0aGUgR1BJT19PVVRfRU4gcmVnaXN0ZXIKICoKICogIDIpICB3cml0ZSB0byBHUElPX0RBVEEKICogICAgICAtIDB4MEUKICogICAgICAtIHNsZWVwIDFtcwogKiAgICAgIC0gMHgxMCArIDB4MEUKICogICAgICAtIHNsZWVwIDEwbXMKICogICAgICAtIDB4MEUKICogICAgIHJlYWQgZnJvbSBHUElPX0RBVEEgaW50byBidWYgKHVpbnRfMzIpCiAqICAgICAgLSBpZiAoIGRhdGE+PjE4ICYgMHgwMSAhPSAwKSB8fCAoIGJ1Zj4+MTkgJiAweDAxICE9IDEgKQogKiAgICAgICAgICAgICAgICAgZXJyb3IuIEVSUk9SX0NQTERfQ2hlY2tfRmFpbGVkIHN0b3AuCiAqCiAqICAzKSB3cml0ZSB0byBHUElPX0RBVEEKICogICAgICAtIHdyaXRlIDB4NDQwMCArIDB4MEUKICogICAgICAtIHNsZWVwIDEwbXMKICogICAgICAtIHdyaXRlIDB4NDQxMCArIDB4MEUKICogICAgICAtIHNsZWVwIDFtcwogKiAgICAgIC0gd3JpdGUgMHgwRQogKiAgICAgcmVhZCBmcm9tIEdQSU9fREFUQSBpbnRvIGJ1ZiAodWludF8zMikKICogICAgICAtIGlmICggYnVmPj4xOCAmIDB4MDEgKSB8fCAoIGJ1Zj4+MTkgJiYgMHgwMSAhPSAwICkKICogICAgICAgICAgICAgICAgZXJyb3IuIEVSUk9SX0NQTERfQ2hlY2tfRmFpbGVkLgogKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8Kdm9pZAppbml0X1JUVjI0IChzdHJ1Y3QgYnR0diAqYnR2KQp7Cgl1aW50MzJfdCBkYXRhUmVhZCA9IDA7Cglsb25nIHdhdGNoZG9nX3ZhbHVlID0gMHgwRTsKCglwcmludGsgKEtFUk5fSU5GTwoJCSJidHR2JWQ6IEFkbGluayBSVFYtMjQgaW5pdGlhbGlzYXRpb24gaW4gcHJvZ3Jlc3MgLi4uXG4iLAoJCWJ0di0+Yy5ucik7CgoJYnR3cml0ZSAoMHgwMGMzZmVmZiwgQlQ4NDhfR1BJT19PVVRfRU4pOwoKCWJ0d3JpdGUgKDAgKyB3YXRjaGRvZ192YWx1ZSwgQlQ4NDhfR1BJT19EQVRBKTsKCW1zbGVlcCAoMSk7CglidHdyaXRlICgweDEwICsgd2F0Y2hkb2dfdmFsdWUsIEJUODQ4X0dQSU9fREFUQSk7Cgltc2xlZXAgKDEwKTsKCWJ0d3JpdGUgKDAgKyB3YXRjaGRvZ192YWx1ZSwgQlQ4NDhfR1BJT19EQVRBKTsKCglkYXRhUmVhZCA9IGJ0cmVhZCAoQlQ4NDhfR1BJT19EQVRBKTsKCglpZiAoKCgoZGF0YVJlYWQgPj4gMTgpICYgMHgwMSkgIT0gMCkgfHwgKCgoZGF0YVJlYWQgPj4gMTkpICYgMHgwMSkgIT0gMSkpIHsKCQlwcmludGsgKEtFUk5fSU5GTwoJCQkiYnR0diVkOiBBZGxpbmsgUlRWLTI0IGluaXRpYWxpc2F0aW9uKDEpIEVSUk9SX0NQTERfQ2hlY2tfRmFpbGVkIChyZWFkICVkKVxuIiwKCQkJYnR2LT5jLm5yLCBkYXRhUmVhZCk7Cgl9CgoJYnR3cml0ZSAoMHg0NDAwICsgd2F0Y2hkb2dfdmFsdWUsIEJUODQ4X0dQSU9fREFUQSk7Cgltc2xlZXAgKDEwKTsKCWJ0d3JpdGUgKDB4NDQxMCArIHdhdGNoZG9nX3ZhbHVlLCBCVDg0OF9HUElPX0RBVEEpOwoJbXNsZWVwICgxKTsKCWJ0d3JpdGUgKHdhdGNoZG9nX3ZhbHVlLCBCVDg0OF9HUElPX0RBVEEpOwoJbXNsZWVwICgxKTsKCWRhdGFSZWFkID0gYnRyZWFkIChCVDg0OF9HUElPX0RBVEEpOwoKCWlmICgoKChkYXRhUmVhZCA+PiAxOCkgJiAweDAxKSAhPSAwKSB8fCAoKChkYXRhUmVhZCA+PiAxOSkgJiAweDAxKSAhPSAwKSkgewoJCXByaW50ayAoS0VSTl9JTkZPCgkJCSJidHR2JWQ6IEFkbGluayBSVFYtMjQgaW5pdGlhbGlzYXRpb24oMikgRVJST1JfQ1BMRF9DaGVja19GYWlsZWQgKHJlYWQgJWQpXG4iLAoJCQlidHYtPmMubnIsIGRhdGFSZWFkKTsKCgkJcmV0dXJuOwoJfQoKCXByaW50ayAoS0VSTl9JTkZPCgkJImJ0dHYlZDogQWRsaW5rIFJUVi0yNCBpbml0aWFsaXNhdGlvbiBjb21wbGV0ZS5cbiIsIGJ0di0+Yy5ucik7Cn0KCgoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogTWlybyBQcm8gcmFkaW8gc3R1ZmYgLS0gdGhlIHRlYTU3NTcgaXMgY29ubmVjdGVkIHRvIHNvbWUgR1BJTyBwb3J0cyAgICAgKi8KLyoKICogQ29weXJpZ2h0IChjKSAxOTk5IENzYWJhIEhhbGFzeiA8cWdlaGFsaUB1bmktbWlza29sYy5odT4KICogVGhpcyBjb2RlIGlzIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqCiAqIEJydXRhbGx5IGhhY2tlZCBieSBEYW4gU2hlcmlkYW4gPGRhbi5zaGVyaWRhbkBjb250YWN0Lm9yZy51az4gZGpzNTIgOC8zLzAwCiAqLwoKc3RhdGljIHZvaWQgYnVzX2xvdyhzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgYml0KQp7CglpZiAoYnR2LT5tYm94X2lvcikgewoJCWdwaW9fYml0cyhidHYtPm1ib3hfaW9yIHwgYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLAoJCQkgIGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwpOwoJCXVkZWxheSg1KTsKCX0KCglncGlvX2JpdHMoYml0LDApOwoJdWRlbGF5KDUpOwoKCWlmIChidHYtPm1ib3hfaW9yKSB7CgkJZ3Bpb19iaXRzKGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCwgMCk7CgkJdWRlbGF5KDUpOwoJfQp9CgpzdGF0aWMgdm9pZCBidXNfaGlnaChzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgYml0KQp7CglpZiAoYnR2LT5tYm94X2lvcikgewoJCWdwaW9fYml0cyhidHYtPm1ib3hfaW9yIHwgYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLAoJCQkgIGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwpOwoJCXVkZWxheSg1KTsKCX0KCglncGlvX2JpdHMoYml0LGJpdCk7Cgl1ZGVsYXkoNSk7CgoJaWYgKGJ0di0+bWJveF9pb3IpIHsKCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLCAwKTsKCQl1ZGVsYXkoNSk7Cgl9Cn0KCnN0YXRpYyBpbnQgYnVzX2luKHN0cnVjdCBidHR2ICpidHYsIGludCBiaXQpCnsKCWlmIChidHYtPm1ib3hfaW9yKSB7CgkJZ3Bpb19iaXRzKGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwsCgkJCSAgYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCk7CgkJdWRlbGF5KDUpOwoKCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLCAwKTsKCQl1ZGVsYXkoNSk7Cgl9CglyZXR1cm4gZ3Bpb19yZWFkKCkgJiAoYml0KTsKfQoKLyogVEVBNTc1NyByZWdpc3RlciBiaXRzICovCiNkZWZpbmUgVEVBX0ZSRVEJCTA6MTQKI2RlZmluZSBURUFfQlVGRkVSCQkxNToxNQoKI2RlZmluZSBURUFfU0lHTkFMX1NUUkVOR1RICTE2OjE3CgojZGVmaW5lIFRFQV9QT1JUMQkJMTg6MTgKI2RlZmluZSBURUFfUE9SVDAJCTE5OjE5CgojZGVmaW5lIFRFQV9CQU5ECQkyMDoyMQojZGVmaW5lIFRFQV9CQU5EX0ZNCQkwCiNkZWZpbmUgVEVBX0JBTkRfTVcJCTEKI2RlZmluZSBURUFfQkFORF9MVwkJMgojZGVmaW5lIFRFQV9CQU5EX1NXCQkzCgojZGVmaW5lIFRFQV9NT05PCQkyMjoyMgojZGVmaW5lIFRFQV9BTExPV19TVEVSRU8JMAojZGVmaW5lIFRFQV9GT1JDRV9NT05PCQkxCgojZGVmaW5lIFRFQV9TRUFSQ0hfRElSRUNUSU9OCTIzOjIzCiNkZWZpbmUgVEVBX1NFQVJDSF9ET1dOCQkwCiNkZWZpbmUgVEVBX1NFQVJDSF9VUAkJMQoKI2RlZmluZSBURUFfU1RBVFVTCQkyNDoyNAojZGVmaW5lIFRFQV9TVEFUVVNfVFVORUQJMAojZGVmaW5lIFRFQV9TVEFUVVNfU0VBUkNISU5HCTEKCi8qIExvdy1sZXZlbCBzdHVmZiAqLwpzdGF0aWMgaW50IHRlYTU3NTdfcmVhZChzdHJ1Y3QgYnR0diAqYnR2KQp7Cgl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CglpbnQgdmFsdWUgPSAwOwoJaW50IGk7CgoJLyogYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSAqLwoJZ3Bpb19pbm91dChidHYtPm1ib3hfbWFzaywgYnR2LT5tYm94X2NsayB8IGJ0di0+bWJveF93ZSk7CgoJaWYgKGJ0di0+bWJveF9pb3IpIHsKCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCwKCQkJICBidHYtPm1ib3hfaW9yIHwgYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsKTsKCQl1ZGVsYXkoNSk7Cgl9CgoJaWYgKGJ0dHZfZ3BpbykKCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJ0ZWE1NzU3IHJlYWQiKTsKCglidXNfbG93KGJ0dixidHYtPm1ib3hfd2UpOwoJYnVzX2xvdyhidHYsYnR2LT5tYm94X2Nsayk7CgoJdWRlbGF5KDEwKTsKCXRpbWVvdXQ9IGppZmZpZXMgKyBIWjsKCgkvKiB3YWl0IGZvciBEQVRBIGxpbmUgdG8gZ28gbG93OyBlcnJvciBpZiBpdCBkb2Vzbid0ICovCgl3aGlsZSAoYnVzX2luKGJ0dixidHYtPm1ib3hfZGF0YSkgJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCgkJc2NoZWR1bGUoKTsKCWlmIChidXNfaW4oYnR2LGJ0di0+bWJveF9kYXRhKSkgewoJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogdGVhNTc1NzogcmVhZCB0aW1lb3V0XG4iLGJ0di0+Yy5ucik7CgkJcmV0dXJuIC0xOwoJfQoKCWRwcmludGsoImJ0dHYlZDogdGVhNTc1NzoiLGJ0di0+Yy5ucik7Cglmb3IoaSA9IDA7IGkgPCAyNDsgaSsrKQoJewoJCXVkZWxheSg1KTsKCQlidXNfaGlnaChidHYsYnR2LT5tYm94X2Nsayk7CgkJdWRlbGF5KDUpOwoJCWRwcmludGsoIiVjIiwoYnVzX2luKGJ0dixidHYtPm1ib3hfbW9zdCkgPT0gMCk/J1QnOictJyk7CgkJYnVzX2xvdyhidHYsYnR2LT5tYm94X2Nsayk7CgkJdmFsdWUgPDw9IDE7CgkJdmFsdWUgfD0gKGJ1c19pbihidHYsYnR2LT5tYm94X2RhdGEpID09IDApPzA6MTsgIC8qIE1TQiBmaXJzdCAqLwoJCWRwcmludGsoIiVjIiwgKGJ1c19pbihidHYsYnR2LT5tYm94X21vc3QpID09IDApPydTJzonTScpOwoJfQoJZHByaW50aygiXG5idHR2JWQ6IHRlYTU3NTc6IHJlYWQgMHglWFxuIiwgYnR2LT5jLm5yLCB2YWx1ZSk7CglyZXR1cm4gdmFsdWU7Cn0KCnN0YXRpYyBpbnQgdGVhNTc1N193cml0ZShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgdmFsdWUpCnsKCWludCBpOwoJaW50IHJlZyA9IHZhbHVlOwoKCWdwaW9faW5vdXQoYnR2LT5tYm94X21hc2ssIGJ0di0+bWJveF9jbGsgfCBidHYtPm1ib3hfd2UgfCBidHYtPm1ib3hfZGF0YSk7CgoJaWYgKGJ0di0+bWJveF9pb3IpIHsKCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCwKCQkJICBidHYtPm1ib3hfaW9yIHwgYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsKTsKCQl1ZGVsYXkoNSk7Cgl9CglpZiAoYnR0dl9ncGlvKQoJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsInRlYTU3NTcgd3JpdGUiKTsKCglkcHJpbnRrKCJidHR2JWQ6IHRlYTU3NTc6IHdyaXRlIDB4JVhcbiIsIGJ0di0+Yy5uciwgdmFsdWUpOwoJYnVzX2xvdyhidHYsYnR2LT5tYm94X2Nsayk7CglidXNfaGlnaChidHYsYnR2LT5tYm94X3dlKTsKCWZvcihpID0gMDsgaSA8IDI1OyBpKyspCgl7CgkJaWYgKHJlZyAmIDB4MTAwMDAwMCkKCQkJYnVzX2hpZ2goYnR2LGJ0di0+bWJveF9kYXRhKTsKCQllbHNlCgkJCWJ1c19sb3coYnR2LGJ0di0+bWJveF9kYXRhKTsKCQlyZWcgPDw9IDE7CgkJYnVzX2hpZ2goYnR2LGJ0di0+bWJveF9jbGspOwoJCXVkZWxheSgxMCk7CgkJYnVzX2xvdyhidHYsYnR2LT5tYm94X2Nsayk7CgkJdWRlbGF5KDEwKTsKCX0KCWJ1c19sb3coYnR2LGJ0di0+bWJveF93ZSk7ICAvKiB1bm11dGUgISEhICovCglyZXR1cm4gMDsKfQoKdm9pZCB0ZWE1NzU3X3NldF9mcmVxKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIHNob3J0IGZyZXEpCnsKCWRwcmludGsoInRlYTU3NTdfc2V0X2ZyZXEgJWRcbiIsZnJlcSk7Cgl0ZWE1NzU3X3dyaXRlKGJ0diwgNSAqIGZyZXEgKyAweDM1OCk7IC8qIGFkZCAxMC43TUh6IChzZWUgZG9jcykgKi8KfQoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIHdpbnZpZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgp2b2lkIHdpbnZpZXdfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7CgkvKiBQVDIyNTRBIHByb2dyYW1taW5nIEpvbiBUb21icywgam9uQGd0ZS5lc2kudXMuZXMgKi8KCWludCBiaXRzX291dCwgbG9vcHMsIHZvbCwgZGF0YTsKCglpZiAoIXNldCkgewoJCS8qIEZpeGVkIGJ5IExlYW5kcm8gTHVjYXJlbGxhIDxsdWNhQGxpbnV4bWVuZG96YS5vcmcuYXIgKDA3LzMxLzAxKSAqLwoJCXYtPmZsYWdzIHw9IFZJREVPX0FVRElPX1ZPTFVNRTsKCQlyZXR1cm47Cgl9CgoJLyogMzIgbGV2ZWxzIGxvZ2FyaXRobWljICovCgl2b2wgPSAzMiAtICgodi0+dm9sdW1lPj4xMSkpOwoJLyogdW5pdHMgKi8KCWJpdHNfb3V0ID0gKFBUMjI1NF9EQlNfSU5fMj4+KHZvbCU1KSk7CgkvKiB0ZW5zICovCgliaXRzX291dCB8PSAoUFQyMjU0X0RCU19JTl8xMD4+KHZvbC81KSk7CgliaXRzX291dCB8PSBQVDIyNTRfTF9DSEFOTkVMIHwgUFQyMjU0X1JfQ0hBTk5FTDsKCWRhdGEgPSBncGlvX3JlYWQoKTsKCWRhdGEgJj0gfihXSU5WSUVXX1BUMjI1NF9DTEt8IFdJTlZJRVdfUFQyMjU0X0RBVEF8CgkJICBXSU5WSUVXX1BUMjI1NF9TVFJPQkUpOwoJZm9yIChsb29wcyA9IDE3OyBsb29wcyA+PSAwIDsgbG9vcHMtLSkgewoJCWlmIChiaXRzX291dCAmICgxPDxsb29wcykpCgkJCWRhdGEgfD0gIFdJTlZJRVdfUFQyMjU0X0RBVEE7CgkJZWxzZQoJCQlkYXRhICY9IH5XSU5WSUVXX1BUMjI1NF9EQVRBOwoJCWdwaW9fd3JpdGUoZGF0YSk7CgkJdWRlbGF5KDUpOwoJCWRhdGEgfD0gV0lOVklFV19QVDIyNTRfQ0xLOwoJCWdwaW9fd3JpdGUoZGF0YSk7CgkJdWRlbGF5KDUpOwoJCWRhdGEgJj0gfldJTlZJRVdfUFQyMjU0X0NMSzsKCQlncGlvX3dyaXRlKGRhdGEpOwoJfQoJZGF0YSB8PSAgV0lOVklFV19QVDIyNTRfU1RST0JFOwoJZGF0YSAmPSB+V0lOVklFV19QVDIyNTRfREFUQTsKCWdwaW9fd3JpdGUoZGF0YSk7Cgl1ZGVsYXkoMTApOwoJZGF0YSAmPSB+V0lOVklFV19QVDIyNTRfU1RST0JFOwoJZ3Bpb193cml0ZShkYXRhKTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogbW9uby9zdGVyZW8gY29udHJvbCBmb3IgdmFyaW91cyBjYXJkcyAod2hpY2ggZG9uJ3QgdXNlIGkyYyBjaGlwcyBidXQgICAgKi8KLyogY29ubmVjdCBzb21ldGhpbmcgdG8gdGhlIEdQSU8gcGlucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCnN0YXRpYyB2b2lkCmd2YmN0djNwY2lfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7Cgl1bnNpZ25lZCBpbnQgY29uID0gMDsKCglpZiAoc2V0KSB7CgkJZ3Bpb19pbm91dCgweDMwMCwgMHgzMDApOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzEpCgkJCWNvbiA9IDB4MDAwOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpCgkJCWNvbiA9IDB4MzAwOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKQoJCQljb24gPSAweDIwMDsKLyoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykKICoJCQljb24gPSAweDEwMDsgKi8KCQlncGlvX2JpdHMoMHgzMDAsIGNvbik7Cgl9IGVsc2UgewoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9TVEVSRU8gfAoJCQkgIFZJREVPX1NPVU5EX0xBTkcxICB8IFZJREVPX1NPVU5EX0xBTkcyOwoJfQp9CgpzdGF0aWMgdm9pZApndmJjdHY1cGNpX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCkKewoJdW5zaWduZWQgaW50IHZhbCwgY29uOwoKCWlmIChidHYtPnJhZGlvX3VzZXIpCgkJcmV0dXJuOwoKCXZhbCA9IGdwaW9fcmVhZCgpOwoJaWYgKHNldCkgewoJCWNvbiA9IDB4MDAwOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpIHsKCQkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkgewoJCQkJLyogTEFORzEgKyBMQU5HMiAqLwoJCQkJY29uID0gMHgxMDA7CgkJCX0KCQkJZWxzZSB7CgkJCQkvKiBMQU5HMiAqLwoJCQkJY29uID0gMHgzMDA7CgkJCX0KCQl9CgkJaWYgKGNvbiAhPSAodmFsICYgMHgzMDApKSB7CgkJCWdwaW9fYml0cygweDMwMCwgY29uKTsKCQkJaWYgKGJ0dHZfZ3BpbykKCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsImd2YmN0djVwY2kiKTsKCQl9Cgl9IGVsc2UgewoJCXN3aXRjaCAodmFsICYgMHg3MCkgewoJCSAgY2FzZSAweDEwOgoJCQl2LT5tb2RlID0gVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCQkJYnJlYWs7CgkJICBjYXNlIDB4MzA6CgkJCXYtPm1vZGUgPSBWSURFT19TT1VORF9MQU5HMjsKCQkJYnJlYWs7CgkJICBjYXNlIDB4NTA6CgkJCXYtPm1vZGUgPSBWSURFT19TT1VORF9MQU5HMTsKCQkJYnJlYWs7CgkJICBjYXNlIDB4NjA6CgkJCXYtPm1vZGUgPSBWSURFT19TT1VORF9TVEVSRU87CgkJCWJyZWFrOwoJCSAgY2FzZSAweDcwOgoJCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTzsKCQkJYnJlYWs7CgkJICBkZWZhdWx0OgoJCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTyB8IFZJREVPX1NPVU5EX1NURVJFTyB8CgkJCQkgIFZJREVPX1NPVU5EX0xBTkcxIHwgVklERU9fU09VTkRfTEFORzI7CgkJfQoJfQp9CgovKgogKiBNYXJpbyBNZWRpbmEgTnVzc2JhdW0gPG1lZGlzb2Z0QGFsb2hhYmJzLm9yZy5teD4KICogIEkgZGlzY292ZXIgdGhhdCBvbiBCVDg0OF9HUElPX0RBVEEgYWRkcmVzcyBhIGJ5dGUgMHhjY2UgZW5hYmxlIHN0ZXJlbywKICogIDB4ZGRlIGVuYWJsZXMgbW9ubyBhbmQgMHhjY2QgZW5hYmxlcyBzYXAKICoKICogUGV0ciBWYW5kcm92ZWMgPFZBTkRST1ZFQHZjLmN2dXQuY3o+CiAqICBQLlMuOiBBdCBsZWFzdCBtYXNrIGluIGxpbmUgYWJvdmUgaXMgd3JvbmcgLSBHUElPIHBpbnMgMywyIHNlbGVjdAogKiAgaW5wdXQvb3V0cHV0IHNvdW5kIGNvbm5lY3Rpb24sIHNvIGJvdGggbXVzdCBiZSBzZXQgZm9yIG91dHB1dCBtb2RlLgogKgogKiBMb29rcyBsaWtlIGl0J3MgbmVlZGVkIG9ubHkgZm9yIHRoZSAidHZwaG9uZSIsIHRoZSAidHZwaG9uZSA5OCIKICogaGFuZGxlcyB0aGlzIHdpdGggYSB0ZGE5ODQwCiAqCiAqLwpzdGF0aWMgdm9pZAphdmVybWVkaWFfdHZwaG9uZV9hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsIGludCBzZXQpCnsKCWludCB2YWwgPSAwOwoKCWlmIChzZXQpIHsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKSAgIC8qIFNBUCAqLwoJCQl2YWwgPSAweDAyOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKQoJCQl2YWwgPSAweDAxOwoJCWlmICh2YWwpIHsKCQkJZ3Bpb19iaXRzKDB4MDMsdmFsKTsKCQkJaWYgKGJ0dHZfZ3BpbykKCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsImF2ZXJtZWRpYSIpOwoJCX0KCX0gZWxzZSB7CgkJdi0+bW9kZSA9IFZJREVPX1NPVU5EX01PTk8gfCBWSURFT19TT1VORF9TVEVSRU8gfAoJCQlWSURFT19TT1VORF9MQU5HMTsKCQlyZXR1cm47Cgl9Cn0KCnN0YXRpYyB2b2lkCmF2ZXJtZWRpYV90dl9zdGVyZW9fYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7CglpbnQgdmFsID0gMDsKCglpZiAoc2V0KSB7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMikgICAvKiBTQVAgKi8KCQkJdmFsID0gMHgwMTsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTykgIC8qIFNURVJFTyAqLwoJCQl2YWwgPSAweDAyOwoJCWJ0YW9yKHZhbCwgfjB4MDMsIEJUODQ4X0dQSU9fREFUQSk7CgkJaWYgKGJ0dHZfZ3BpbykKCQkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwiYXZlcm1lZGlhIik7Cgl9IGVsc2UgewoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKCQkJVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCQlyZXR1cm47Cgl9Cn0KCi8qIExpZmV0ZWMgOTQxNSBoYW5kbGluZyAqLwpzdGF0aWMgdm9pZApsdDk0MTVfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7CglpbnQgdmFsID0gMDsKCglpZiAoZ3Bpb19yZWFkKCkgJiAweDQwMDApIHsKCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTzsKCQlyZXR1cm47Cgl9CgoJaWYgKHNldCkgewoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpICAvKiBBMiBTQVAgKi8KCQkJdmFsID0gMHgwMDgwOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSAvKiBBMiBzdGVyZW8gKi8KCQkJdmFsID0gMHgwODgwOwoJCWlmICgodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcxKSB8fAoJCSAgICAodi0+bW9kZSAmIFZJREVPX1NPVU5EX01PTk8pKQoJCQl2YWwgPSAwOwoJCWdwaW9fYml0cygweDA4ODAsIHZhbCk7CgkJaWYgKGJ0dHZfZ3BpbykKCQkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwibHQ5NDE1Iik7Cgl9IGVsc2UgewoJCS8qIGF1dG9kZXRlY3QgZG9lc24ndCB3b3JrIHdpdGggdGhpcyBjYXJkIDotKCAqLwoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKCQkJVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCQlyZXR1cm47Cgl9Cn0KCi8qIFREQTk4MjEgb24gVGVycmFUVisgQnQ4NDgsIEJ0ODc4ICovCnN0YXRpYyB2b2lkCnRlcnJhdHZfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7Cgl1bnNpZ25lZCBpbnQgY29uID0gMDsKCglpZiAoc2V0KSB7CgkJZ3Bpb19pbm91dCgweDE4MDAwMCwweDE4MDAwMCk7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMikKCQkJY29uID0gMHgwODAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCgkJCWNvbiA9IDB4MTgwMDAwOwoJCWdwaW9fYml0cygweDE4MDAwMCwgY29uKTsKCQlpZiAoYnR0dl9ncGlvKQoJCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJ0ZXJyYXR2Iik7Cgl9IGVsc2UgewoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKCQkJVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCX0KfQoKc3RhdGljIHZvaWQKd2luZmFzdDIwMDBfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7Cgl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CgoJaWYgKHNldCkgewoJCS8qYnRvciAoMHhjMzIwMDAsIEJUODQ4X0dQSU9fT1VUX0VOKTsqLwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykJCS8qIE1vbm8gKi8KCQkJdmFsID0gMHg0MjAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkJLyogTW9ubyAqLwoJCQl2YWwgPSAweDQyMDAwMDsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKQkvKiBTQVAgKi8KCQkJdmFsID0gMHg0MTAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCS8qIFN0ZXJlbyAqLwoJCQl2YWwgPSAweDAyMDAwMDsKCQlpZiAodmFsKSB7CgkJCWdwaW9fYml0cygweDQzMDAwMCwgdmFsKTsKCQkJaWYgKGJ0dHZfZ3BpbykKCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsIndpbmZhc3QyMDAwIik7CgkJfQoJfSBlbHNlIHsKCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTyB8IFZJREVPX1NPVU5EX1NURVJFTyB8CgkJCSAgVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCX0KfQoKLyoKICogRGFyaXVzeiBLb3dhbGV3c2tpIDxkYXJla2tAYXV0b21leC5wbD4KICogc291bmQgY29udHJvbCBmb3IgUHJvbGluayBQVi1CVDg3OFArOUIgKFBpeGVsVmlldyBQbGF5VFYgUHJvIEZNK05JQ0FNCiAqIHJldmlzaW9uIDlCIGhhcyBvbi1ib2FyZCBUREE5ODc0QSBzb3VuZCBkZWNvZGVyKS4KICoKICogTm90ZTogVGhlcmUgYXJlIGNhcmQgdmFyaWFudHMgd2l0aG91dCB0ZGE5ODc0YS4gRm9yY2luZyB0aGUgInN0ZXJlbyBzb3VuZCByb3V0ZSIKICogICAgICAgd2lsbCBtdXRlIHRoaXMgY2FyZHMuCiAqLwpzdGF0aWMgdm9pZApwdmJ0ODc4cDliX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCkKewoJdW5zaWduZWQgaW50IHZhbCA9IDA7CgoJaWYgKGJ0di0+cmFkaW9fdXNlcikKCQlyZXR1cm47CgoJaWYgKHNldCkgewoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykJewoJCQl2YWwgPSAweDAxOwoJCX0KCQlpZiAoKHYtPm1vZGUgJiAoVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMikpCgkJICAgIHx8ICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSkgewoJCQl2YWwgPSAweDAyOwoJCX0KCQlpZiAodmFsKSB7CgkJCWdwaW9fYml0cygweDAzLHZhbCk7CgkJCWlmIChidHR2X2dwaW8pCgkJCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJwdmJ0ODc4cDliIik7CgkJfQoJfSBlbHNlIHsKCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTyB8IFZJREVPX1NPVU5EX1NURVJFTyB8CgkJCVZJREVPX1NPVU5EX0xBTkcxIHwgVklERU9fU09VTkRfTEFORzI7Cgl9Cn0KCi8qCiAqIERhcml1c3ogS293YWxld3NraSA8ZGFyZWtrQGF1dG9tZXgucGw+CiAqIHNvdW5kIGNvbnRyb2wgZm9yIEZseVZpZGVvIDIwMDBTICh3aXRoIHRkYTk4NzQgZGVjb2RlcikKICogYmFzZWQgb24gcHZidDg3OHA5Yl9hdWRpbygpIC0gdGhpcyBpcyBub3QgdGVzdGVkLCBwbGVhc2UgZml4ISEhCiAqLwpzdGF0aWMgdm9pZApmdjIwMDBzX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCkKewoJdW5zaWduZWQgaW50IHZhbCA9IDB4ZmZmZjsKCglpZiAoYnR2LT5yYWRpb191c2VyKQoJCXJldHVybjsKCWlmIChzZXQpIHsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX01PTk8pCXsKCQkJdmFsID0gMHgwMDAwOwoJCX0KCQlpZiAoKHYtPm1vZGUgJiAoVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMikpCgkJICAgIHx8ICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSkgewoJCQl2YWwgPSAweDEwODA7IC8qLWRrLT8/PzogMHgwODgwLCAweDAwODAsIDB4MTgwMCAuLi4gKi8KCQl9CgkJaWYgKHZhbCAhPSAweGZmZmYpIHsKCQkJZ3Bpb19iaXRzKDB4MTgwMCwgdmFsKTsKCQkJaWYgKGJ0dHZfZ3BpbykKCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsImZ2MjAwMHMiKTsKCQl9Cgl9IGVsc2UgewoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKCQkJVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCX0KfQoKLyoKICogc291bmQgY29udHJvbCBmb3IgQ2Fub3B1cyBXaW5EVlIgUENJCiAqIE1hc2FraSBTdXp1a2kgPG1hc2FraUBidHJlZS5vcmc+CiAqLwpzdGF0aWMgdm9pZAp3aW5kdnJfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7Cgl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CgoJaWYgKHNldCkgewoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykKCQkJdmFsID0gMHgwNDAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkKCQkJdmFsID0gMDsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKQoJCQl2YWwgPSAweDEwMDAwMDsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTykKCQkJdmFsID0gMDsKCQlpZiAodmFsKSB7CgkJCWdwaW9fYml0cygweDE0MDAwMCwgdmFsKTsKCQkJaWYgKGJ0dHZfZ3BpbykKCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsIndpbmR2ciIpOwoJCX0KCX0gZWxzZSB7CgkJdi0+bW9kZSA9IFZJREVPX1NPVU5EX01PTk8gfCBWSURFT19TT1VORF9TVEVSRU8gfAoJCQkgIFZJREVPX1NPVU5EX0xBTkcxIHwgVklERU9fU09VTkRfTEFORzI7Cgl9Cn0KCi8qCiAqIHNvdW5kIGNvbnRyb2wgZm9yIEFELVRWSzUwMwogKiBIaXJvc2hpIFRha2VrYXdhIDxzaWFuQGJpZy5vci5qcD4KICovCnN0YXRpYyB2b2lkCmFkdHZrNTAzX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCkKewoJdW5zaWduZWQgaW50IGNvbiA9IDB4ZmZmZmZmOwoKCS8qIGJ0YW9yKDB4MWUwMDAwLCB+MHgxZTAwMDAsIEJUODQ4X0dQSU9fT1VUX0VOKTsgKi8KCglpZiAoc2V0KSB7CgkJLyogYnRvcigqKiosIEJUODQ4X0dQSU9fT1VUX0VOKTsgKi8KCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcxKQoJCQljb24gPSAweDAwMDAwMDAwOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpCgkJCWNvbiA9IDB4MDAxODAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCgkJCWNvbiA9IDB4MDAwMDAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9NT05PKQoJCQljb24gPSAweDAwMDYwMDAwOwoJCWlmIChjb24gIT0gMHhmZmZmZmYpIHsKCQkJZ3Bpb19iaXRzKDB4MWUwMDAwLGNvbik7CgkJCWlmIChidHR2X2dwaW8pCgkJCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCAiYWR0dms1MDMiKTsKCQl9Cgl9IGVsc2UgewoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKCQkJICBWSURFT19TT1VORF9MQU5HMSAgfCBWSURFT19TT1VORF9MQU5HMjsKCX0KfQoKLyogUmVtb3RlVmlzaW9uIE1YIChydjYwNSkgbXV4c2VsIGhlbHBlciBbTWlndWVsIEZyZWl0YXNdCiAqCiAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgcnY2MDUgZG9uJ3QgdXNlIGEgbm9ybWFsIG11bHRpcGxleCwgYnV0IGEgY3Jvc3Nwb2ludAogKiBzd2l0Y2ggaW5zdGVhZCAoQ0QyMk0zNDk0RSkuIFRoaXMgSUMgY2FuIGhhdmUgbXVsdGlwbGUgYWN0aXZlIGNvbm5lY3Rpb25zCiAqIGJldHdlZW4gWG4gKGlucHV0KSBhbmQgWW4gKG91dHB1dCkgcGlucy4gV2UgbmVlZCB0byBjbGVhciBhbnkgZXhpc3RpbmcKICogY29ubmVjdGlvbiBwcmlvciB0byBlc3RhYmxpc2ggYSBuZXcgb25lLCBwdWxzaW5nIHRoZSBTVFJPQkUgcGluLgogKgogKiBUaGUgYm9hcmQgaGFyZHdpcmUgWTAgKHhwb2ludCkgdG8gTVVYMSBhbmQgTVVYT1VUIHRvIFlpbi4KICogR1BJTyBwaW5zIGFyZSB3aXJlZCBhczoKICogIEdQSU9bMDozXSAtIEFYWzA6M10gKHhwb2ludCkgLSBQMVswOjNdIChtaWNyb2NvbnRyb2xlcikKICogIEdQSU9bNDo2XSAtIEFZWzA6Ml0gKHhwb2ludCkgLSBQMVs0OjZdIChtaWNyb2NvbnRyb2xlcikKICogIEdQSU9bN10gICAtIERBVEEgKHhwb2ludCkgICAgLSBQMVs3XSAobWljcm9jb250cm9sZXIpCiAqICBHUElPWzhdICAgLSAgICAgICAgICAgICAgICAgIC0gUDNbNV0gKG1pY3JvY29udHJvbGVyKQogKiAgR1BJT1s5XSAgIC0gUkVTRVQgKHhwb2ludCkgICAtIFAzWzZdIChtaWNyb2NvbnRyb2xlcikKICogIEdQSU9bMTBdICAtIFNUUk9CRSAoeHBvaW50KSAgLSBQM1s3XSAobWljcm9jb250cm9sZXIpCiAqICBHUElOVFIgICAgLSAgICAgICAgICAgICAgICAgIC0gUDNbNF0gKG1pY3JvY29udHJvbGVyKQogKgogKiBUaGUgbWljcm9jb250cm9sZXIgaXMgYSA4MEMzMiBsaWtlLiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY2hhbmdlIHhwb2ludAogKiBjb25maWd1cmF0aW9uIGVpdGhlciBkaXJlY3RseSAoYXMgd2UgYXJlIGRvaW5nKSBvciB1c2luZyB0aGUgbWljcm9jb250cm9sZXIKICogd2hpY2ggaXMgYWxzbyB3aXJlZCB0byBJMkMgaW50ZXJmYWNlLiBJIGhhdmUgbm8gZnVydGhlciBpbmZvIG9uIHRoZQogKiBtaWNyb2NvbnRyb2xlciBmZWF0dXJlcywgb25lIHdvdWxkIG5lZWQgdG8gZGlzYXNzZW1ibHkgdGhlIGZpcm13YXJlLgogKiBub3RlOiB0aGUgdmVuZG9yIHJlZnVzZWQgdG8gZ2l2ZSBhbnkgaW5mb3JtYXRpb24gb24gdGhpcyBwcm9kdWN0LCBhbGwKICogICAgICAgdGhhdCBzdHVmZiB3YXMgZm91bmQgdXNpbmcgYSBtdWx0aW1ldGVyISA6KQogKi8Kc3RhdGljIHZvaWQgcnY2MDVfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJLyogcmVzZXQgYWxsIGNvbmVjdGlvbnMgKi8KCWdwaW9fYml0cygweDIwMCwweDIwMCk7CgltZGVsYXkoMSk7CglncGlvX2JpdHMoMHgyMDAsMHgwMDApOwoJbWRlbGF5KDEpOwoKCS8qIGNyZWF0ZSBhIG5ldyBjb25lY3Rpb24gKi8KCWdwaW9fYml0cygweDQ4MCwweDA4MCk7CglncGlvX2JpdHMoMHg0ODAsMHg0ODApOwoJbWRlbGF5KDEpOwoJZ3Bpb19iaXRzKDB4NDgwLDB4MDgwKTsKCW1kZWxheSgxKTsKfQoKLyogVGliZXQgU3lzdGVtcyAnUHJvZ3Jlc3MgRFZSJyBDUzE2IG11eHNlbCBoZWxwZXIgW0NocmlzIEZhbm5pbmddCiAqCiAqIFRoZSBDUzE2IChhdmFpbGFibGUgb24gZUJheSBjaGVhcCkgaXMgYSBQQ0kgYm9hcmQgd2l0aCBmb3VyIEZ1c2lvbgogKiA4NzhBIGNoaXBzLCBhIFBDSSBicmlkZ2UsIGFuIEF0bWVsIG1pY3JvY29udHJvbGxlciwgZm91ciBzeW5jIHNlcGVyYXRvcgogKiBjaGlwcywgdGVuIGVpZ2h0IGlucHV0IGFuYWxvZyBtdWx0aXBsZXhvcnMsIGEgbm90IGNoaXAgYW5kIGEgZmV3CiAqIG90aGVyIGNvbXBvbmVudHMuCiAqCiAqIDE2IGlucHV0cyBvbiBhIHNlY29uZGFyeSBicmFja2V0IGFyZSBwcm92aWRlZCBhbmQgY2FuIGJlIHNlbGVjdGVkCiAqIGZyb20gZWFjaCBvZiB0aGUgZm91ciBjYXB0dXJlIGNoaXBzLiAgVHdvIG9mIHRoZSBlaWdodCBpbnB1dAogKiBtdWx0aXBsZXhvcnMgYXJlIHVzZWQgdG8gc2VsZWN0IGZyb20gYW55IG9mIHRoZSAxNiBpbnB1dCBzaWduYWxzLgogKgogKiBVbnN1cHBvcnRlZCBoYXJkd2FyZSBjYXBhYmlsaXRpZXM6CiAqICAuIEEgdmlkZW8gb3V0cHV0IG1vbml0b3Igb24gdGhlIHNlY29uZGFyeSBicmFja2V0IGNhbiBiZSBzZWxlY3RlZCBmcm9tCiAqICAgIG9uZSBvZiB0aGUgODc4QSBjaGlwcy4KICogIC4gQW5vdGhlciBwYXNzdGhyb3VnaCBidXQgSSBoYXZlbid0IHNwZW50IGFueSB0aW1lIGludmVzdGlnYXRpbmcgaXQuCiAqICAuIERpZ2l0YWwgSS9PIChsb2dpYyBsZXZlbCBjb25uZWN0ZWQgdG8gR1BJTykgaXMgYXZhaWxhYmxlIGZyb20gYW4KICogICAgb25ib2FyZCBoZWFkZXIuCiAqCiAqIFRoZSBvbiBjaGlwIGlucHV0IG11eCBzaG91bGQgYWx3YXlzIGJlIHNldCB0byAyLgogKiBHUElPWzE2OjE5XSAtIFZpZGVvIGlucHV0IHNlbGVjdGlvbgogKiBHUElPWzA6M10gICAtIFZpZGVvIG91dHB1dCBtb25pdG9yIHNlbGVjdCAob25seSBhdmFpbGFibGUgZnJvbSBvbmUgODc4QSkKICogR1BJT1s/Oj9dICAgLSBEaWdpdGFsIEkvTy4KICoKICogVGhlcmUgaXMgYW4gQVRNRUwgbWljcm9jb250cm9sbGVyIHdpdGggYW4gODAzMSBjb3JlIG9uIGJvYXJkLiAgSSBoYXZlIG5vdAogKiBkZXRlcm1pbmVkIHdoYXQgZnVuY3Rpb24gKGlmIGFueSkgaXQgcHJvdmlkZXMuICBXaXRoIHRoZSBtaWNyb2NvbnRyb2xsZXIKICogYW5kIHN5bmMgc2VwZXJhdG9yIGNoaXBzIGEgZ3Vlc3MgaXMgdGhhdCBpdCBtaWdodCBoYXZlIHRvIGRvIHdpdGggdmlkZW8KICogc3dpdGNoaW5nIGFuZCBtYXliZSBzb21lIGRpZ2l0YWwgSS9PLgogKi8Kc3RhdGljIHZvaWQgdGliZXRDUzE2X211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCnsKCS8qIHZpZGVvIG11eCAqLwoJZ3Bpb19iaXRzKDB4MGYwMDAwLCBpbnB1dCA8PCAxNik7Cn0KCnN0YXRpYyB2b2lkIHRpYmV0Q1MxNl9pbml0KHN0cnVjdCBidHR2ICpidHYpCnsKCS8qIGVuYWJsZSBncGlvIGJpdHMsIG1hc2sgb2J0YWluZWQgdmlhIGJ0U3B5ICovCglncGlvX2lub3V0KDB4ZmZmZmZmLCAweDBmN2ZmZik7CglncGlvX3dyaXRlKDB4MGY3ZmZmKTsKfQoKLyoKICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBmb3IgdGhlIEtvZGljb20tNDQwMHIgZ2V0IGEgbGl0dGxlIG1pbmQtdHdpc3RpbmcuCiAqIFRoZXJlIGlzIGEgIm1hc3RlciIgY29udHJvbGxlciBhbmQgdGhyZWUgInNsYXZlIiBjb250cm9sbGVycywgdG9nZXRoZXIKICogYW4gYW5hbG9nIHN3aXRjaCB3aGljaCBjb25uZWN0cyBhbnkgb2YgMTYgY2FtZXJhcyB0byBhbnkgb2YgdGhlIEJUODdBJ3MuCiAqIFRoZSBhbmFsb2cgc3dpdGNoIGlzIGNvbnRyb2xsZWQgYnkgdGhlICJtYXN0ZXIiLCBidXQgdGhlIGRldGVjdGlvbiBvcmRlcgogKiBvZiB0aGUgZm91ciBCVDg3OEEgY2hpcHMgaXMgaW4gYW4gb3JkZXIgd2hpY2ggSSBqdXN0IGRvbid0IHVuZGVyc3RhbmQuCiAqIFRoZSAibWFzdGVyIiBpcyBhY3R1YWxseSB0aGUgc2Vjb25kIGNvbnRyb2xsZXIgdG8gYmUgZGV0ZWN0ZWQuICBUaGUKICogbG9naWMgb24gdGhlIGJvYXJkIHVzZXMgbG9naWNhbCBudW1iZXJzIGZvciB0aGUgNCBjb250cm9sZXJzLCBidXQKICogdGhvc2UgbnVtYmVycyBhcmUgZGlmZmVyZW50IGZyb20gdGhlIGRldGVjdGlvbiBzZXF1ZW5jZS4gIFdoZW4gd29ya2luZwogKiB3aXRoIHRoZSBhbmFsb2cgc3dpdGNoLCB3ZSBuZWVkIHRvICJtYXAiIGZyb20gdGhlIGRldGVjdGlvbiBzZXF1ZW5jZQogKiBvdmVyIHRvIHRoZSBib2FyZCdzIGxvZ2ljYWwgY29udHJvbGxlciBudW1iZXIuICBUaGlzIG1hcHBpbmcgc2VxdWVuY2UKICogaXMgezMsIDAsIDIsIDF9LCBpLmUuIHRoZSBmaXJzdCBjb250cm9sbGVyIHRvIGJlIGRldGVjdGVkIGlzIGxvZ2ljYWwKICogdW5pdCAzLCB0aGUgc2Vjb25kICh3aGljaCBpcyB0aGUgbWFzdGVyKSBpcyBsb2dpY2FsIHVuaXQgMCwgZXRjLgogKiBXZSBuZWVkIHRvIG1haW50YWluIHRoZSBzdGF0dXMgb2YgdGhlIGFuYWxvZyBzd2l0Y2ggKHdoaWNoIG9mIHRoZSAxNgogKiBjYW1lcmFzIGlzIGNvbm5lY3RlZCB0byB3aGljaCBvZiB0aGUgNCBjb250cm9sbGVycykuICBSYXRoZXIgdGhhbgogKiBhZGQgdG8gdGhlIGJ0dHYgc3RydWN0dXJlIGZvciB0aGlzLCB3ZSB1c2UgdGhlIGRhdGEgcmVzZXJ2ZWQgZm9yCiAqIHRoZSBtYm94ICh1bnVzZWQgZm9yIHRoaXMgY2FyZCB0eXBlKS4KICovCgovKgogKiBGaXJzdCBhIHJvdXRpbmUgdG8gc2V0IHRoZSBhbmFsb2cgc3dpdGNoLCB3aGljaCBjb250cm9scyB3aGljaCBjYW1lcmEKICogaXMgcm91dGVkIHRvIHdoaWNoIGNvbnRyb2xsZXIuICBUaGUgc3dpdGNoIGNvbXByaXNlcyBhbiBYLWFkZHJlc3MKICogKGdwaW8gYml0cyAwLTMsIHJlcHJlc2VudGluZyB0aGUgY2FtZXJhLCByYW5naW5nIGZyb20gMC0xNSksIGFuZCBhCiAqIFktYWRkcmVzcyAoZ3BpbyBiaXRzIDQtNiwgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sbGVyLCByYW5naW5nIGZyb20gMC0zKS4KICogQSBkYXRhIHZhbHVlIChncGlvIGJpdCA3KSBvZiAnMScgZW5hYmxlcyB0aGUgc3dpdGNoLCBhbmQgJzAnIGRpc2FibGVzCiAqIHRoZSBzd2l0Y2guICBBIFNUUk9CRSBiaXQgKGdwaW8gYml0IDgpIGxhdGNoZXMgdGhlIGRhdGEgdmFsdWUgaW50byB0aGUKICogc3BlY2lmaWVkIGFkZHJlc3MuICBUaGUgaWRlYSBpcyB0byBzZXQgdGhlIGFkZHJlc3MgYW5kIGRhdGEsIHRoZW4gYnJpbmcKICogU1RST0JFIGhpZ2gsIGFuZCBmaW5hbGx5IGJyaW5nIFNUUk9CRSBiYWNrIHRvIGxvdy4KICovCnN0YXRpYyB2b2lkIGtvZGljb200NDAwcl93cml0ZShzdHJ1Y3QgYnR0diAqYnR2LAoJCQkgICAgICAgdW5zaWduZWQgY2hhciB4YWRkciwKCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgeWFkZHIsCgkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGEpIHsKCXVuc2lnbmVkIGludCB1ZGF0YTsKCgl1ZGF0YSA9IChkYXRhIDw8IDcpIHwgKCh5YWRkciYzKSA8PCA0KSB8ICh4YWRkciYweGYpOwoJZ3Bpb19iaXRzKDB4MWZmLCB1ZGF0YSk7CQkvKiB3cml0ZSBBRERSIGFuZCBEQVQgKi8KCWdwaW9fYml0cygweDFmZiwgdWRhdGEgfCAoMSA8PCA4KSk7CS8qIHN0cm9iZSBoaWdoICovCglncGlvX2JpdHMoMHgxZmYsIHVkYXRhKTsJCS8qIHN0cm9iZSBsb3cgKi8KfQoKLyoKICogTmV4dCB0aGUgbXV4IHNlbGVjdC4gIEJvdGggdGhlICJtYXN0ZXIiIGFuZCAic2xhdmUiICdjYXJkcycgKGNvbnRyb2xsZXJzKQogKiB1c2UgdGhpcyByb3V0aW5lLiAgVGhlIHJvdXRpbmUgZmluZHMgdGhlICJtYXN0ZXIiIGZvciB0aGUgY2FyZCwgbWFwcwogKiB0aGUgY29udHJvbGxlciBudW1iZXIgZnJvbSB0aGUgZGV0ZWN0ZWQgcG9zaXRpb24gb3ZlciB0byB0aGUgbG9naWNhbAogKiBudW1iZXIsIHdyaXRlcyB0aGUgYXBwcm9wcmlhdGUgZGF0YSB0byB0aGUgYW5hbG9nIHN3aXRjaCwgYW5kIGhvdXNla2VlcHMKICogdGhlIGxvY2FsIGNvcHkgb2YgdGhlIHN3aXRjaCBpbmZvcm1hdGlvbi4gIFRoZSBwYXJhbWV0ZXIgJ2lucHV0JyBpcyB0aGUKICogcmVxdWVzdGVkIGNhbWVyYSBudW1iZXIgKDAgLSAxNSkuCiAqLwpzdGF0aWMgdm9pZCBrb2RpY29tNDQwMHJfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJY2hhciAqc3dfc3RhdHVzOwoJaW50IHhhZGRyLCB5YWRkcjsKCXN0cnVjdCBidHR2ICptY3RscjsKCXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1hcFs0XSA9IHszLCAwLCAyLCAxfTsKCgltY3RsciA9IG1hc3RlcltidHYtPmMubnJdOwoJaWYgKG1jdGxyID09IE5VTEwpIHsJLyogaWdub3JlIGlmIG1hc3RlciBub3QgeWV0IGRldGVjdGVkICovCgkJcmV0dXJuOwoJfQoJeWFkZHIgPSAoYnR2LT5jLm5yIC0gbWN0bHItPmMubnIgKyAxKSAmIDM7IC8qIHRoZSAnJicgaXMgZm9yIHNhZmV0eSAqLwoJeWFkZHIgPSBtYXBbeWFkZHJdOwoJc3dfc3RhdHVzID0gKGNoYXIgKikoJm1jdGxyLT5tYm94X3dlKTsKCXhhZGRyID0gaW5wdXQgJiAweGY7CgkvKiBDaGVjayBpZiB0aGUgY29udHJvbGxlci9jYW1lcmEgcGFpciBoYXMgY2hhbmdlZCwgZWxzZSBpZ25vcmUgKi8KCWlmIChzd19zdGF0dXNbeWFkZHJdICE9IHhhZGRyKQoJewoJCS8qICJvcGVuIiB0aGUgb2xkIHN3aXRjaCwgImNsb3NlIiB0aGUgbmV3IG9uZSwgc2F2ZSB0aGUgbmV3ICovCgkJa29kaWNvbTQ0MDByX3dyaXRlKG1jdGxyLCBzd19zdGF0dXNbeWFkZHJdLCB5YWRkciwgMCk7CgkJc3dfc3RhdHVzW3lhZGRyXSA9IHhhZGRyOwoJCWtvZGljb200NDAwcl93cml0ZShtY3RsciwgeGFkZHIsIHlhZGRyLCAxKTsKCX0KfQoKLyoKICogRHVyaW5nIGluaXRpYWxpc2F0aW9uLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBhbmFsb2cgc3dpdGNoLiAgV2UKICogYWxzbyBwcmVzZXQgdGhlIHN3aXRjaCB0byBtYXAgdGhlIDQgY29ubmVjdG9ycyBvbiB0aGUgY2FyZCB0byB0aGUKICogKnVzZXIncyogKHNlZSBhYm92ZSBkZXNjcmlwdGlvbiBvZiBrb2RpY29tNDQwMHJfbXV4c2VsKSBjaGFubmVscwogKiAwIHRocm91Z2ggMwogKi8Kc3RhdGljIHZvaWQga29kaWNvbTQ0MDByX2luaXQoc3RydWN0IGJ0dHYgKmJ0dikKewoJY2hhciAqc3dfc3RhdHVzID0gKGNoYXIgKikoJmJ0di0+bWJveF93ZSk7CglpbnQgaXg7CgoJZ3Bpb19pbm91dCgweDAwMDNmZiwgMHgwMDAzZmYpOwoJZ3Bpb193cml0ZSgxIDw8IDkpOwkvKiByZXNldCBNVVggKi8KCWdwaW9fd3JpdGUoMCk7CgkvKiBQcmVzZXQgY2FtZXJhIDAgdG8gdGhlIDQgY29udHJvbGxlcnMgKi8KCWZvciAoaXg9MDsgaXg8NDsgaXgrKykgewoJCXN3X3N0YXR1c1tpeF0gPSBpeDsKCQlrb2RpY29tNDQwMHJfd3JpdGUoYnR2LCBpeCwgaXgsIDEpOwoJfQoJLyoKCSAqIFNpbmNlIHRoaXMgaXMgdGhlICJtYXN0ZXIiLCB3ZSBuZWVkIHRvIHNldCB1cCB0aGUKCSAqIG90aGVyIHRocmVlIGNvbnRyb2xsZXIgY2hpcHMnIHBvaW50ZXJzIHRvIHRoaXMgc3RydWN0dXJlCgkgKiBmb3IgbGF0ZXIgdXNlIGluIHRoZSBtdXhzZWwgcm91dGluZS4KCSAqLwoJaWYgKChidHYtPmMubnI8MSkgfHwgKGJ0di0+Yy5ucj5CVFRWX01BWC0zKSkKCSAgICByZXR1cm47CgltYXN0ZXJbYnR2LT5jLm5yLTFdID0gYnR2OwoJbWFzdGVyW2J0di0+Yy5ucl0gICA9IGJ0djsKCW1hc3RlcltidHYtPmMubnIrMV0gPSBidHY7CgltYXN0ZXJbYnR2LT5jLm5yKzJdID0gYnR2Owp9CgovKiBUaGUgR3JhbmR0ZWMgWC1HdWFyZCBmcmFtZWdyYWJiZXIgY2FyZCB1c2VzIHR3byBEdWFsIDQtY2hhbm5lbAogKiB2aWRlbyBtdWx0aXBsZXhlcnMgdG8gcHJvdmlkZSB1cCB0byAxNiB2aWRlbyBpbnB1dHMuIFRoZXNlCiAqIG11bHRpcGxleGVycyBhcmUgY29udHJvbGxlZCBieSB0aGUgbG93ZXIgOCBHUElPIHBpbnMgb2YgdGhlCiAqIGJ0ODc4LiBUaGUgbXVsdGlwbGV4ZXJzIHByb2JhYmx5IFBlcmljb20gUEk1VjMzMVEgb3Igc2ltaWxhci4KCiAqIHh4eDAgaXMgcGluIHh4eCBvZiBtdWx0aXBsZXhlciBVNSwKICogeXl5MSBpcyBwaW4geXl5IG9mIG11bHRpcGxleGVyIFUyCiAqLwojZGVmaW5lIEVOQTAgICAgMHgwMQojZGVmaW5lIEVOQjAgICAgMHgwMgojZGVmaW5lIEVOQTEgICAgMHgwNAojZGVmaW5lIEVOQjEgICAgMHgwOAoKI2RlZmluZSBJTjEwICAgIDB4MTAKI2RlZmluZSBJTjAwICAgIDB4MjAKI2RlZmluZSBJTjExICAgIDB4NDAKI2RlZmluZSBJTjAxICAgIDB4ODAKCnN0YXRpYyB2b2lkIHhndWFyZF9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQp7CglzdGF0aWMgY29uc3QgaW50IG1hc2tzW10gPSB7CgkJRU5CMCwgRU5CMHxJTjAwLCBFTkIwfElOMTAsIEVOQjB8SU4wMHxJTjEwLAoJCUVOQTAsIEVOQTB8SU4wMCwgRU5BMHxJTjEwLCBFTkEwfElOMDB8SU4xMCwKCQlFTkIxLCBFTkIxfElOMDEsIEVOQjF8SU4xMSwgRU5CMXxJTjAxfElOMTEsCgkJRU5BMSwgRU5BMXxJTjAxLCBFTkExfElOMTEsIEVOQTF8SU4wMXxJTjExLAoJfTsKCWdwaW9fd3JpdGUobWFza3NbaW5wdXQlMTZdKTsKfQpzdGF0aWMgdm9pZCBwaWNvbG9fdGV0cmFfaW5pdChzdHJ1Y3QgYnR0diAqYnR2KQp7CgkvKlRoaXMgaXMgdGhlIHZpZGVvIGlucHV0IHJlZGlyZWN0aW9uIGZvbmN0aW9uYWxpdHkgOiBJIERJRCBOT1QgVVNFRCBJVC4gKi8KCWJ0d3JpdGUgKDB4MDg8PDE2LEJUODQ4X0dQSU9fREFUQSk7LypHUElPWzE5XSBbPT0+IDQwNTMgQitDXSBzZXQgdG8gMSAqLwoJYnR3cml0ZSAoMHgwNDw8MTYsQlQ4NDhfR1BJT19EQVRBKTsvKkdQSU9bMThdIFs9PT4gNDA1MyBBXSAgc2V0IHRvIDEqLwp9CnN0YXRpYyB2b2lkIHBpY29sb190ZXRyYV9tdXhzZWwgKHN0cnVjdCBidHR2KiBidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoKCWRwcmludGsgKEtFUk5fREVCVUcgImJ0dHYlZCA6IHBpY29sb190ZXRyYV9tdXhzZWwgPT4gIGlucHV0ID0gJWRcbiIsYnR2LT5jLm5yLGlucHV0KTsKCS8qSnVzdCBzZXQgdGhlIHJpZ2h0IHBhdGggaW4gdGhlIGFuYWxvZyBtdWx0aXBsZXhlcnMgOiBjaGFubmVsIDEgLT4gNCA9PT4gQW5hbG9nIE11eCA9PT4gTVVYMCovCgkvKkdQSU9bMjBdJkdQSU9bMjFdIHVzZWQgdG8gY2hvb3NlIHRoZSByaWdodCBpbnB1dCovCglidHdyaXRlIChpbnB1dDw8MjAsQlQ4NDhfR1BJT19EQVRBKTsKCn0KCi8qCiAqIGl2YzEyMF9tdXhzZWwgW0FkZGVkIGJ5IEFsYW4gR2FyZmllbGQgPGFsYW5AZnJvbW9yYml0LmNvbT5dCiAqCiAqIFRoZSBJVkMxMjBHIHNlY3VyaXR5IGNhcmQgaGFzIDQgaTJjIGNvbnRyb2xsZWQgVERBODU0MCBtYXRyaXgKICogc3dpY2hlcnMgdG8gcHJvdmlkZSAxNiBjaGFubmVscyB0byBNVVgwLiBUaGUgVERBODU0MCdzIGhhdmUKICogNCBpbmRlcGVkYW50IG91dHB1dHMgYW5kIGFzIHN1Y2ggdGhlIElWQzEyMEcgYWxzbyBoYXMgdGhlCiAqIG9wdGlvbmFsICJNb25pdG9yIE91dCIgYnVzLiBUaGlzIGFsbG93cyB0aGUgY2FyZCB0byBiZSBsb29raW5nCiAqIGF0IG9uZSBpbnB1dCB3aGlsZSB0aGUgbW9uaXRvciBpcyBsb29raW5nIGF0IGFub3RoZXIuCiAqCiAqIFNpbmNlIEkndmUgY291bGRuJ3QgYmUgYm90aGVyZWQgZmlndXJpbmcgb3V0IGhvdyB0byBhZGQgYW4KICogaW5kZXBlbmRhbnQgbXV4c2VsIGZvciB0aGUgbW9uaXRvciBidXMsIEkndmUganVzdCBzZXQgaXQgdG8KICogd2hhdGV2ZXIgdGhlIGNhcmQgaXMgbG9va2luZyBhdC4KICoKICogIE9VVDAgb2YgdGhlIFREQTg1NDAncyBpcyBjb25uZWN0ZWQgdG8gTVVYMCAgICAgICAgICgweDAzKQogKiAgT1VUMSBvZiB0aGUgVERBODU0MCdzIGlzIGNvbm5lY3RlZCB0byAiTW9uaXRvciBPdXQiICAgICAgICAoMHgwQykKICoKICogIFREQTg1NDBfQUxUMyBJTjAtMyA9IENoYW5uZWwgMTMgLSAxNiAgICAgICAoMHgwMykKICogIFREQTg1NDBfQUxUNCBJTjAtMyA9IENoYW5uZWwgMSAtIDQgICAgICAgICAoMHgwMykKICogIFREQTg1NDBfQUxUNSBJTjAtMyA9IENoYW5uZWwgNSAtIDggICAgICAgICAoMHgwMykKICogIFREQTg1NDBfQUxUNiBJTjAtMyA9IENoYW5uZWwgOSAtIDEyICAgICAgICAgICAgICAgICgweDAzKQogKgogKi8KCi8qIEFsbCA3IHBvc3NpYmxlIHN1Yi1pZHMgZm9yIHRoZSBUREE4NTQwIE1hdHJpeCBTd2l0Y2hlciAqLwojZGVmaW5lIEkyQ19UREE4NTQwICAgICAgICAweDkwCiNkZWZpbmUgSTJDX1REQTg1NDBfQUxUMSAgIDB4OTIKI2RlZmluZSBJMkNfVERBODU0MF9BTFQyICAgMHg5NAojZGVmaW5lIEkyQ19UREE4NTQwX0FMVDMgICAweDk2CiNkZWZpbmUgSTJDX1REQTg1NDBfQUxUNCAgIDB4OTgKI2RlZmluZSBJMkNfVERBODU0MF9BTFQ1ICAgMHg5YQojZGVmaW5lIEkyQ19UREE4NTQwX0FMVDYgICAweDljCgpzdGF0aWMgdm9pZCBpdmMxMjBfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJLyogU2ltcGxlIG1hdGhzICovCglpbnQga2V5ID0gaW5wdXQgJSA0OwoJaW50IG1hdHJpeCA9IGlucHV0IC8gNDsKCglkcHJpbnRrKCJidHR2JWQ6IGl2YzEyMF9tdXhzZWw6IElucHV0IC0gJTAyZCB8IFREQSAtICUwMmQgfCBJbiAtICUwMmRcbiIsCgkJYnR2LT5jLm5yLCBpbnB1dCwgbWF0cml4LCBrZXkpOwoKCS8qIEhhbmRsZXMgdGhlIGlucHV0IHNlbGVjdGlvbiBvbiB0aGUgVERBODU0MCdzICovCglidHR2X0kyQ1dyaXRlKGJ0diwgSTJDX1REQTg1NDBfQUxUMywgMHgwMCwKCQkgICAgICAoKG1hdHJpeCA9PSAzKSA/IChrZXkgfCBrZXkgPDwgMikgOiAweDAwKSwgMSk7CglidHR2X0kyQ1dyaXRlKGJ0diwgSTJDX1REQTg1NDBfQUxUNCwgMHgwMCwKCQkgICAgICAoKG1hdHJpeCA9PSAwKSA/IChrZXkgfCBrZXkgPDwgMikgOiAweDAwKSwgMSk7CglidHR2X0kyQ1dyaXRlKGJ0diwgSTJDX1REQTg1NDBfQUxUNSwgMHgwMCwKCQkgICAgICAoKG1hdHJpeCA9PSAxKSA/IChrZXkgfCBrZXkgPDwgMikgOiAweDAwKSwgMSk7CglidHR2X0kyQ1dyaXRlKGJ0diwgSTJDX1REQTg1NDBfQUxUNiwgMHgwMCwKCQkgICAgICAoKG1hdHJpeCA9PSAyKSA/IChrZXkgfCBrZXkgPDwgMikgOiAweDAwKSwgMSk7CgoJLyogSGFuZGxlcyB0aGUgb3V0cHV0IGVuYWJsZXMgb24gdGhlIFREQTg1NDAncyAqLwoJYnR0dl9JMkNXcml0ZShidHYsIEkyQ19UREE4NTQwX0FMVDMsIDB4MDIsCgkJICAgICAgKChtYXRyaXggPT0gMykgPyAweDAzIDogMHgwMCksIDEpOyAgLyogMTMgLSAxNiAqLwoJYnR0dl9JMkNXcml0ZShidHYsIEkyQ19UREE4NTQwX0FMVDQsIDB4MDIsCgkJICAgICAgKChtYXRyaXggPT0gMCkgPyAweDAzIDogMHgwMCksIDEpOyAgLyogMS00ICovCglidHR2X0kyQ1dyaXRlKGJ0diwgSTJDX1REQTg1NDBfQUxUNSwgMHgwMiwKCQkgICAgICAoKG1hdHJpeCA9PSAxKSA/IDB4MDMgOiAweDAwKSwgMSk7ICAvKiA1LTggKi8KCWJ0dHZfSTJDV3JpdGUoYnR2LCBJMkNfVERBODU0MF9BTFQ2LCAweDAyLAoJCSAgICAgICgobWF0cml4ID09IDIpID8gMHgwMyA6IDB4MDApLCAxKTsgIC8qIDktMTIgKi8KCgkvKiBTZWxlY3RzIE1VWDAgZm9yIGlucHV0IG9uIHRoZSA4NzggKi8KCWJ0YW9yKCgwKTw8NSwgfigzPDw1KSwgQlQ4NDhfSUZPUk0pOwp9CgoKLyogUFhDMjAwIG11eHNlbCBoZWxwZXIKICogbHVrZUBzeXNlbmcuYW51LmVkdS5hdQogKiBhbm90aGVyIHRyYW5zcGxhbnQKICogZnJvbSBBbGVzc2FuZHJvIFJ1YmluaSAocnViaW5pQGxpbnV4Lml0KQogKgogKiBUaGVyZSBhcmUgNCBraW5kcyBvZiBjYXJkczoKICogUFhDMjAwTCB3aGljaCBpcyBidDg0OAogKiBQWEMyMDBGIHdoaWNoIGlzIGJ0ODQ4IHdpdGggUElDIGNvbnRyb2xsaW5nIG11eAogKiBQWEMyMDBBTCB3aGljaCBpcyBidDg3OAogKiBQWEMyMDBBRiB3aGljaCBpcyBidDg3OCB3aXRoIFBJQyBjb250cm9sbGluZyBtdXgKICovCiNkZWZpbmUgUFhfQ0ZHX1BYQzIwMEYgMHgwMQojZGVmaW5lIFBYX0ZMQUdfUFhDMjAwQSAgMHgwMDAwMTAwMCAvKiBhIHB4YzIwMEEgaXMgYnQtODc4IGJhc2VkICovCiNkZWZpbmUgUFhfSTJDX1BJQyAgICAgICAweDBmCiNkZWZpbmUgUFhfUFhDMjAwQV9DQVJESUQgMHgyMDBhMTI5NQojZGVmaW5lIFBYX0kyQ19DTURfQ0ZHICAgMHgwMAoKc3RhdGljIHZvaWQgUFhDMjAwX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCnsKCWludCByYzsKCWxvbmcgbXV4OwoJaW50IGJpdG1hc2s7Cgl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKCgkvKiBSZWFkIFBJQyBjb25maWcgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBQWEMyMDBGICovCgkvKiBQWF9JMkNfQ01EX0NGRyovCglidWZbMF09MDsKCWJ1ZlsxXT0wOwoJcmM9YnR0dl9JMkNXcml0ZShidHYsKFBYX0kyQ19QSUM8PDEpLGJ1ZlswXSxidWZbMV0sMSk7CglpZiAocmMpIHsKCSAgcHJpbnRrKEtFUk5fREVCVUcgImJ0dHYlZDogUFhDMjAwX211eHNlbDogcGljIGNmZyB3cml0ZSBmYWlsZWQ6JWRcbiIsIGJ0di0+Yy5ucixyYyk7CgkgIC8qIG5vdCBQWEMgPyBkbyBub3RoaW5nICovCgkgIHJldHVybjsKCX0KCglyYz1idHR2X0kyQ1JlYWQoYnR2LChQWF9JMkNfUElDPDwxKSxOVUxMKTsKCWlmICghKHJjICYgUFhfQ0ZHX1BYQzIwMEYpKSB7CgkgIHByaW50ayhLRVJOX0RFQlVHICJidHR2JWQ6IFBYQzIwMF9tdXhzZWw6IG5vdCBQWEMyMDBGIHJjOiVkIFxuIiwgYnR2LT5jLm5yLHJjKTsKCSAgcmV0dXJuOwoJfQoKCgkvKiBUaGUgbXVsdGlwbGV4ZXIgaW4gdGhlIDIwMEYgaXMgaGFuZGxlZCBieSB0aGUgR1BJTyBwb3J0ICovCgkvKiBnZXQgY29ycmVjdCBtYXBwaW5nIGJldHdlZW4gaW5wdXRzICAqLwoJLyogIG11eCA9IGJ0dHZfdHZjYXJkc1tidHYtPnR5cGVdLm11eHNlbFtpbnB1dF0gJiAzOyAqLwoJLyogKiogbm90IG5lZWRlZCE/ICAgKi8KCW11eCA9IGlucHV0OwoKCS8qIG1ha2Ugc3VyZSBvdXRwdXQgcGlucyBhcmUgZW5hYmxlZCAqLwoJLyogYml0bWFzaz0weDMwZjsgKi8KCWJpdG1hc2s9MHgzMDI7CgkvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgYSBQWEMyMDBBICovCglpZiAoYnR2LT5jYXJkaWQgPT0gUFhfUFhDMjAwQV9DQVJESUQpICB7CgkgICBiaXRtYXNrIF49IDB4MTgwOyAvKiB1c2UgNyBhbmQgOSwgbm90IDggYW5kIDkgKi8KCSAgIGJpdG1hc2sgfD0gNzw8NDsgLyogdGhlIERBQyAqLwoJfQoJYnR3cml0ZShiaXRtYXNrLCBCVDg0OF9HUElPX09VVF9FTik7CgoJYml0bWFzayA9IGJ0cmVhZChCVDg0OF9HUElPX0RBVEEpOwoJaWYgKGJ0di0+Y2FyZGlkID09IFBYX1BYQzIwMEFfQ0FSRElEKQoJICBiaXRtYXNrID0gKGJpdG1hc2sgJiB+MHgyODApIHwgKChtdXggJiAyKSA8PCA4KSB8ICgobXV4ICYgMSkgPDwgNyk7CgllbHNlIC8qIG9sZGVyIGRldmljZSAqLwoJICBiaXRtYXNrID0gKGJpdG1hc2sgJiB+MHgzMDApIHwgKChtdXggJiAzKSA8PCA4KTsKCWJ0d3JpdGUoYml0bWFzayxCVDg0OF9HUElPX0RBVEEpOwoKCS8qCgkgKiBXYXMgInRvIGJlIHNhZmUsIHNldCB0aGUgYnQ4NDggdG8gaW5wdXQgMCIKCSAqIEFjdHVhbGx5LCBzaW5jZSBpdCdzIG9rIGF0IGxvYWQgdGltZSwgYmV0dGVyIG5vdCBtZXNzaW5nCgkgKiB3aXRoIHRoZXNlIGJpdHMgKG9uIFBYQzIwMEFGIHlvdSBuZWVkIHRvIHNldCBtdXggMiBoZXJlKQoJICoKCSAqIG5lZWRlZCBiZWNhdXNlIGJ0dHYtZHJpdmVyIHNldHMgbXV4IGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KCSAqLwoJaWYgKGJ0di0+Y2FyZGlkID09IFBYX1BYQzIwMEFfQ0FSRElEKQoJICBidGFvcigyPDw1LCB+QlQ4NDhfSUZPUk1fTVVYU0VMLCBCVDg0OF9JRk9STSk7CgllbHNlIC8qIG9sZGVyIGRldmljZSAqLwoJICBidGFuZCh+QlQ4NDhfSUZPUk1fTVVYU0VMLEJUODQ4X0lGT1JNKTsKCglwcmludGsoS0VSTl9ERUJVRyAiYnR0diVkOiBzZXR0aW5nIGlucHV0IGNoYW5uZWwgdG86JWRcbiIsIGJ0di0+Yy5uciwoaW50KW11eCk7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIG1vdGhlcmJvYXJkIGNoaXBzZXQgc3BlY2lmaWMgc3R1ZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgp2b2lkIF9fZGV2aW5pdCBidHR2X2NoZWNrX2NoaXBzZXQodm9pZCkKewoJaW50IHBjaXBjaV9mYWlsID0gMDsKCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwoKCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgUENJUENJX0ZBSUwpCgkJcGNpcGNpX2ZhaWwgPSAxOwoJaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiAoUENJUENJX1RSSVRPTnxQQ0lQQ0lfTkFUT01BfFBDSVBDSV9WSUFFVEJGKSkKCQl0cml0b24xID0gMTsKCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgUENJUENJX1ZTRlgpCgkJdnNmeCA9IDE7CiNpZmRlZiBQQ0lQQ0lfQUxJTUFHSUsKCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgUENJUENJX0FMSU1BR0lLKQoJCWxhdGVuY3kgPSAweDBBOwojZW5kaWYKCgoJLyogcHJpbnQgd2FybmluZ3MgYWJvdXQgYW55IHF1aXJrcyBmb3VuZCAqLwoJaWYgKHRyaXRvbjEpCgkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0djogSG9zdCBicmlkZ2UgbmVlZHMgRVRCRiBlbmFibGVkLlxuIik7CglpZiAodnNmeCkKCQlwcmludGsoS0VSTl9JTkZPICJidHR2OiBIb3N0IGJyaWRnZSBuZWVkcyBWU0ZYIGVuYWJsZWQuXG4iKTsKCWlmIChwY2lwY2lfZmFpbCkgewoJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHY6IEJUODQ4IGFuZCB5b3VyIGNoaXBzZXQgbWF5IG5vdCB3b3JrIHRvZ2V0aGVyLlxuIik7CgkJaWYgKCFub19vdmVybGF5KSB7CgkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHY6IG92ZXJsYXkgd2lsbCBiZSBkaXNhYmxlZC5cbiIpOwoJCQlub19vdmVybGF5ID0gMTsKCQl9IGVsc2UgewoJCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2OiBvdmVybGF5IGZvcmNlZC4gVXNlIHRoaXMgb3B0aW9uIGF0IHlvdXIgb3duIHJpc2suXG4iKTsKCQl9Cgl9CglpZiAoVU5TRVQgIT0gbGF0ZW5jeSkKCQlwcmludGsoS0VSTl9JTkZPICJidHR2OiBwY2kgbGF0ZW5jeSBmaXh1cCBbJWRdXG4iLGxhdGVuY3kpOwoJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAoJCQkJICAgICAgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0MSwgZGV2KSkpIHsKCQl1bnNpZ25lZCBjaGFyIGI7CgkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUzLCAmYik7CgkJaWYgKGJ0dHZfZGVidWcpCgkJCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IEhvc3QgYnJpZGdlOiA4MjQ0MUZYIE5hdG9tYSwgIgoJCQkgICAgICAgImJ1ZmNvbj0weCUwMnhcbiIsYik7Cgl9Cn0KCmludCBfX2RldmluaXQgYnR0dl9oYW5kbGVfY2hpcHNldChzdHJ1Y3QgYnR0diAqYnR2KQp7Cgl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CgoJaWYgKCF0cml0b24xICYmICF2c2Z4ICYmIFVOU0VUID09IGxhdGVuY3kpCgkJcmV0dXJuIDA7CgoJaWYgKGJ0dHZfdmVyYm9zZSkgewoJCWlmICh0cml0b24xKQoJCQlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IGVuYWJsaW5nIEVUQkYgKDQzMEZYL1ZQMyBjb21wYXRpYmlsdHkpXG4iLGJ0di0+Yy5ucik7CgkJaWYgKHZzZnggJiYgYnR2LT5pZCA+PSA4NzgpCgkJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogZW5hYmxpbmcgVlNGWFxuIixidHYtPmMubnIpOwoJCWlmIChVTlNFVCAhPSBsYXRlbmN5KQoJCQlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IHNldHRpbmcgcGNpIHRpbWVyIHRvICVkXG4iLAoJCQkgICAgICAgYnR2LT5jLm5yLGxhdGVuY3kpOwoJfQoKCWlmIChidHYtPmlkIDwgODc4KSB7CgkJLyogYnQ4NDggKG1pcyl1c2VzIGEgYml0IGluIHRoZSBpcnEgbWFzayBmb3IgZXRiZiAqLwoJCWlmICh0cml0b24xKQoJCQlidHYtPnRyaXRvbjEgPSBCVDg0OF9JTlRfRVRCRjsKCX0gZWxzZSB7CgkJLyogYnQ4NzggaGFzIGEgYml0IGluIHRoZSBwY2kgY29uZmlnIHNwYWNlIGZvciBpdCAqLwoJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGJ0di0+Yy5wY2ksIEJUODc4X0RFVkNUUkwsICZjb21tYW5kKTsKCQlpZiAodHJpdG9uMSkKCQkJY29tbWFuZCB8PSBCVDg3OF9FTl9UQkZYOwoJCWlmICh2c2Z4KQoJCQljb21tYW5kIHw9IEJUODc4X0VOX1ZTRlg7CgkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGJ0di0+Yy5wY2ksIEJUODc4X0RFVkNUUkwsIGNvbW1hbmQpOwoJfQoJaWYgKFVOU0VUICE9IGxhdGVuY3kpCgkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGJ0di0+Yy5wY2ksIFBDSV9MQVRFTkNZX1RJTUVSLCBsYXRlbmN5KTsKCXJldHVybiAwOwp9CgoKLyoKICogTG9jYWwgdmFyaWFibGVzOgogKiBjLWJhc2ljLW9mZnNldDogOAogKiBFbmQ6CiAqLwo=