LyoqCiAqIEBmaWxlIGZsYWdzX2FwaS5oCiAqIEBicmllZiBmbGFnc7fWx/i907/aCiAqCiAqIENvcHlyaWdodCAoQykgMjAyMyBTYW5lY2hpcHMgVGVjaG5vbG9neSBDby4sIEx0ZC4KICogQGF1dGhvciAKICogQGluZ3JvdXAgCiAqIAogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4go6ix2NGho7pHUEx2MiBMaWNlbmNlo6kKICoKICovCgoKI2lmbmRlZiBGTEFHU19BUElfSAojZGVmaW5lIEZMQUdTX0FQSV9ICgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIGhlYWRlciBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2luY2x1ZGUgInB1Yl9mbGFncy5oIgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNybyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKgogKiBAYnJpZWYgILP1yry7r2ZsYWdzt9bH+AogKiBAcGFyYW1bb3V0XSAgcF9mbGFnc19pbmZvICBmbGFnc7P1yry7r8r9vt0KICogQHJldHVybiAgMCCz9cq8u6+zybmmLCAtMSCz9cq8u6/Kp7DcCiAqIEBub3RlCiAqLwppbnQgZmxhZ3NfaW5pdCgpOwoKCi8qKgogKiBAYnJpZWYgILvxyKFmbGFnc7fWx/jE2sjdCiAqIEBwYXJhbVtvdXRdICBwX2ZsYWdzX2luZm8gIGZsYWdzt9bH+MTayN0KICogQHJldHVybiAgMCC78cihs8m5piwgLTEgu/HIocqnsNwKICogQG5vdGUKICovCmludCBmbGFnc19nZXQoVF9GTEFHU19JTkZPICpwX2ZsYWdzX2luZm8pOwoKCi8qKgogKiBAYnJpZWYgIMno1sNmbGFnc7fWx/jE2sjdCiAqIEBwYXJhbVtpbl0gIHBfZmxhZ3NfaW5mbyAgZmxhZ3O31sf4xNrI3QogKiBAcmV0dXJuICAwIMno1sOzybmmLCAtMSDJ6NbDyqew3AogKiBAbm90ZQogKi8KaW50IGZsYWdzX3NldChUX0ZMQUdTX0lORk8gKnBfZmxhZ3NfaW5mbyk7CgoKLyoqCiAqIEBicmllZiAgu/HIoWZsYWdzt9bH+NbQdWJpZnPXtMysCiAqIEBwYXJhbVtvdXRdICBzdGF0dXMgIHViaWZz17TMrAogKiBAcmV0dXJuICAwILvxyKGzybmmLCAtMSC78cihyqew3AogKiBAbm90ZQogKi8KaW50IGZsYWdzX2dldF91Ymlmc19zdGF0dXMoVF9VQklGU19TVEFUVVMgKnBfdWJpZnNfc3RhdHVzKTsKCgovKioKICogQGJyaWVmICDJ6NbDZmxhZ3O31sf41tB1Ymlmc9e0zKwKICogQHBhcmFtW2luXSAgc3RhdHVzICB1Ymlmc9e0zKwKICogQHJldHVybiAgMCDJ6NbDs8m5piwgLTEgyejWw8qnsNwKICogQG5vdGUKICovCmludCBmbGFnc19zZXRfdWJpZnNfc3RhdHVzKFRfVUJJRlNfU1RBVFVTICpwX3ViaWZzX3N0YXR1cyk7CgoKLyoqCiAqIEBicmllZiAgu/HIobWxx7DPtc2zCiAqIEByZXR1cm4gILWxx7DUy9DQz7XNswogKiBAbm90ZQogKi8KaW50IGZsYWdzX2dldF9jdXJyZW50X3N5c3RlbSgpOwoKLyoqCiAqIEBicmllZiAgu/HIoWZsYWdzt9bH+NbQbnZyb19mbGFn17TMrAogKiBAcGFyYW1bb3V0XSAgCiAqIEByZXR1cm4gIG52cm9fZmxhZwogKiBAbm90ZQogKi8KdW5zaWduZWQgaW50IGZsYWdzX2dldF9udnJvZmxhZyh2b2lkKTsKCi8qKgogKiBAYnJpZWYgIMno1sNmbGFnc7fWx/jW0G52cm9fZmxhZwogKiBAcGFyYW1baW5dICBmbGFnIG52cm/XtMysCiAqIEByZXR1cm4gIDAgyejWw7PJuaYsIC0xIMno1sPKp7DcCiAqIEBub3RlCiAqLwppbnQgZmxhZ3Nfc2V0X252cm9mbGFnKHVuc2lnbmVkIGludCBmbGFnKTsKCgovKioKICogQGJyaWVmICC78cihZmxhZ3O31sf4xNrI3SjO3kNSQykKICogQHBhcmFtW291dF0gIHBfZmxhZ3NfaW5mbyAgZmxhZ3O31sf4xNrI3QogKiBAcmV0dXJuICAwILvxyKGzybmmLCAtMSC78cihyqew3AogKiBAbm90ZSAgtMtBUEm99tPD09q197Lio6zV/cq9tPrC67K7v8nKudPDCgogKi8KaW50IGZsYWdzX2dldF9ub2NyYyhUX0ZMQUdTX0lORk8gKnBfZmxhZ3NfaW5mbyk7CgoKLyoqCiAqIEBicmllZiAgyejWw2ZsYWdzt9bH+MTayN0ozt5DUkMpCiAqIEBwYXJhbVtpbl0gIHBfZmxhZ3NfaW5mbyAgZmxhZ3O31sf4xNrI3QogKiBAcmV0dXJuICAwIMno1sOzybmmLCAtMSDJ6NbDyqew3AogKiBAbm90ZSAgtMtBUEm99tPD09q197Lio6zV/cq9tPrC67K7v8nKudPDCiAqLwppbnQgZmxhZ3Nfc2V0X25vY3JjKFRfRkxBR1NfSU5GTyAqcF9mbGFnc19pbmZvKTsKCgovKioKICogQGJyaWVmICCz9cq8u69DUkMzMsLrse0o0KG2yykKICogQHBhcmFtICDO3gogKiBAcmV0dXJuIM7eCiAqIEBub3RlCiAqLwp2b2lkIGNyYzMyaW5pdF9sZSh2b2lkKTsKCgovKioKICogQGJyaWVmICC8xsvjQ1JDMzLQo9Hpwuso0KG2yykKICogQHBhcmFtW2luXSAgY3JjILP1yrzWtQogKiBAcGFyYW1baW5dICBwICDQ6NKqvMbL40NSQzMy0KPR6cLrtcTK/b7dYnVmZmVy1rjV6wogKiBAcGFyYW1baW5dICBsZW4gIGJ1ZmZlciBAcLXEtPPQoQogKiBAcmV0dXJuICC8xsvjy/m1w7XEQ1JDMzLQo9HpwusKICogQG5vdGUKICovCnVuc2lnbmVkIGludCBjcmMzMl9sZSh1bnNpZ25lZCBpbnQgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKTsKCgojZW5kaWYgLy8gRkxBR1NfQVBJX0gKCg==