LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6CiAqCiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogT3JpZ2luYWxseSBkZXZlbG9wZWQgYW5kIGNvbnRyaWJ1dGVkIGJ5IEl0dGlhbSBTeXN0ZW1zIFB2dC4gTHRkLCBCYW5nYWxvcmUKKi8KLyoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBAZmlsZQoqICBpaDI2NF9jb21tb25fdGFibGVzLmgKKgoqIEBicmllZgoqICBDb21tb24gdGFibGVzCioKKiBAYXV0aG9yCiogIEhhcmlzaAoqCiogQHBhciBMaXN0IG9mIEZ1bmN0aW9uczoKKgoqIEByZW1hcmtzCiogIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCgojaWZuZGVmIF9JSDI2NF9DT01NT05fVEFCTEVTX0hfCiNkZWZpbmUgX0lIMjY0X0NPTU1PTl9UQUJMRVNfSF8KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIFN0cnVjdHVyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgQGJyaWVmICAgICAgbGV2ZWwgdGFibGVzCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KdHlwZWRlZiBzdHJ1Y3QKewogICAgLyogbGV2ZWwgKi8KICAgIElIMjY0X0xFVkVMX1QgICAgIHU0X2xldmVsX2lkYzsKCiAgICAvKiBtYXggbWFjcm9ibG9jayBwcm9jZXNzaW5nIHJhdGUgKi8KICAgIFVXT1JEMzIgICAgIHU0X21heF9tYnBzOwoKICAgIC8qIG1heCBmcmFtZSBzaXplIGluIG1icyAqLwogICAgVVdPUkQzMiAgICAgdTRfbWF4X2ZzOwoKICAgIC8qIG1heCBkcGIgc2l6ZSAvIDc2OCAqLwogICAgVVdPUkQzMiAgICAgdTRfbWF4X2RwYl9zaXplOwoKICAgIC8qIG1heCBiaXQgcmF0ZSAqLwogICAgVVdPUkQzMiAgICAgdTRfbWF4X2JyOwoKICAgIC8qIG1heCBjcGIgc2l6ZSAqLwogICAgVVdPUkQzMiAgICAgdTRfbWF4X2NwYl9zaXplOwoKICAgIC8qIG1heCB2ZXJ0aWNhbCBNViBjb21wb25lbnQgcmFuZ2UgKi8KICAgIFVXT1JEMzIgICAgIHU0X21heF9tdl95OwoKfWxldmVsX3RhYmxlc190OwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBFeHRlcm4gZ2xvYmFsIGRlY2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEBicmllZiAgd2hpbGUgZW5jb2RpbmcsIGJhc2luZyBvbiB0aGUgaW5wdXQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCB0aGUKICogdGhlIGxldmVsIG9mIHRoZSBiaXRzdHJlYW0gaXMgY29tcHV0ZWQgYmFzaW5nIG9uIHRoZSB0YWJsZSBiZWxvdy4KICogaW5wdXQgIDogdGFibGVfaWR4CiAqIG91dHB1dCA6IGxldmVsX2lkYyBvciBjcGIgc2l6ZQogKiBAcmVtYXJrcyBUYWJsZSBBLTEgliBsZXZlbCB0YWJsZSBsaW1pdHMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KZXh0ZXJuIGNvbnN0IGxldmVsX3RhYmxlc190IGdhc19paDI2NF9sdmxfdGJsWzE2XTsKCmV4dGVybiBjb25zdCBXT1JEMzIgZ2FpNF9paDI2NF9sZXZlbHNbXTsKZXh0ZXJuIGNvbnN0IFdPUkQzMiBnYWk0X2loMjY0X21heF9sdW1hX3BpY19zaXplW107CmV4dGVybiBjb25zdCBXT1JEMzIgZ2FpNF9paDI2NF9tYXhfd2RfaHRbXTsKZXh0ZXJuIGNvbnN0IFdPUkQzMiBnYWk0X2loMjY0X21pbl93ZF9odFtdOwoKZXh0ZXJuIGludHJhX21idHlwZV9pbmZvX3QgZ2FzX2loMjY0X2lfbWJ0eXBlX2luZm9bXTsKZXh0ZXJuIGludGVyX21idHlwZV9pbmZvX3QgZ2FzX2loMjY0X3BfbWJ0eXBlX2luZm9bXTsKZXh0ZXJuIGludGVyX21idHlwZV9pbmZvX3QgZ2FzX2loMjY0X2JfbWJ0eXBlX2luZm9bXTsKZXh0ZXJuIHN1Ym1idHlwZV9pbmZvX3QgZ2FzX2loMjY0X3Bfc3VibWJ0eXBlX2luZm9bXTsKZXh0ZXJuIHN1Ym1idHlwZV9pbmZvX3QgZ2FzX2loMjY0X2Jfc3VibWJ0eXBlX2luZm9bXTsKCgpleHRlcm4gY29uc3QgVVdPUkQ4IGdhdTFfaWgyNjRfaW52X3NjYW5fcHJvZzR4NFtdOwpleHRlcm4gY29uc3QgVVdPUkQ4IGdhdTFfaWgyNjRfaW52X3NjYW5faW50NHg0W107CmV4dGVybiBjb25zdCBVV09SRDggZ2F1MV9paDI2NF9pbnZfc2Nhbl9wcm9nOHg4X2NhdmxjWzY0XTsKZXh0ZXJuIGNvbnN0IFVXT1JEOCBnYXUxX2loMjY0X2ludl9zY2FuX2ludDh4OF9jYXZsY1s2NF07CmV4dGVybiBjb25zdCBVV09SRDggZ2F1MV9paDI2NF9pbnZfc2Nhbl9wcm9nOHg4X2NhYmFjWzY0XTsKZXh0ZXJuIGNvbnN0IFVXT1JEOCBnYXUxX2loMjY0X2ludl9zY2FuX2ludDh4OF9jYWJhY1s2NF07CgpleHRlcm4gY29uc3QgVVdPUkQ4ICpjb25zdCBncGF1MV9paDI2NF9pbnZfc2Nhbjh4OFtdOwpleHRlcm4gY29uc3QgVVdPUkQ4ICpjb25zdCBncGF1MV9paDI2NF9pbnZfc2NhbjR4NFtdOwoKZXh0ZXJuIGNvbnN0IFVXT1JEOCBnYXUxX2loMjY0Xzh4OF9zdWJibGtfaWR4W107CgpleHRlcm4gY29uc3QgVVdPUkQ4IGdhdTFfaWgyNjRfY2hyb21hX3FwW107CgpleHRlcm4gY29uc3QgVVdPUkQ4IGdhdTFfaWgyNjRfNHg0X25nYnJfYXZibFsxNl1bMTZdOwpleHRlcm4gY29uc3QgVVdPUkQ4IGdhdTFfaWgyNjRfOHg4X25nYnJfYXZibFsxNl1bNF07CgoKZXh0ZXJuIGNvbnN0IFVXT1JEMTYgZ2F1Ml9paDI2NF9kZWZhdWx0X2ludGVyNHg0X3dlaWdodF9zY2FsZVtdOwpleHRlcm4gY29uc3QgVVdPUkQxNiBnYXUyX2loMjY0X2RlZmF1bHRfaW50cmE0eDRfd2VpZ2h0X3NjYWxlW107CmV4dGVybiBjb25zdCBVV09SRDE2IGdhdTJfaWgyNjRfZGVmYXVsdF9pbnRyYTR4NF9zY2FsaW5nX2xpc3RbXTsKZXh0ZXJuIGNvbnN0IFVXT1JEMTYgZ2F1Ml9paDI2NF9kZWZhdWx0X2ludGVyNHg0X3NjYWxpbmdfbGlzdFtdOwpleHRlcm4gY29uc3QgVVdPUkQxNiBnYXUyX2loMjY0X2RlZmF1bHRfaW50cmE4eDhfc2NhbGluZ19saXN0W107CmV4dGVybiBjb25zdCBVV09SRDE2IGdhdTJfaWgyNjRfZGVmYXVsdF9pbnRlcjh4OF9zY2FsaW5nX2xpc3RbXTsKZXh0ZXJuIGNvbnN0IFVXT1JEMTYgZ2F1Ml9paDI2NF9kZWZhdWx0X2ludHJhOHg4X3dlaWdodF9zY2FsZVtdOwpleHRlcm4gY29uc3QgVVdPUkQxNiBnYXUyX2loMjY0X2RlZmF1bHRfaW50ZXI4eDhfd2VpZ2h0X3NjYWxlW107CmV4dGVybiBjb25zdCBVV09SRDE2IGdhdTJfaWgyNjRfZmxhdF80eDRfd2VpZ2h0X3NjYWxlW107CmV4dGVybiBjb25zdCBVV09SRDE2IGdhdTJfaWgyNjRfZmxhdF84eDhfd2VpZ2h0X3NjYWxlW107CgpleHRlcm4gY29uc3QgVVdPUkQxNiBnYXUyX2loMjY0X2lxdWFudF9zY2FsZV9tYXRyaXhfNHg0IFs5Nl07CmV4dGVybiBjb25zdCBVV09SRDE2IGdhdTJfaWgyNjRfaXF1YW50X3NjYWxlX21hdHJpeF84eDggWzM4NF07CgojZW5kaWYgLypfSUgyNjRfQ09NTU9OX1RBQkxFU19IXyovCg==