LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJtb2QuYwogKiBWZXJzaW9uOiAgICAgICAwLjkKICogRGVzY3JpcHRpb246ICAgSXJEQSBzdGFjayBtYWluIGVudHJ5IHBvaW50cwogKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCiAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICogQ3JlYXRlZCBhdDogICAgTW9uIERlYyAxNSAxMzo1NTozOSAxOTk3CiAqIE1vZGlmaWVkIGF0OiAgIFdlZCBKYW4gIDUgMTU6MTI6NDEgMjAwMAogKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIAogKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk5LTIwMDAgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CiAqICAgICAgCiAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAogKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCiAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKiAgCiAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCiAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICogICAgIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKgogKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG1haW4gZW50cnkgcG9pbnRzIG9mIHRoZSBJckRBIHN0YWNrLgogKiBUaGV5IGFyZSBpbiB0aGlzIGZpbGUgYW5kIG5vdCBhZl9pcmRhLmMgYmVjYXVzZSBzb21lIGRldmVsb3BwZXJzCiAqIGFyZSB1c2luZyB0aGUgSXJEQSBzdGFjayB3aXRob3V0IHRoZSBzb2NrZXQgQVBJIChjb21waWxpbmcgb3V0CiAqIGFmX2lyZGEuYykuCiAqIEplYW4gSUkKICovCgojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgoKI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KI2luY2x1ZGUgPG5ldC9pcmRhL2lybW9kLmg+CQkvKiBub3RpZnlfdCAqLwojaW5jbHVkZSA8bmV0L2lyZGEvaXJsYXAuaD4JCS8qIGlybGFwX2luaXQgKi8KI2luY2x1ZGUgPG5ldC9pcmRhL2lybG1wLmg+CQkvKiBpcmxtcF9pbml0ICovCiNpbmNsdWRlIDxuZXQvaXJkYS9pcmlhcC5oPgkJLyogaXJpYXBfaW5pdCAqLwojaW5jbHVkZSA8bmV0L2lyZGEvaXJ0dHAuaD4JCS8qIGlydHRwX2luaXQgKi8KI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGFfZGV2aWNlLmg+CS8qIGlyZGFfZGV2aWNlX2luaXQgKi8KCi8qIGlycHJvYy5jICovCmV4dGVybiB2b2lkIGlyZGFfcHJvY19yZWdpc3Rlcih2b2lkKTsKZXh0ZXJuIHZvaWQgaXJkYV9wcm9jX3VucmVnaXN0ZXIodm9pZCk7Ci8qIGlyc3lzY3RsLmMgKi8KZXh0ZXJuIGludCAgaXJkYV9zeXNjdGxfcmVnaXN0ZXIodm9pZCk7CmV4dGVybiB2b2lkIGlyZGFfc3lzY3RsX3VucmVnaXN0ZXIodm9pZCk7Ci8qIGFmX2lyZGEuYyAqLwpleHRlcm4gaW50ICBpcnNvY2tfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgaXJzb2NrX2NsZWFudXAodm9pZCk7Ci8qIGlybGFwX2ZyYW1lLmMgKi8KZXh0ZXJuIGludCAgaXJsYXBfZHJpdmVyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLCAKCQkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CgovKgogKiBNb2R1bGUgcGFyYW1ldGVycwogKi8KI2lmZGVmIENPTkZJR19JUkRBX0RFQlVHCnVuc2lnbmVkIGludCBpcmRhX2RlYnVnID0gSVJEQV9ERUJVR19MRVZFTDsKbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpcmRhX2RlYnVnLCB1aW50LCAwKTsKTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIklSREEgZGVidWdnaW5nIGxldmVsIik7CkVYUE9SVF9TWU1CT0woaXJkYV9kZWJ1Zyk7CiNlbmRpZgoKLyogUGFja2V0IHR5cGUgaGFuZGxlci4KICogVGVsbCB0aGUga2VybmVsIGhvdyBJckRBIHBhY2tldHMgc2hvdWxkIGJlIGhhbmRsZWQuCiAqLwpzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlyZGFfcGFja2V0X3R5cGUgPSB7CgkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVJEQSksCgkuZnVuYwk9IGlybGFwX2RyaXZlcl9yY3YsCS8qIFBhY2tldCB0eXBlIGhhbmRsZXIgaXJsYXBfZnJhbWUuYyAqLwp9OwoKLyoKICogRnVuY3Rpb24gaXJkYV9ub3RpZnlfaW5pdCAobm90aWZ5KQogKgogKiAgICBVc2VkIGZvciBpbml0aWFsaXppbmcgdGhlIG5vdGlmeSBzdHJ1Y3R1cmUKICoKICovCnZvaWQgaXJkYV9ub3RpZnlfaW5pdChub3RpZnlfdCAqbm90aWZ5KQp7Cglub3RpZnktPmRhdGFfaW5kaWNhdGlvbiA9IE5VTEw7Cglub3RpZnktPnVkYXRhX2luZGljYXRpb24gPSBOVUxMOwoJbm90aWZ5LT5jb25uZWN0X2NvbmZpcm0gPSBOVUxMOwoJbm90aWZ5LT5jb25uZWN0X2luZGljYXRpb24gPSBOVUxMOwoJbm90aWZ5LT5kaXNjb25uZWN0X2luZGljYXRpb24gPSBOVUxMOwoJbm90aWZ5LT5mbG93X2luZGljYXRpb24gPSBOVUxMOwoJbm90aWZ5LT5zdGF0dXNfaW5kaWNhdGlvbiA9IE5VTEw7Cglub3RpZnktPmluc3RhbmNlID0gTlVMTDsKCXN0cmxjcHkobm90aWZ5LT5uYW1lLCAiVW5rbm93biIsIHNpemVvZihub3RpZnktPm5hbWUpKTsKfQpFWFBPUlRfU1lNQk9MKGlyZGFfbm90aWZ5X2luaXQpOwoKLyoKICogRnVuY3Rpb24gaXJkYV9pbml0ICh2b2lkKQogKgogKiAgUHJvdG9jb2wgc3RhY2sgaW5pdGlhbGlzYXRpb24gZW50cnkgcG9pbnQuCiAqICBJbml0aWFsaXNlIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIElyREEgc3RhY2sKICovCnN0YXRpYyBpbnQgX19pbml0IGlyZGFfaW5pdCh2b2lkKQp7CglJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwoKCS8qIExvd2VyIGxheWVyIG9mIHRoZSBzdGFjayAqLwogCWlybG1wX2luaXQoKTsKCWlybGFwX2luaXQoKTsKCQoJLyogSGlnaGVyIGxheWVycyBvZiB0aGUgc3RhY2sgKi8KCWlyaWFwX2luaXQoKTsKIAlpcnR0cF9pbml0KCk7CglpcnNvY2tfaW5pdCgpOwoJCgkvKiBBZGQgSXJEQSBwYWNrZXQgdHlwZSAoU3RhcnQgcmVjZWl2aW5nIHBhY2tldHMpICovCiAgICAgICAgZGV2X2FkZF9wYWNrKCZpcmRhX3BhY2tldF90eXBlKTsKCgkvKiBFeHRlcm5hbCBBUElzICovCiNpZmRlZiBDT05GSUdfUFJPQ19GUwoJaXJkYV9wcm9jX3JlZ2lzdGVyKCk7CiNlbmRpZgojaWZkZWYgQ09ORklHX1NZU0NUTAoJaXJkYV9zeXNjdGxfcmVnaXN0ZXIoKTsKI2VuZGlmCgoJLyogRHJpdmVyL2RvbmdsZSBzdXBwb3J0ICovCiAJaXJkYV9kZXZpY2VfaW5pdCgpOwoKCXJldHVybiAwOwp9CgovKgogKiBGdW5jdGlvbiBpcmRhX2NsZWFudXAgKHZvaWQpCiAqCiAqICBQcm90b2NvbCBzdGFjayBjbGVhbnVwL3JlbW92YWwgZW50cnkgcG9pbnQuCiAqICBDbGVhbnVwIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIElyREEgc3RhY2sKICovCnN0YXRpYyB2b2lkIF9fZXhpdCBpcmRhX2NsZWFudXAodm9pZCkKewoJLyogUmVtb3ZlIEV4dGVybmFsIEFQSXMgKi8KI2lmZGVmIENPTkZJR19TWVNDVEwKCWlyZGFfc3lzY3RsX3VucmVnaXN0ZXIoKTsKI2VuZGlmCQojaWZkZWYgQ09ORklHX1BST0NfRlMKCWlyZGFfcHJvY191bnJlZ2lzdGVyKCk7CiNlbmRpZgoKCS8qIFJlbW92ZSBJckRBIHBhY2tldCB0eXBlIChzdG9wIHJlY2VpdmluZyBwYWNrZXRzKSAqLwogICAgICAgIGRldl9yZW1vdmVfcGFjaygmaXJkYV9wYWNrZXRfdHlwZSk7CgkKCS8qIFJlbW92ZSBoaWdoZXIgbGF5ZXJzICovCglpcnNvY2tfY2xlYW51cCgpOwoJaXJ0dHBfY2xlYW51cCgpOwoJaXJpYXBfY2xlYW51cCgpOwoKCS8qIFJlbW92ZSBsb3dlciBsYXllcnMgKi8KCWlyZGFfZGV2aWNlX2NsZWFudXAoKTsKCWlybGFwX2NsZWFudXAoKTsgLyogTXVzdCBiZSBkb25lIGJlZm9yZSBpcmxtcF9jbGVhbnVwKCkhIERCICovCgoJLyogUmVtb3ZlIG1pZGRsZSBsYXllciAqLwoJaXJsbXBfY2xlYW51cCgpOwp9CgovKgogKiBUaGUgSXJEQSBzdGFjayBtdXN0IGJlIGluaXRpYWxpc2VkICpiZWZvcmUqIGRyaXZlcnMgZ2V0IGluaXRpYWxpc2VkLAogKiBhbmQgKmJlZm9yZSogaGlnaGVyIHByb3RvY29scyAoSXJMQU4vSXJDT01NL0lyTkVUKSBnZXQgaW5pdGlhbGlzZWQsCiAqIG90aGVyd2lzZSBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuIChoYXNoYmlucyB3aWxsIGJlIE5VTEwgZm9yIGV4YW1wbGUpLgogKiBUaG9zZSBtb2R1bGVzIGFyZSBhdCBtb2R1bGVfaW5pdCgpL2RldmljZV9pbml0Y2FsbCgpIGxldmVsLgogKgogKiBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgbmVlZHMgdG8gYmUgaW5pdGlhbGlzZWQgKmFmdGVyKiB0aGUgYmFzaWMKICogbmV0d29ya2luZywgdGhlIC9wcm9jL25ldCBmaWxlc3lzdGVtIGFuZCBzeXNjdGwgbW9kdWxlLiBUaG9zZSBhcmUKICogY3VycmVudGx5IGluaXRpYWxpc2VkIGluIC4uLi9pbml0L21haW4uYyAoYmVmb3JlIGluaXRjYWxscykuCiAqIEFsc28sIElyREEgZHJpdmVycyBuZWVkcyB0byBiZSBpbml0aWFsaXNlZCAqYWZ0ZXIqIHRoZSByYW5kb20gbnVtYmVyCiAqIGdlbmVyYXRvciAobWFpbiBzdGFjayBhbmQgaGlnaGVyIGxheWVyIGluaXQgZG9uJ3QgbmVlZCBpdCBhbnltb3JlKS4KICoKICogSmVhbiBJSQogKi8Kc3Vic3lzX2luaXRjYWxsKGlyZGFfaW5pdCk7Cm1vZHVsZV9leGl0KGlyZGFfY2xlYW51cCk7CiAKTU9EVUxFX0FVVEhPUigiRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiAmIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4iKTsKTU9EVUxFX0RFU0NSSVBUSU9OKCJUaGUgTGludXggSXJEQSBQcm90b2NvbCBTdGFjayIpOyAKTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpNT0RVTEVfQUxJQVNfTkVUUFJPVE8oUEZfSVJEQSk7Cg==