LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJpYXNfb2JqZWN0LmgKICogVmVyc2lvbjogICAgICAgCiAqIERlc2NyaXB0aW9uOiAgIAogKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCiAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICogQ3JlYXRlZCBhdDogICAgVGh1IE9jdCAgMSAyMjo0OTo1MCAxOTk4CiAqIE1vZGlmaWVkIGF0OiAgIFdlZCBEZWMgMTUgMTE6MjA6NTcgMTk5OQogKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIAogKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqICAgICAgCiAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAogKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCiAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKiAgCiAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCiAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICogICAgIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZuZGVmIExNX0lBU19PQkpFQ1RfSAojZGVmaW5lIExNX0lBU19PQkpFQ1RfSAoKI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KI2luY2x1ZGUgPG5ldC9pcmRhL2lycXVldWUuaD4KCi8qIExNLUlBUyBBdHRyaWJ1dGUgdHlwZXMgKi8KI2RlZmluZSBJQVNfTUlTU0lORyAwCiNkZWZpbmUgSUFTX0lOVEVHRVIgMQojZGVmaW5lIElBU19PQ1RfU0VRIDIKI2RlZmluZSBJQVNfU1RSSU5HICAzCgovKiBPYmplY3Qgb3duZXJzaGlwIG9mIGF0dHJpYnV0ZXMgKHVzZXIgb3Iga2VybmVsKSAqLwojZGVmaW5lIElBU19LRVJORUxfQVRUUgkwCiNkZWZpbmUgSUFTX1VTRVJfQVRUUgkxCgovKgogKiAgTE0tSUFTIE9iamVjdAogKi8Kc3RydWN0IGlhc19vYmplY3QgewoJaXJkYV9xdWV1ZV90IHE7ICAgICAvKiBNdXN0IGJlIGZpcnN0ISAqLwoJbWFnaWNfdCBtYWdpYzsKCQoJY2hhciAgKm5hbWU7CglpbnQgICBpZDsKCWhhc2hiaW5fdCAqYXR0cmliczsKfTsKCi8qCiAqICBWYWx1ZXMgdXNlZCBieSBMTS1JQVMgYXR0cmlidXRlcwogKi8Kc3RydWN0IGlhc192YWx1ZSB7CiAgICAgICAgX191OCAgICB0eXBlOyAgICAvKiBWYWx1ZSBkZXNjcmlwdGlvbiAqLwoJX191OAlvd25lcjsJLyogTWFuYWdlZCBmcm9tIHVzZXIva2VybmVsIHNwYWNlICovCglpbnQgICAgIGNoYXJzZXQ7IC8qIE9ubHkgdXNlZCBieSBzdHJpbmcgdHlwZSAqLwogICAgICAgIGludCAgICAgbGVuOwoJCgkvKiBWYWx1ZSAqLwoJdW5pb24gewoJCWludCBpbnRlZ2VyOwoJCWNoYXIgKnN0cmluZzsKCQlfX3U4ICpvY3Rfc2VxOwoJfSB0Owp9OwoKLyoKICogIEF0dHJpYnV0ZXMgdXNlZCBieSBMTS1JQVMgb2JqZWN0cwogKi8Kc3RydWN0IGlhc19hdHRyaWIgewoJaXJkYV9xdWV1ZV90IHE7IC8qIE11c3QgYmUgZmlyc3QhICovCglpbnQgbWFnaWM7CgogICAgICAgIGNoYXIgKm5hbWU7ICAgCSAgICAgICAgIC8qIEF0dHJpYnV0ZSBuYW1lICovCglzdHJ1Y3QgaWFzX3ZhbHVlICp2YWx1ZTsgLyogQXR0cmlidXRlIHZhbHVlICovCn07CgpzdHJ1Y3QgaWFzX29iamVjdCAqaXJpYXNfbmV3X29iamVjdChjaGFyICpuYW1lLCBpbnQgaWQpOwp2b2lkIGlyaWFzX2luc2VydF9vYmplY3Qoc3RydWN0IGlhc19vYmplY3QgKm9iaik7CmludCAgaXJpYXNfZGVsZXRlX29iamVjdChzdHJ1Y3QgaWFzX29iamVjdCAqb2JqKTsKaW50ICBpcmlhc19kZWxldGVfYXR0cmliKHN0cnVjdCBpYXNfb2JqZWN0ICpvYmosIHN0cnVjdCBpYXNfYXR0cmliICphdHRyaWIsCgkJCSBpbnQgY2xlYW5vYmplY3QpOwp2b2lkIF9faXJpYXNfZGVsZXRlX29iamVjdChzdHJ1Y3QgaWFzX29iamVjdCAqb2JqKTsKCnZvaWQgaXJpYXNfYWRkX2ludGVnZXJfYXR0cmliKHN0cnVjdCBpYXNfb2JqZWN0ICpvYmosIGNoYXIgKm5hbWUsIGludCB2YWx1ZSwKCQkJICAgICAgaW50IHVzZXIpOwp2b2lkIGlyaWFzX2FkZF9zdHJpbmdfYXR0cmliKHN0cnVjdCBpYXNfb2JqZWN0ICpvYmosIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlLAoJCQkgICAgIGludCB1c2VyKTsKdm9pZCBpcmlhc19hZGRfb2N0c2VxX2F0dHJpYihzdHJ1Y3QgaWFzX29iamVjdCAqb2JqLCBjaGFyICpuYW1lLCBfX3U4ICpvY3RldHMsCgkJCSAgICAgaW50IGxlbiwgaW50IHVzZXIpOwppbnQgaXJpYXNfb2JqZWN0X2NoYW5nZV9hdHRyaWJ1dGUoY2hhciAqb2JqX25hbWUsIGNoYXIgKmF0dHJpYl9uYW1lLCAKCQkJCSAgc3RydWN0IGlhc192YWx1ZSAqbmV3X3ZhbHVlKTsKc3RydWN0IGlhc19vYmplY3QgKmlyaWFzX2ZpbmRfb2JqZWN0KGNoYXIgKm5hbWUpOwpzdHJ1Y3QgaWFzX2F0dHJpYiAqaXJpYXNfZmluZF9hdHRyaWIoc3RydWN0IGlhc19vYmplY3QgKm9iaiwgY2hhciAqbmFtZSk7CgpzdHJ1Y3QgaWFzX3ZhbHVlICppcmlhc19uZXdfc3RyaW5nX3ZhbHVlKGNoYXIgKnN0cmluZyk7CnN0cnVjdCBpYXNfdmFsdWUgKmlyaWFzX25ld19pbnRlZ2VyX3ZhbHVlKGludCBpbnRlZ2VyKTsKc3RydWN0IGlhc192YWx1ZSAqaXJpYXNfbmV3X29jdHNlcV92YWx1ZShfX3U4ICpvY3RzZXEgLCBpbnQgbGVuKTsKc3RydWN0IGlhc192YWx1ZSAqaXJpYXNfbmV3X21pc3NpbmdfdmFsdWUodm9pZCk7CnZvaWQgaXJpYXNfZGVsZXRlX3ZhbHVlKHN0cnVjdCBpYXNfdmFsdWUgKnZhbHVlKTsKCmV4dGVybiBzdHJ1Y3QgaWFzX3ZhbHVlIGlyaWFzX21pc3Npbmc7CmV4dGVybiBoYXNoYmluX3QgKmlyaWFzX29iamVjdHM7CgojZW5kaWYK