ZGlmZiAtLWdpdCBhL2RvY3MvQVBJIGIvZG9jcy9BUEkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhNjY5MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvQVBJCkBAIC0wLDAgKzEsMjc2IEBACiskSWQkCisgICAgICAgICAgICAgICBfX19fX19fX19fICAgICAgICAgICAgICAgX18gICBfX18uCisgICAgIE9wZW4gICAgICBcX19fX19fICAgXCBfX19fICAgX19fXyB8ICB8IF9cXyB8X18gICBfX19fX19fICBfX18KKyAgICAgU291cmNlICAgICB8ICAgICAgIF8vLyAgXyBcXy8gX19fXHwgIHwvIC98IF9fIFwgLyAgXyBcICBcLyAgLworICAgICBKdWtlYm94ICAgIHwgICAgfCAgICggIDxfPiApICBcX19ffCAgICA8IHwgXF9cICggIDxfPiA+IDwgIDwKKyAgICAgRmlybXdhcmUgICB8X19fX3xfICAvXF9fX18vIFxfX18gID5fX3xfIFx8X19fICAvXF9fX18vX18vXF8gXAorICAgICAgICAgICAgICAgICAgICAgICBcLyAgICAgICAgICAgIFwvICAgICBcLyAgICBcLyAgICAgICAgICAgIFwvCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQSSBzdW1tbWFyeQorCitbIFRoaXMgaXMgc3RpbGwgcHJldHR5IHJvdWdoIGFuZCBiYXNpYy4gRXh0ZW5kISBdCisKK0xDRAorCisgICNpbmNsdWRlIDxsY2QuaD4KKworICBHZW5lcmljCisKKyAgICBNb3N0IExDRCBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIGZvciB3aGljaCBvdXRwdXQgd2Ugd29yayB3aXRoLCBkdWUgdG8gdGhlCisgICAgaHVnZSBkaWZmZXJlbmNlcy4KKworICAgIGxjZF9pbml0KCkgLSBpbml0IHRoZSBMQ0Qgc3R1ZmYKKyAgICBsY2RfY2xlYXJfZGlzcGxheSgpIC0gY2xlYXIgdGhlIHdob2xlIGRpc3BsYXkKKyAgICBsY2RfYmFja2xpZ2h0KG9uKSAtIHNldCBiYWNrbGlnaHQgb24vb2ZmCisgICAgbGNkX3B1dHMoeCx5LHN0cmluZykgd3JpdGUgYSBzdHJpbmcgYXQgZ2l2ZW4gY2hhcmFjdGVyIHBvc2l0aW9uCisKKyAgUmVjb3JkZXIKKyAKKyAgICBBbGwgdGhlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGEgZGlzcGxheSBidWZmZXIuIFlvdSBtYWtlIHRoZSBidWZmZXIgZ2V0CisgICAgc2hvd24gb24gc2NyZWVuIGJ5IGNhbGxpbmcgbGNkX3VwZGF0ZSgpLgorCisgICAgbGNkX3VwZGF0ZSgpIHVwZGF0ZSB0aGUgTENEIGFjY29yZGluZyB0byB0aGUgaW50ZXJuYWwgYnVmZmVyLgorCisKKyAgICBsY2RfdXBkYXRlX3JlY3QoaW50IHgsIGludCB5LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCisKKyAgICAgIFVwZGF0ZSB0aGUgZ2l2ZW4gcmVjdGFuZ2xlIHRvIHRoZSBMQ0QuIEdpdmUgYXJndW1lbnRzIG1lYXN1cmVkIGluCisgICAgICBwaXhlbHMuIE5vdGljZSB0aGF0IHRoZSBzbWFsbGVzdCB2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIHVwZGF0ZXMgdGhhdCB0aGUKKyAgICAgIGhhcmR3YXJlIHN1cHBvcnRzIGlzIGV2ZW4gOCBwaXhlbHMuIFRoaXMgZnVuY3Rpb24gd2lsbCBhZGp1c3QgdG8gdGhvc2UuCisKKyAgICBsY2Rfc2V0Zm9udChpbnQgZm9udCkgc2V0IGRlZmF1bHQgZm9udAorICAgIGxjZF9zZXRtYXJnaW5zKGludCB4LCBpbnQgeSkgc2V0IHRvcC9sZWZ0IG1hcmdpbnMKKyAgICBsY2RfcHV0c3h5KHgseSxzdHJpbmcsZm9udCkgcHV0IGEgc3RyaW5nIGF0IGdpdmVuIHBvc2l0aW9uLCB1c2luZyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGZvbnQKKyAgICBsY2RfYml0bWFwKHNyYyx4LHksd2lkdGgsaGVpZ2h0LGNsZWFyKSBwdXQgYSBiaXRtYXAgYXQgZ2l2ZW4gcG9zaXRpb24KKyAgICBsY2RfY2xlYXJyZWN0KHgseSx3aWR0aCxoZWlnaHQpIGNsZWFyIGEgcmVjdGFuZ2xlIGFyZWEKKyAgICBsY2RfZmlsbHJlY3QoeCx5LHdpZHRoLGhlaWdodCkgZmlsbCBhIHJlY3RhbmdsZSBhcmVhCisgICAgbGNkX2RyYXdyZWN0KHgseSx3aWR0aCxoZWlnaHQpIGRyYXcgYSByZWN0YW5nbGUKKyAgICBsY2RfaW52ZXJ0cmVjdCh4LHksd2lkdGgsaGVpZ2h0KSByZXZlcnQgdGhlIGdyYXBoaWNzIG9mIHRoZSBnaXZlbiBhcmVhCisgICAgbGNkX2RyYXdsaW5lKHgxLHkxLHgyLHkyKSBkcmF3IGEgbGluZSBiZXR3ZWVuIHRoZSBjb29yZGluYXRlcworICAgIGxjZF9kcmF3cGl4ZWwoeCx5KSBwdXQgYSBwaXhlbCBvbiB0aGUgZ2l2ZW4gY29vcmRpbmF0ZQorICAgIGxjZF9jbGVhcnBpeGVsKHgseSkgY2xlYXIgdGhlIHBpeGVsIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlCisgICAgbGNkX2ZvbnRzaXplKGZvbnQsd2lkdGgsaGVpZ2h0KSByZXR1cm4gdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGZvbnQKKworICBQbGF5ZXIKKworICAgIGxjZF9kZWZpbmVfcGF0dGVybih3aGljaCxwYXR0ZXJuLGxlbnRoKSBkZWZpbmUgYSBjdXN0b20gcGF0dGVybgorCitCdXR0b25zCisKKyAgI2luY2x1ZGUgPGJ1dHRvbi5oPgorCisgIFRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hpY2gga2V5cGFkIHlvdSBoYXZlLCBidXQgdGhleQorICByZXR1cm4gYSBkaWZmZXJlbnQgc2V0IG9mIHZhbHVlcy4gTm90ZSB0aGF0IHRoZSBSZWNvcmRlciBrZXlwYWQgaGFzIDEwCisgIGtleXMsIHdoaWxlIHRoZSBQbGF5ZXIga2V5cGFkIG9ubHkgZmVhdHVyZXMgNi4KKworICBpbnQgYnV0dG9uX2dldChib29sIGJsb2NrKQorCisgICAgIFJldHVybnMgYSBiaXRtYXNrIGZvciB3aGljaCBrZXlzIHdlcmUgcHJlc3NlZC4gSWYgJ2Jsb2NrJyBpcyBzZXQgVFJVRSBpdAorICAgICB3b24ndCByZXR1cm4gdW50aWwgYSBrZXkgaXMgcHJlc3NlZC4KKworRmlsZXMKKworICAoVGhlc2UgZnVuY3Rpb25zIGFyZSBQT1NJWCBsb29rLWFsaWtlcykKKworICAjaW5jbHVkZSA8ZmlsZS5oPgorCisgIGludCBvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBvZmxhZyk7CisKKyAgICAgVGhlIG9wZW4oKSBmdW5jdGlvbiBlc3RhYmxpc2hlcyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGEgZmlsZSBhbmQgYSBmaWxlCisgICAgIGRlc2NyaXB0b3IuIEl0IGNyZWF0ZXMgYW4gb3BlbiBmaWxlIGRlc2NyaXAtIHRpb24gdGhhdCByZWZlcnMgdG8gYSBmaWxlCisgICAgIGFuZCBhIGZpbGUgZGVzY3JpcHRvciB0aGF0IHJlZmVycyB0byB0aGF0IG9wZW4gZmlsZSBkZXNjcmlwdGlvbi4gVGhlIGZpbGUKKyAgICAgZGVzY3JpcHRvciBpcyB1c2VkIGJ5IG90aGVyIEkvTyBmdW5jdGlvbnMgdG8gcmVmZXIgdG8gdGhhdCBmaWxlLgorCisgIGludCByZWFkKGludCBmaWxkZXMsIHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlKTsKKworICAgICBUaGUgcmVhZCgpIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHJlYWQgbmJ5dGUgYnl0ZXMgZnJvbSB0aGUgZmlsZSBhc3NvY2lhdGVkCisgICAgIHdpdGggdGhlIG9wZW4gZmlsZSBkZXNjcmlwdG9yLCBmaWxkZXMsIGludG8gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IGJ1Zi4KKworICBpbnQgbHNlZWsoaW50IGZpbGRlcywgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKKworICAgICBUaGUgbHNlZWsoKSBmdW5jdGlvbiBzZXRzIHRoZSBmaWxlIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcGVuIGZpbGUKKyAgICAgZGVzY3JpcHRvciBzcGVjaWZpZWQgYnkgZmlsZGVzIGFzIGZvbGxvd3M6CisKKyAgICAgICAgbyAgSWYgd2hlbmNlIGlzIFNFRUtfU0VULCB0aGUgcG9pbnRlciBpcyAgc2V0ICB0byAgb2Zmc2V0CisgICAgICAgICAgIGJ5dGVzLgorCisgICAgICAgIG8gIElmIHdoZW5jZSBpcyBTRUVLX0NVUiwgIHRoZSAgcG9pbnRlciAgaXMgIHNldCAgdG8gIGl0cworICAgICAgICAgICBjdXJyZW50IGxvY2F0aW9uIHBsdXMgb2Zmc2V0LgorCisgICAgICAgIG8gIElmIHdoZW5jZSBpcyBTRUVLX0VORCwgdGhlIHBvaW50ZXIgaXMgc2V0IHRvIHRoZSAgc2l6ZQorICAgICAgICAgICBvZiB0aGUgZmlsZSBwbHVzIG9mZnNldC4KKworICBpbnQgd3JpdGUoaW50IGZpbGRlcywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbmJ5dGUpOworCisgICAgIE5PVCBDVVJSRU5UTFkgU1VQUE9SVEVELgorCisgICAgIHdyaXRlIHdyaXRlcyB1cCB0byBjb3VudCBieXRlcyB0byB0aGUgZmlsZSByZWZlcmVuY2VkIGJ5IHRoZSBmaWxlCisgICAgIGRlc2NyaXB0b3IgZmQgZnJvbSB0aGUgYnVmZmVyIHN0YXJ0aW5nIGF0IGJ1Zi4KKworICBpbnQgY2xvc2UoaW50IGZpbGRlcyk7CisKKyAgICAgVGhlIGNsb3NlKCkgZnVuY3Rpb24gd2lsbCBkZWFsbG9jYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaW5kaWNhdGVkIGJ5CisgICAgIGZpbGRlcy4gIFRvIGRlYWxsb2NhdGUgbWVhbnMgdG8gbWFrZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGF2YWlsYWJsZSBmb3IKKyAgICAgcmV0dXJuIGJ5IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3BlbigyKSBvciBvdGhlciBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZQorICAgICBmaWxlIGRlc2NyaXB0b3JzLgorCisgIGludCByZW5hbWUoY29uc3QgY2hhciAqb2xkLCBjb25zdCBjaGFyICpuZXcpOworCisgICAgIE5PVCBDVVJSRU5UTFkgU1VQUE9SVEVELgorCisgICAgIFRoZSByZW5hbWUoKSBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBuYW1lIG9mIGEgZmlsZS4gVGhlIG9sZCBhcmd1bWVudCBwb2ludHMKKyAgICAgdG8gdGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHJlbmFtZWQuIFRoZSBuZXcgYXJndW1lbnQgcG9pbnRzIHRvIHRoZQorICAgICBuZXcgcGF0aG5hbWUgb2YgdGhlIGZpbGUuCisKKyAgaW50IHJlbW92ZShjb25zdCBjaGFyICpwYXRobmFtZSk7CisKKyAgICAgTk9UIENVUlJFTlRMWSBTVVBQT1JURUQuCisKKyAgICAgcmVtb3ZlIGRlbGV0ZXMgYSBuYW1lIGZyb20gdGhlIGZpbGVzeXN0ZW0uICBJdCBjYWxscyB1bmxpbmsgZm9yIGZpbGVzLAorICAgICBhbmQgcm1kaXIgZm9yIGRpcmVjdG9yaWVzLgorCisKK0RpcmVjdG9yaWVzCisKKyAgI2luY2x1ZGUgPGRpci5oPgorCisgIERJUiAqb3BlbmRpcihjb25zdCBjaGFyICpuYW1lKTsKKworICAgICBUaGUgb3BlbmRpcigpIGZ1bmN0aW9uIG9wZW5zIGEgZGlyZWN0b3J5IHN0cmVhbSBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICBkaXJlY3RvcnkgbmFtZSwgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkaXJlY3Rvcnkgc3RyZWFtLiAgVGhlCisgICAgIHN0cmVhbSBpcyBwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5LgorCisgIHN0cnVjdCBkaXJlbnQgKnJlYWRkaXIoRElSICpkaXIpOworCisgICAgIFRoZSByZWFkZGlyKCkgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBkaXJlbnQgc3RydWN0dXJlCisgICAgIHJlcHJlc2VudGluZyB0aGUgbmV4dCBkaXJlY3RvcnkgZW50cnkgaW4gdGhlIGRpcmVjdG9yeSBzdHJlYW0gcG9pbnRlZCB0bworICAgICBieSBkaXIuICBJdCByZXR1cm5zIE5VTEwgb24gcmVhY2hpbmcgdGhlIGVuZC1vZi1maWxlIG9yIGlmIGFuIGVycm9yCisgICAgIG9jY3VycmVkLgorCisgICAgIEFkZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBzdHJ1Y3QgaGVyZS4KKworICBpbnQgY2xvc2VkaXIoRElSICpkaXIpOworCisgICAgIFRoZSBjbG9zZWRpcigpIGZ1bmN0aW9uIGNsb3NlcyB0aGUgZGlyZWN0b3J5IHN0cmVhbSBhc3NvY2lhdGVkIHdpdGggZGlyLgorICAgICBUaGUgZGlyZWN0b3J5IHN0cmVhbSBkZXNjcmlwdG9yIGRpciBpcyBub3QgYXZhaWxhYmxlIGFmdGVyIHRoaXMgY2FsbC4KKworCitTdHJpbmcvTWVtb3J5CisKKyAgI2luY2x1ZGUgPHN0cmluZy5oPgorCisgIHN0cmNtcCgpCisgIHN0cmNweSgpCisgIG1lbWNweSgpCisgIG1lbXNldCgpCisgIC4uLgorCitNZW1vcnkgYWxsb2NhdGlvbgorCisgICNpbmNsdWRlIDxkbWFsbG9jLmg+CisKKyAgdm9pZCAqbWFsbG9jKHNpemVfdCBzaXplKTsKKworICAgICBtYWxsb2MoKSBhbGxvY2F0ZXMgc2l6ZSBieXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZAorICAgICBtZW1vcnkuIFRoZSBtZW1vcnkgaXMgbm90IGNsZWFyZWQuCisKKyAgdm9pZCBmcmVlKHZvaWQgKnB0cik7CisKKyAgICAgZnJlZSgpIGZyZWVzIHRoZSBtZW1vcnkgc3BhY2UgcG9pbnRlZCB0byBieSBwdHIsIHdoaWNoIG11c3QgaGF2ZSBiZWVuCisgICAgIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBtYWxsb2MoKSwgY2FsbG9jKCkgb3IgcmVhbGxvYygpLgorICAgICBPdGhlcndpc2UsIG9yIGlmIGZyZWUocHRyKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBiZWZvcmUsIHVuZGVmaW5lZAorICAgICBiZWhhdmlvdXIgb2NjdXJzLgorCisgIHZvaWQgKnJlYWxsb2Modm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisKKyAgICAgcmVhbGxvYygpIGNoYW5nZXMgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBibG9jayBwb2ludGVkIHRvIGJ5IHB0ciB0byBzaXplCisgICAgIGJ5dGVzLiAgVGhlIGNvbnRlbnRzIHdpbGwgYmUgdW5jaGFuZ2VkIHRvIHRoZSBtaW5pbXVtIG9mIHRoZSBvbGQgYW5kIG5ldworICAgICBzaXplczsgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSB3aWxsIGJlIHVuaW5pdGlhbGl6ZWQuICBJZiBwdHIgaXMgTlVMTCwgdGhlCisgICAgIGNhbGwgaXMgZXF1aXZhbGVudCB0byBtYWxsb2Moc2l6ZSk7IGlmIHNpemUgaXMgZXF1YWwgdG8gemVybywgdGhlIGNhbGwgaXMKKyAgICAgZXF1aXZhbGVudCB0byBmcmVlKHB0cikuICBVbmxlc3MgcHRyIGlzIE5VTEwsIGl0IG11c3QgaGF2ZSBiZWVuIHJldHVybmVkCisgICAgIGJ5IGFuIGVhcmxpZXIgY2FsbCB0byBtYWxsb2MoKSwgY2FsbG9jKCkgb3IgcmVhbGxvYygpLgorCisgIHZvaWQgKmNhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKTsKKworICAgICBjYWxsb2MoKSBhbGxvY2F0ZXMgbWVtb3J5IGZvciBhbiBhcnJheSBvZiBubWVtYiBlbGVtZW50cyBvZiBzaXplIGJ5dGVzCisgICAgIGVhY2ggYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGUgbWVtb3J5IGlzIHNldCB0bworICAgICB6ZXJvLgorCitJRDMKKworICAjaW5jbHVkZSA8aWQzLmg+CisgIGJvb2wgbXAzaW5mbyhtcDNlbnRyeSAqZW50cnksIGNoYXIgKmZpbGVuYW1lKTsKKworICAgICBSZXR1cm4gRkFMU0UgaWYgc3VjY2Vzc2Z1bC4gVGhlIGdpdmVuIG1wM2VudHJ5IGlzIHRoZW4gZmlsbGVkIGluIHdpdGgKKyAgICAgd2hhdGV2ZXIgaWQzIGluZm8gaXQgY291bGQgZmluZCBhYm91dCB0aGUgZ2l2ZW4gZmlsZS4KKworVmFyaW91cworCisgICNpbmNsdWRlIDxrZXJuZWwuaD4KKworICB2b2lkIGtlcm5lbF9pbml0KHZvaWQpCisKKyAgICAgSW5pdHMgdGhlIGtlcm5lbCBhbmQgc3RhcnRzIHRoZSB0aWNrIGludGVycnVwdAorCisgIHZvaWQgc2xlZXAodGlja3MpCisKKyAgICAgU2xlZXAgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpY2tzLCB3ZSBoYXZlIEhaIHRpY2tzIHBlciBzZWNvbmQuCisKKyAgdm9pZCB5aWVsZCh2b2lkKQorCisgICAgIExldCBhbm90aGVyIHRocmVhZCBydW4uIFRoaXMgc2hvdWxkIGJlIHVzZWQgYXMgc29vbiBhcyB5b3UgaGF2ZSB0byAid2FpdCIKKyAgICAgZm9yIHNvbWV0aGluZyBvciBzaW1pbGFyLCBhbmQgYWxzbyBpZiB5b3UgZG8gYW55dGhpbmcgdGhhdCB0YWtlcyAiYSBsb25nCisgICAgIHRpbWUiLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRpcmUgZm91bmRhdGlvbiB0aGF0IG91ciAiY29vcGVyYXRpdmUKKyAgICAgbXVsdGl0YXNraW5nIiBpcyBiYXNlZCBvbi4gVXNlIGl0LgorCisgIGludCBzZXRfaXJxX2xldmVsKGludCBsZXZlbCkKKworICAgICBTZXRzIHRoZSBpbnRlcnJ1cHQgbGV2ZWwgKDAgPSBsb3dlc3QsIDE1ID0gaGlnaGVzdCkgYW5kIHJldHVybnMgdGhlCisgICAgIHByZXZpb3VzIGxldmVsLgorCisgIHZvaWQgcXVldWVfaW5pdChzdHJ1Y3QgZXZlbnRfcXVldWUgKnEpCisKKyAgICAgSW5pdGlhbGl6ZSBhbiBldmVudCBxdWV1ZS4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBpbiBhIHF1ZXVlIGlzCisgICAgIFFVRVVFX0xFTkdUSC0xLgorCisgIHZvaWQgcXVldWVfd2FpdChzdHJ1Y3QgZXZlbnRfcXVldWUgKnEsIHN0cnVjdCBldmVudCAqZXYpCisKKyAgICAgUmVjZWl2ZSBhbiBldmVudCBpbiBhIHF1ZXVlLCBibG9ja2luZyB0aGUgdGhyZWFkIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS4KKworICB2b2lkIHF1ZXVlX3Bvc3Qoc3RydWN0IGV2ZW50X3F1ZXVlICpxLCBpbnQgaWQsIHZvaWQgKmRhdGEpCisKKyAgICAgUG9zdCBhbiBldmVudCB0byBhIHF1ZXVlLgorICAgICBOT1RFOiBOZWdhdGl2ZSBldmVudCBJRCdzIGFyZSBmb3Igc3lzdGVtIHVzZSBvbmx5ISEhCisKKyAgYm9vbCBxdWV1ZV9lbXB0eShzdHJ1Y3QgZXZlbnRfcXVldWUqIHEpCisKKyAgICAgUmV0dXJucyB0cnVlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS4KKworICBpbnQgcXVldWVfYnJvYWRjYXN0KGludCBpZCwgdm9pZCAqZGF0YSkKKworICAgICBQb3N0cyBhbiBldmVudCBpbiBhbGwgcXVldWVzIHRoYXQgaGFzIGJlZW4gaW5pdGlhdGVkIHdpdGggcXVldWVfaW5pdCgpLgorICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcXVldWVzIHRoYXQgd2VyZSBwb3N0ZWQgdG8uCisKKyAgaW50IHRpY2tfYWRkX3Rhc2sodm9pZCAoKmYpKHZvaWQpKQorCisgICAgIEFkZCBhIHRhc2sgdG8gdGhlIHRpY2sgdGFzayBxdWV1ZS4gVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhCisgICAgIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGljayBpbnRlcnJ1cHQuCisgICAgIEF0IG1vc3QgTUFYX05VTV9USUNLX1RBU0tTIGNhbiBiZSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZS4KKworICBpbnQgdGlja19yZW1vdmVfdGFzayh2b2lkICgqZikodm9pZCkpCisKKyAgICAgUmVtb3ZlIGEgdGFzayBmcm9tIHRoZSB0YXNrIHF1ZXVlLgorCisgIHZvaWQgbXV0ZXhfaW5pdChzdHJ1Y3QgbXV0ZXggKm0pCisKKyAgICAgSW5pdGlhbGl6ZSBhIG11dGV4LgorCisgIHZvaWQgbXV0ZXhfbG9jayhzdHJ1Y3QgbXV0ZXggKm0pCisKKyAgICAgTG9jayBhIG11dGV4LiBUaGlzIHdpbGwgYmxvY2sgdGhlIHRocmVhZCBpZiB0aGUgbXV0ZXggaXMgYWxyZWFkeSBsb2NrZWQuCisgICAgIE5vdGUgdGhhdCB5b3Ugd2lsbCBnZXRhIGRlYWRsb2NrIGlmIHlvdSBsb2NrIHRoZSBtdXRleCB0d2ljZSEKKwordm9pZCBtdXRleF91bmxvY2soc3RydWN0IG11dGV4ICptKQorCisgICAgIFVubG9jayBhIG11dGV4LgpkaWZmIC0tZ2l0IGEvZG9jcy9DT05UUklCVVRJTkcgYi9kb2NzL0NPTlRSSUJVVElORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTA4YzhlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9DT05UUklCVVRJTkcKQEAgLTAsMCArMSw1MiBAQAorJElkJAorCitJbiBvcmRlciBmb3IgdGhlIHByb2plY3QgdG8gcnVuIGFzIHNtb290aGx5IGFzIHBvc3NpYmxlLCBpdCdzIGJlc3QgaWYgYWxsCitjb250cmlidXRvcnMgYWRoZXJlIHRvIGEgZmV3IHNpbXBsZSBjb252ZW50aW9uczoKKworTGFuZ3VhZ2UKKy0tLS0tLS0tCitXcml0ZSBhbGwgY29kZSBpbiBDLiBTb21ldGltZXMgYXNzZW1ibHkgaXMgZmFzdGVyLCBidXQgQyBpcyBhbHdheXMgbW9yZQorcmVhZGFibGUgYW5kIG1haW50YWluYWJsZS4KKworTGFuZ3VhZ2UgZmVhdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tCitXcml0ZSBub3JtYWwgQyBjb2RlLiBEb24ndCByZWRlZmluZSB0aGUgbGFuZ3VhZ2UuIE5vIG5ldyB0eXBlcyAoc3RydWN0cyBhcmUKK3N0cnVjdHMsIG5vdCB0eXBlZGVmcyksIG5vIEMrK2lzbXMgb3IgSmF2YWlzbXMuIEFsc28sIGF2b2lkIHVzaW5nICJjb25zdCIuCisKK05hbWVzCistLS0tLQorVmFyaWFibGVzIGFuZCBmdW5jdGlvbiBuYW1lcyBzaG91bGQgYmUgYWxsIGxvd2VyIGNhc2UuCitQcmVwcm9jZXNzb3Igc3ltYm9scyBzaG91bGQgYmUgYWxsIHVwcGVyY2FzZS4KKworU3R5bGUKKy0tLS0tCitXaGVuIGNoYW5naW5nIGNvZGUsIGZvbGxvdyB0aGUgY29kZSBzdHlsZSBvZiB0aGUgZmlsZSB5b3UgYXJlIGVkaXRpbmcuCisKK1doZW4gd3JpdGluZyBuZXcgZmlsZXMsIHlvdSBtYXkgdXNlIHRoZSBicmFjZSBwbGFjZW1lbnQgc3R5bGUgb2YgeW91ciBjaG9pY2UuCisKK0Fsd2F5cyBpbmRlbnQgeW91ciBjb2RlIHdpdGggZm91ciBzcGFjZXMuIERvbid0IHVzZSBUQUIgY2hhcmFjdGVycywgYXMgdGhhdAord2lsbCBtZXNzIHVwIGNvZGUgZGlzcGxheSBpbiBDVlMsIHByaW50aW5nLCBhbmQgYSB6aWxsaW9uIG90aGVyIHBsYWNlcy4KKworS2VlcCBsaW5lcyBiZWxvdyA4MCBjb2x1bW5zIGxlbmd0aC4gVXNlIHdoaXRlc3BhY2UgYW5kIG5ld2xpbmVzIHRvIG1ha2UgdGhlCitjb2RlIGVhc3kgdG8gYnJvd3NlL3JlYWQuCisKK1RleHQgZm9ybWF0CistLS0tLS0tLS0tLQorVXNlICJ1bml4IHN0eWxlIiBsaW5lIGZlZWRzOiAiTEYiIG9ubHkuIERvIG5vdCB1c2UgIkNSK0xGIi4KKworUGF0Y2hlcworLS0tLS0tLQorQ3JlYXRlIGEgcGF0Y2ggdXNpbmcgJ2N2cyBkaWZmIC11YicuIAorVHJpbSB5b3VyIHBhdGNoZXMgc28gdGhleSBvbmx5IGNvbnRhaW4gcmVsZXZhbnQgY2hhbmdlcy4KK1N1Ym1pdCBhbGwgcGF0Y2hlcyB0byB0aGUgbWFpbGluZyBsaXN0LiAKK1B1dCBbUEFUQ0hdIGZpcnN0IG9uIHRoZSBzdWJqZWN0IGxpbmUgb2YgeW91ciBtYWlsLiAKK0lmIHRoZSBwYXRjaCBpcyB2ZXJ5IGxhcmdlICg+NTBrKSwgZ3ppcCBpdCBiZWZvcmUgeW91IHNlbmQgaXQuCisKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9kb2NzL0NPUFlJTkcgYi9kb2NzL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwYzMxYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvQ09QWUlORwpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9kb2NzL0NSRURJVFMgYi9kb2NzL0NSRURJVFMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2ZjMzNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvQ1JFRElUUwpAQCAtMCwwICsxLDM2IEBACitQZW9wbGUgdGhhdCBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoZSBwcm9qZWN0LCBvbmUgd2F5IG9yIGFub3RoZXIuIEZyaWVuZHMhCisKK0Jq9nJuIFN0ZW5iZXJnICAgICAgICAgIE9yaWdpbmF0b3IsIHByb2plY3QgbWFuYWdlciwgY29kZQorTGludXMgTmllbHNlbiBGZWx0emluZyAgRWxlY3Ryb25pY3MsIGNvZGUKK0FuZHkgQ2hvaSAgICAgICAgICAgICAgIENoZWNrc3VtcworQW5kcmV3IEphbWllc29uICAgICAgICAgU2NoZW1hdGljcywgZWxlY3Ryb25pY3MKK1BhdWwgU3VhZGUgICAgICAgICAgICAgIFNlcmlhbCBwb3J0IHNldHVwCitKb2FjaGltIFNjaGlmZmVyICAgICAgICBTY2hlbWF0aWNzLCBlbGVjdHJvbmljcworRGFuaWVsIFN0ZW5iZXJnICAgICAgICAgQ29kZQorQWxhbiBLb3JyICAgICAgICAgICAgICAgQ29kZQorR2FyeSBDenZpdGtvdmljeiAgICAgICAgQ29kZQorU3R1YXJ0IE1hcnRpbiAgICAgICAgICAgQ29kZQorRmVsaXggQXJlbmRzICAgICAgICAgICAgQ29kZQorVWxmIFJhbGJlcmcgICAgICAgICAgICAgVGhyZWFkIGVtYnJ5bworRGF2aWQgSORyZGVtYW4gICAgICAgICAgSW5pdGlhbCBJRDMgY29kZQorVGhvbWFzIFNhZXlzICAgICAgICAgICAgTG9nbworR3JhbnQgV2llciAgICAgICAgICAgICAgQ29kZQorSnVsaWVuIExhYnJ1eelyZSAgICAgICAgRG9uYXRlZCBBcmNob3MgUGxheWVyCitOaWNvbGFzIFNhdXplZGUgICAgICAgICBEaXNwbGF5IHJlc2VhcmNoCitSb2JlcnQgSGFrICAgICAgICAgICAgICBDb2RlLCBkb2N1bWVudGF0aW9uLCBzYXJjYXNtCitEYXZlIENoYXBtYW4gICAgICAgICAgICBDb2RlCitTdGVmYW4gTWV5ZXIgICAgICAgICAgICBDb2RlCitFcmljIExpbmVuYmVyZyAgICAgICAgICBDb2RlCitUb20gQ3ZpdGFuICAgICAgICAgICAgICBXZWIgZGVzaWduCitNYWdudXMg1m1hbiAgICAgICAgICAgICBGb250CitKZXJvbWUgS3VwdHogICAgICAgICAgICBDb2RlCitKdWxpZW4gQm9pc3Npbm90ICAgICAgICBDb2RlLCBTb3VuZCByZXNlYXJjaAorTnV1dHRpIEtvdGl2dW9yaSAgICAgICAgQ29kZQorSGVpa2tpIEhhbm5pa2FpbmVuICAgICAgQ29kZQorSGFyZGVlcCBTaWRodSAgICAgICAgICAgQ29kZQorTWFya3VzIEJyYXVuICAgICAgICAgICAgQ29kZQorSnVzdGluIEhlaW5lciAgICAgICAgICAgQ29kZQorTWFnbnVzIEhvbG1ncmVuICAgICAgICAgQ29kZQorQmlsbCBOYXBpZXIgICAgICAgICAgICAgQnVpbGQgZml4ZXMKK0dlb3JnZSBTdHlsZXMgICAgICAgICAgIENvZGUKK01hdHMgTGlkZWxsICAgICAgICAgICAgIENvZGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL1JFQURNRSBiL2RvY3MvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZmE3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL1JFQURNRQpAQCAtMCwwICsxLDQ1IEBACisgICAgICAgICAgICAgICBfX19fX19fX19fICAgICAgICAgICAgICAgX18gICBfX18uCisgICAgIE9wZW4gICAgICBcX19fX19fICAgXCBfX19fICAgX19fXyB8ICB8IF9cXyB8X18gICBfX19fX19fICBfX18KKyAgICAgU291cmNlICAgICB8ICAgICAgIF8vLyAgXyBcXy8gX19fXHwgIHwvIC98IF9fIFwgLyAgXyBcICBcLyAgLworICAgICBKdWtlYm94ICAgIHwgICAgfCAgICggIDxfPiApICBcX19ffCAgICA8IHwgXF9cICggIDxfPiA+IDwgIDwKKyAgICAgRmlybXdhcmUgICB8X19fX3xfICAvXF9fX18vIFxfX18gID5fX3xfIFx8X19fICAvXF9fX18vX18vXF8gXAorICAgICAgICAgICAgICAgICAgICAgICBcLyAgICAgICAgICAgIFwvICAgICBcLyAgICBcLyAgICAgICAgICAgIFwvCisKK0J1aWxkIHlvdXIgb3duIGFyY2hvcy5tb2QuCisKKzEuIENoZWNrIG91dCAnZmlybXdhcmUnLCAnYXBwcycgYW5kICd0b29scycgZnJvbSBDVlMgKG9yIHBvc3NpYmx5IGZyb20gYQorICAgZG93bmxvYWRlZCBhcmNoaXZlKS4gWW91IG1heSBwb3NzaWJseSB3YW50ICd1aXNpbXVsYXRvcicgdG9vIChmb3IgdHJ5aW5nCisgICBvdXQgdGhpbmdzIG9uIGhvc3QgYmVmb3JlIG1ha2luZyB0YXJnZXQgdGVzdHMpLiAgSWYgeW91IGhhdmVuJ3QgYWxyZWFkeQorICAgZG9uZSBzbywgd2UgYWR2aXNlIHlvdSBwdWxsIGRvd24gdGhlICdkb2NzJyBkaXJlY3RvcnkgYXMgd2VsbC4KKworMi4gQnVpbGQgdGhlIHRvb2xzIGJ5IHJ1bm5pbmcgJ21ha2UnIGluIHRoZSB0b29scy8gZGlyZWN0b3J5LgorCiszLiBDcmVhdGUgeW91ciBvd24gYnVpbGQgZGlyZWN0b3J5LCBwcmVmZXJhYmx5IGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKKyAgIGZpcm13YXJlLyBhbmQgYXBwcy8gZGlyZWN0b3JpZXMuIFRoaXMgaXMgd2hlcmUgYWxsIGdlbmVyYXRlZCBmaWxlcyB3aWxsIGJlCisgICBwdXQuCisKKzQuIEluIHlvdXIgYnVpbGQgZGlyZWN0b3J5LCBydW4gdGhlICd0b29scy9jb25maWd1cmUnIHNjcmlwdCBhbmQgZW50ZXIgd2hhdAorICAgdGFyZ2V0IHlvdSB3YW50IHRvIGJ1aWxkIGZvciBhbmQgaWYgeW91IHdhbnQgYSBkZWJ1ZyB2ZXJzaW9uIG9yIG5vdC4gSXQnbGwKKyAgIHByb21wdCB5b3UuIFRoZSBkZWJ1ZyB2ZXJzaW9uIGlzIGZvciBtYWtpbmcgYSBnZGIgdmVyc2lvbiBvdXQgb2YgaXQuIEl0IGlzCisgICBvbmx5IHVzZWZ1bCBpZiB5b3UgcnVuIGdkYiB0b3dhcmRzIHlvdXIgdGFyZ2V0IEFyY2hvcy4KKworNS4gTWFrZSBzdXJlIHlvdSBoYXZlIHNoLWVsZi1nY2MgYW5kIHNpYmxpbmdzIGluIHRoZSBQQVRILgorCis2LiAqcGxvaW5rKi4gTm93IHlvdSBoYXZlIGdvdCBhIE1ha2VmaWxlIGdlbmVyYXRlZCBmb3IgeW91LiBSdW4gJ21ha2UnIGFuZAorICAgc29vbiB0aGUgbmVjZXNzYXJ5IHBpZWNlcyBmcm9tIHRoZSBmaXJtd2FyZSBhbmQgdGhlIGFwcHMgZGlyZWN0b3JpZXMgaGF2ZQorICAgYmVlbiBjb21waWxlZCBhbmQgbGlua2VkLgorCis3LiBDb3B5IHRoZSBhcmNob3MubW9kIGZpbGUgdG8geW91ciBhcmNob3MsIHJlYm9vdCBpdCBhbmQgKnNtaWxlKi4KKworV2hlbmV2ZXIgdGhlIHRvb2xzL2NvbmZpZ3VyZSBzY3JpcHQgZ2V0cyB1cGRhdGVkLCB5b3UgY2FuIG1ha2UgeW91ciBtYWtlZmlsZQordXBkYXRlZCB0b28gYnkgcnVubmluZyAndG9vbHMvY29uZmlndXJlIHVwZGF0ZScKKworSWYgeW91IHdhbnQgdG8gYnVpbGQgZm9yIG1vcmUgdGhhbiBvbmUgdGFyZ2V0LCBqdXN0IGNyZWF0ZSBhIG5ldyBidWlsZAorZGlyZWN0b3J5IGFuZCBjcmVhdGUgYSBzZXR1cCBmb3IgYW5vdGhlciB0YXJnZXQgY29tYmluYXRpb24gaW4gdGhlcmUuCisKK1F1ZXN0aW9ucyBhbnlvbmU/IFRha2UgdGhlbSB0byB0aGUgbWFpbGluZyBsaXN0LiBXZSdsbCBiZSBoYXBweSB0byBoZWxwIHlvdQorb3V0IQorCisKKworCg==