LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgYWZfaXJkYS5oCiAqIFZlcnNpb246ICAgICAgIDEuMAogKiBEZXNjcmlwdGlvbjogICBJckRBIHNvY2tldHMgZGVjbGFyYXRpb25zCiAqIFN0YXR1czogICAgICAgIFN0YWJsZQogKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIENyZWF0ZWQgYXQ6ICAgIFR1ZSBEZWMgIDkgMjE6MTM6MTIgMTk5NwogKiBNb2RpZmllZCBhdDogICBGcmkgSmFuIDI4IDEzOjE2OjMyIDIwMDAKICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogKiAKICogICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgogKiAgICAgIAogKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAogKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICogIAogKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgogKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAqICAgICAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBBRl9JUkRBX0gKI2RlZmluZSBBRl9JUkRBX0gKCiNpbmNsdWRlIDxsaW51eC9pcmRhLmg+CiNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiNpbmNsdWRlIDxuZXQvaXJkYS9pcmlhcC5oPgkJLyogc3RydWN0IGlyaWFwX2NiICovCiNpbmNsdWRlIDxuZXQvaXJkYS9pcmlhc19vYmplY3QuaD4JLyogc3RydWN0IGlhc192YWx1ZSAqLwojaW5jbHVkZSA8bmV0L2lyZGEvaXJsbXAuaD4JCS8qIHN0cnVjdCBsc2FwX2NiICovCiNpbmNsdWRlIDxuZXQvaXJkYS9pcnR0cC5oPgkJLyogc3RydWN0IHRzYXBfY2IgKi8KI2luY2x1ZGUgPG5ldC9pcmRhL2Rpc2NvdmVyeS5oPgkJLyogc3RydWN0IGRpc2NvdmVyeV90ICovCiNpbmNsdWRlIDxuZXQvc29jay5oPgoKLyogSXJEQSBTb2NrZXQgKi8Kc3RydWN0IGlyZGFfc29jayB7CgkvKiBzdHJ1Y3Qgc29jayBoYXMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciBvZiBpcmRhX3NvY2sgKi8KCXN0cnVjdCBzb2NrIHNrOwoJX191MzIgc2FkZHI7ICAgICAgICAgIC8qIG15IGxvY2FsIGFkZHJlc3MgKi8KCV9fdTMyIGRhZGRyOyAgICAgICAgICAvKiBwZWVyIGFkZHJlc3MgKi8KCglzdHJ1Y3QgbHNhcF9jYiAqbHNhcDsgLyogTFNBUCB1c2VkIGJ5IFVsdHJhICovCglfX3U4ICBwaWQ7ICAgICAgICAgICAgLyogUHJvdG9jb2wgSVAgKFBJRCkgdXNlZCBieSBVbHRyYSAqLwoKCXN0cnVjdCB0c2FwX2NiICp0c2FwOyAvKiBUU0FQIHVzZWQgYnkgdGhpcyBjb25uZWN0aW9uICovCglfX3U4IGR0c2FwX3NlbDsgICAgICAgLyogcmVtb3RlIFRTQVAgYWRkcmVzcyAqLwoJX191OCBzdHNhcF9zZWw7ICAgICAgIC8qIGxvY2FsIFRTQVAgYWRkcmVzcyAqLwoJCglfX3UzMiBtYXhfc2R1X3NpemVfcng7CglfX3UzMiBtYXhfc2R1X3NpemVfdHg7CglfX3UzMiBtYXhfZGF0YV9zaXplOwoJX191OCAgbWF4X2hlYWRlcl9zaXplOwoJc3RydWN0IHFvc19pbmZvIHFvc190eDsKCglfX3UxNl9ob3N0X29yZGVyIG1hc2s7ICAgICAgICAgICAvKiBIaW50IGJpdHMgbWFzayAqLwoJX191MTZfaG9zdF9vcmRlciBoaW50czsgICAgICAgICAgLyogSGludCBiaXRzICovCgoJdm9pZCAqY2tleTsgICAgICAgICAgIC8qIElyTE1QIGNsaWVudCBoYW5kbGUgKi8KCXZvaWQgKnNrZXk7ICAgICAgICAgICAvKiBJckxNUCBzZXJ2aWNlIGhhbmRsZSAqLwoKCXN0cnVjdCBpYXNfb2JqZWN0ICppYXNfb2JqOyAgIC8qIE91ciBzZXJ2aWNlIG5hbWUgKyBsc2FwIGluIElBUyAqLwoJc3RydWN0IGlyaWFwX2NiICppcmlhcDsJICAgICAgLyogVXNlZCB0byBxdWVyeSByZW1vdGUgSUFTICovCglzdHJ1Y3QgaWFzX3ZhbHVlICppYXNfcmVzdWx0OyAvKiBSZXN1bHQgb2YgcmVtb3RlIElBUyBxdWVyeSAqLwoKCWhhc2hiaW5fdCAqY2FjaGVsb2c7CQkvKiBSZXN1bHQgb2YgZGlzY292ZXJ5IHF1ZXJ5ICovCglfX3UzMiBjYWNoZWRhZGRyOwkvKiBSZXN1bHQgb2Ygc2VsZWN0aXZlIGRpc2NvdmVyeSBxdWVyeSAqLwoKCWludCBuc2xvdHM7ICAgICAgICAgICAvKiBOdW1iZXIgb2Ygc2xvdHMgdG8gdXNlIGZvciBkaXNjb3ZlcnkgKi8KCglpbnQgZXJybm87ICAgICAgICAgICAgLyogc3RhdHVzIG9mIHRoZSBJQVMgcXVlcnkgKi8KCgl3YWl0X3F1ZXVlX2hlYWRfdCBxdWVyeV93YWl0OwkvKiBXYWl0IGZvciB0aGUgYW5zd2VyIHRvIGEgcXVlcnkgKi8KCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nOwkvKiBUaW1lb3V0IGZvciBkaXNjb3ZlcnkgKi8KCglMT0NBTF9GTE9XIHR4X2Zsb3c7CglMT0NBTF9GTE9XIHJ4X2Zsb3c7Cn07CgpzdGF0aWMgaW5saW5lIHN0cnVjdCBpcmRhX3NvY2sgKmlyZGFfc2soc3RydWN0IHNvY2sgKnNrKQp7CglyZXR1cm4gKHN0cnVjdCBpcmRhX3NvY2sgKilzazsKfQoKI2VuZGlmIC8qIEFGX0lSREFfSCAqLwo=