Li4gQWxnb3JpdGhtcy9Db25jZXB0cy8vUmV2ZXJzaWJsZSBBbGdvcml0aG0KClJldmVyc2libGUgQWxnb3JpdGhtCj09PT09PT09PT09PT09PT09PT09CgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKQSB8UmV2ZXJzaWJsZSBBbGdvcml0aG18IGlzIGEgbWVtYmVyIG9mIGEgcGFpciBvZgp0cmFuc2Zvcm1hdGlvbiBhbGdvcml0aG1zIHRoYXQgaXRlcmF0ZSBvdmVyIHRoZWlyIGlucHV0IHNlcXVlbmNlKHMpIAppbiBvcHBvc2l0ZSBkaXJlY3Rpb25zLiBGb3IgZWFjaCByZXZlcnNpYmxlIAphbGdvcml0aG0gYGB4YGAgdGhlcmUgZXhpc3RzIGEgKmNvdW50ZXJwYXJ0KiBhbGdvcml0aG0gYGByZXZlcnNlX3hgYCwgCnRoYXQgZXhoaWJpdHMgdGhlIGV4YWN0IHNlbWFudGljcyBvZiBgYHhgYCBleGNlcHQgdGhhdCB0aGUgZWxlbWVudHMgCm9mIGl0cyBpbnB1dCBzZXF1ZW5jZSBhcmd1bWVudChzKSBhcmUgcHJvY2Vzc2VkIGluIHRoZSByZXZlcnNlIApvcmRlci4KCgpFeHByZXNzaW9uIHJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLi4gfHMxLi4uc258IHJlcGxhY2U6OiAqcypcIDpzdWI6YDFgLFwgKnMqXCA6c3ViOmAyYCwuLi5cICpzKlwgOnN1YjpgbmAKCi4uIHxzMS4uLnNuPjo6dHlwZXwgcmVwbGFjZTo6IHxzMS4uLnNufCwgLi4uXCBgYD46OnR5cGVgYAouLiB8czEuLi5zbixpbj46OnR5cGV8IHJlcGxhY2U6OiB8czEuLi5zbnwsIC4uLiBgYGluPjo6dHlwZWBgCgp8SW4gdGhlIGZvbGxvd2luZyB0YWJsZS4uLnwgYGB4YGAgaXMgYSBwbGFjZWhvbGRlciB0b2tlbiBmb3IgdGhlIGFjdHVhbCAKfFJldmVyc2libGUgQWxnb3JpdGhtfCdzIG5hbWUsIHxzMS4uLnNufCBhcmUgCnxGb3J3YXJkIFNlcXVlbmNlfFwgcywgYW5kIGBgaW5gYCBpcyBhbiB8SW5zZXJ0ZXJ8LgoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKwp8IEV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgfCBDb21wbGV4aXR5ICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PSsKfGBgeDxgYFwgfHMxLi4uc24+Ojp0eXBlfCAgICAgICAgICAgICAgIHwgfEZvcndhcmQgU2VxdWVuY2V8ICAgIHwgVW5zcGVjaWZpZWQuICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCnxgYHg8YGBcIHxzMS4uLnNuLGluPjo6dHlwZXwgICAgICAgICAgICB8IEFueSB0eXBlICAgICAgICAgICAgICB8IFVuc3BlY2lmaWVkLiAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKwp8YGByZXZlcnNlX3g8YGBcIHxzMS4uLnNuPjo6dHlwZXwgICAgICAgfCB8Rm9yd2FyZCBTZXF1ZW5jZXwgICAgfCBVbnNwZWNpZmllZC4gICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKfGBgcmV2ZXJzZV94PGBgXCB8czEuLi5zbixpbj46OnR5cGV8ICAgIHwgQW55IHR5cGUgICAgICAgICAgICAgIHwgVW5zcGVjaWZpZWQuICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIHg8XCAqcypcIDpzdWI6YDFgLFwgKnMqXCA6c3ViOmAyYCwuLi5cICpzKlwgOnN1YjpgbmAsLi4uPjo6dHlwZSB0OwoKOlByZWNvbmRpdGlvbjoKICAgICpzKlwgOnN1YjpgMWAgaXMgYW4gfEV4dGVuc2libGUgU2VxdWVuY2V8LgoKOlNlbWFudGljczoKICAgIGBgdGBgIGlzIGVxdWl2YWxlbnQgdG8KICAgIAogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgICAgICB4PAogICAgICAgICAgICAgICpzKlwgOnN1YjpgMWAsXCAqcypcIDpzdWI6YDJgLC4uLlwgKnMqXCA6c3ViOmBuYCwuLi4KICAgICAgICAgICAgLCBiYWNrX2luc2VydGVyPCBjbGVhcjxcICpzKlwgOnN1YjpgMWA+Ojp0eXBlID4gICAgCiAgICAgICAgICAgID46OnR5cGUKICAgICAgICAgICAgCiAgICBpZiBgYGhhc19wdXNoX2JhY2s8YGBcICpzKlwgOnN1YjpgMWBcIGBgPjo6dmFsdWUgPT0gdHJ1ZWBgIGFuZAoKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICAgICAgcmV2ZXJzZV94PAogICAgICAgICAgICAgICpzKlwgOnN1YjpgMWAsXCAqcypcIDpzdWI6YDJgLC4uLlwgKnMqXCA6c3ViOmBuYCwuLi4KICAgICAgICAgICAgLCBmcm9udF9pbnNlcnRlcjwgY2xlYXI8XCAqcypcIDpzdWI6YDFgPjo6dHlwZSA+ICAgIAogICAgICAgICAgICA+Ojp0eXBlCgogICAgb3RoZXJ3aXNlLgoKLi4gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiB4PFwgKnMqXCA6c3ViOmAxYCxcICpzKlwgOnN1YjpgMmAsLi4uXCAqcypcIDpzdWI6YG5gLC4uLlwgaW4+Ojp0eXBlIHQ7Cgo6U2VtYW50aWNzOgogICAgYGB0YGAgaXMgdGhlIHJlc3VsdCBvZiBhbiBgYHhgYCBpbnZvY2F0aW9uIHdpdGggYXJndW1lbnRzIAogICAgKnMqXCA6c3ViOmAxYCxcICpzKlwgOnN1YjpgMmAsLi4uIFwgKnMqXCA6c3ViOmBuYCwuLi5cIGBgaW5gYC4KCgouLiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIHJldmVyc2VfeDxcICpzKlwgOnN1YjpgMWAsXCAqcypcIDpzdWI6YDJgLC4uLiBcICpzKlwgOnN1YjpgbmAsLi4uID46OnR5cGUgdDsKCjpQcmVjb25kaXRpb246CiAgICAqcypcIDpzdWI6YDFgIGlzIGFuIHxFeHRlbnNpYmxlIFNlcXVlbmNlfC4KCjpTZW1hbnRpY3M6CiAgICBgYHRgYCBpcyBlcXVpdmFsZW50IHRvCiAgICAKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICAgICAgeDwKICAgICAgICAgICAgICAqcypcIDpzdWI6YDFgLFwgKnMqXCA6c3ViOmAyYCwuLi5cICpzKlwgOnN1YjpgbmAsLi4uCiAgICAgICAgICAgICwgZnJvbnRfaW5zZXJ0ZXI8IGNsZWFyPFwgKnMqXCA6c3ViOmAxYD46OnR5cGUgPiAgICAKICAgICAgICAgICAgPjo6dHlwZQogICAgICAgICAgICAKICAgIGlmIGBgaGFzX3B1c2hfZnJvbnQ8YGBcICpzKlwgOnN1YjpgMWBcIGBgPjo6dmFsdWUgPT0gdHJ1ZWBgIGFuZAoKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICAgICAgcmV2ZXJzZV94PAogICAgICAgICAgICAgICpzKlwgOnN1YjpgMWAsXCAqcypcIDpzdWI6YDJgLC4uLlwgKnMqXCA6c3ViOmBuYCwuLi4KICAgICAgICAgICAgLCBiYWNrX2luc2VydGVyPCBjbGVhcjxcICpzKlwgOnN1YjpgMWA+Ojp0eXBlID4gICAgCiAgICAgICAgICAgID46OnR5cGUKCiAgICBvdGhlcndpc2UuCgoKLi4gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIHJldmVyc2VfeDxcICpzKlwgOnN1YjpgMWAsXCAqcypcIDpzdWI6YDJgLC4uLlwgKnMqXCA6c3ViOmBuYCwuLi4gaW4+Ojp0eXBlIHQ7Cgo6U2VtYW50aWNzOgogICAgYGB0YGAgaXMgdGhlIHJlc3VsdCBvZiBhIGBgcmV2ZXJzZV94YGAgaW52b2NhdGlvbiB3aXRoIGFyZ3VtZW50cyAKICAgICpzKlwgOnN1YjpgMWAsXCAqcypcIDpzdWI6YDJgLC4uLlwgKnMqXCA6c3ViOmBuYCwuLi5cIGBgaW5gYC4KCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIHRyYW5zZm9ybTwgCiAgICAgICAgICByYW5nZV9jPGludCwwLDEwPgogICAgICAgICwgcGx1czxfMSxpbnRfPDc+ID4KICAgICAgICAsIGJhY2tfaW5zZXJ0ZXI8IHZlY3RvcjA8PiA+IAogICAgICAgID46OnR5cGUgcjE7CiAgICAKICAgIHR5cGVkZWYgdHJhbnNmb3JtPCByMSwgbWludXM8XzEsaW50XzwyPiA+ID46OnR5cGUgcjI7CiAgICB0eXBlZGVmIHJldmVyc2VfdHJhbnNmb3JtPCAKICAgICAgICAgIHIyCiAgICAgICAgLCBtaW51czxfMSw1PiAKICAgICAgICAsIGZyb250X2luc2VydGVyPCB2ZWN0b3IwPD4gPiAKICAgICAgICA+Ojp0eXBlIHIzOwoKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBlcXVhbDxyMSwgcmFuZ2VfYzxpbnQsNywxNz4gPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBlcXVhbDxyMiwgcmFuZ2VfYzxpbnQsNSwxNT4gPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBlcXVhbDxyMywgcmFuZ2VfYzxpbnQsMCwxMD4gPiApKTsKCgpNb2RlbHMKLS0tLS0tCgoqIHx0cmFuc2Zvcm18CiogfHJlbW92ZXwKKiB8cmVwbGFjZXwKClNlZSBhbHNvCi0tLS0tLS0tCgp8VHJhbnNmb3JtYXRpb24gQWxnb3JpdGhtc3wsIHxJbnNlcnRlcnwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==