LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIAogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKiAKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKI2lmbmRlZiBfVkNMQ0FOVkFTX1NQUklURVNVUkZBQ0VfSFhYCiNkZWZpbmUgX1ZDTENBTlZBU19TUFJJVEVTVVJGQUNFX0hYWAoKI2luY2x1ZGUgPHNhbC9jb25maWcuaD4KCiNpbmNsdWRlICJjYWlyb19zcHJpdGUuaHh4IgoKY2xhc3MgUG9pbnQ7CmNsYXNzIFNpemU7CmNsYXNzIFJlY3RhbmdsZTsKCm5hbWVzcGFjZSBjYWlyb2NhbnZhcwp7CgkvKiBEZWZpbml0aW9uIG9mIFNwcml0ZVN1cmZhY2UgaW50ZXJmYWNlICovCiAgICAKICAgIGNsYXNzIFNwcml0ZVN1cmZhY2UKICAgIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIH5TcHJpdGVTdXJmYWNlKCkge30KCiAgICAgICAgLy8gY2FsbCB0aGlzIHdoZW4gWFNwcml0ZTo6c2hvdygpIGlzIGNhbGxlZAogICAgICAgIHZpcnR1YWwgdm9pZCBzaG93U3ByaXRlKCBjb25zdCBTcHJpdGU6OkltcGxSZWYmIHNwcml0ZSApID0gMDsKCiAgICAgICAgLy8gY2FsbCB0aGlzIHdoZW4gWFNwcml0ZTo6aGlkZSgpIGlzIGNhbGxlZAogICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlU3ByaXRlKCBjb25zdCBTcHJpdGU6OkltcGxSZWYmIHNwcml0ZSApID0gMDsKCiAgICAgICAgLy8gY2FsbCB0aGlzIHdoZW4gWFNwcml0ZTo6bW92ZSgpIGlzIGNhbGxlZAogICAgICAgIHZpcnR1YWwgdm9pZCBtb3ZlU3ByaXRlKCBjb25zdCBTcHJpdGU6OkltcGxSZWYmCXNwcml0ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBvaW50JiAJCQlyT2xkUG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQb2ludCYgCQkJck5ld1BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2l6ZSYgCQkJclNwcml0ZVNpemUgKSA9IDA7CgogICAgICAgIC8vIGNhbGwgdGhpcyB3aGVuIHNvbWUgcGFydCBvZiB5b3VyIHNwcml0ZSBoYXMgY2hhbmdlZC4gVGhhdAogICAgICAgIC8vIGluY2x1ZGVzIHNob3cvaGlkZbQsIGkuZS4gZm9yIHNob3csIGJvdGggc2hvd1Nwcml0ZSBhbmQKICAgICAgICAvLyB1cGRhdGVTcHJpdGUgbXVzdCBiZSBjYWxsZWQuCiAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwcml0ZSggY29uc3QgU3ByaXRlOjpJbXBsUmVmJiAJc3ByaXRlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQb2ludCYgCQkJclBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWN0YW5nbGUmIAkJclVwZGF0ZUFyZWEgKSA9IDA7CiAgICAgICAgCiAgICB9Owp9CgojZW5kaWYgLyogX1ZDTENBTlZBU19TUFJJVEVTVVJGQUNFX0hYWCAqLwo=