Li4gSXRlcmF0b3JzL0NvbmNlcHRzLy9Gb3J3YXJkIEl0ZXJhdG9yIHwxMAoKRm9yd2FyZCBJdGVyYXRvcgo9PT09PT09PT09PT09PT09CgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKQSB8Rm9yd2FyZCBJdGVyYXRvcnwgYGBpYGAgaXMgYSB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIHBvc2l0aW9uYWwgcmVmZXJlbmNlCnRvIGFuIGVsZW1lbnQgb2YgYSB8Rm9yd2FyZCBTZXF1ZW5jZXwuIEl0IGFsbG93cyB0byBhY2Nlc3MgdGhlIGVsZW1lbnQgdGhyb3VnaCAKYSBkZXJlZmVyZW5jZSBvcGVyYXRpb24sIGFuZCBwcm92aWRlcyBhIHdheSB0byBvYnRhaW4gYW4gaXRlcmF0b3IgdG8gCnRoZSBuZXh0IGVsZW1lbnQgaW4gYSBzZXF1ZW5jZS4gCgouLiBBIFtGb3J3YXJkIEl0ZXJhdG9yXSBndWFyYW50ZWVzIGEgbGluZWFyIHRyYXZlcnNhbCBvdmVyIAogICB0aGUgc2VxdWVuY2UuCgoKRGVmaW5pdGlvbnMKLS0tLS0tLS0tLS0KCiogQW4gaXRlcmF0b3IgY2FuIGJlIGBkZXJlZmVyZW5jZWFibGVgLCBtZWFuaW5nIHRoYXQgYGBkZXJlZjxpPjo6dHlwZWBgCiAgaXMgYSB3ZWxsLWRlZmluZWQgZXhwcmVzc2lvbi4gCgoqIEFuIGl0ZXJhdG9yIGlzIGBwYXN0LXRoZS1lbmRgIGlmIGl0IHBvaW50cyBiZXlvbmQgdGhlIGxhc3QgZWxlbWVudCBvZiBhIAogIHNlcXVlbmNlOyBwYXN0LXRoZS1lbmQgaXRlcmF0b3JzIGFyZSBub24tZGVyZWZlcmVuY2VhYmxlLgoKKiBBbiBpdGVyYXRvciBgYGlgYCBpcyBgaW5jcmVtZW50YWJsZWAgaWYgdGhlcmUgaXMgYSAibmV4dCIgaXRlcmF0b3IsIHRoYXQgCiAgaXMsIGlmIGBgbmV4dDxpPjo6dHlwZWBgIGV4cHJlc3Npb24gaXMgd2VsbC1kZWZpbmVkOyBwYXN0LXRoZS1lbmQgaXRlcmF0b3JzIGFyZSAKICBub3QgaW5jcmVtZW50YWJsZS4KCiogVHdvIGl0ZXJhdG9ycyBpbnRvIHRoZSBzYW1lIHNlcXVlbmNlIGFyZSBgZXF1aXZhbGVudGAgaWYgdGhleSBoYXZlIHRoZSBzYW1lCiAgdHlwZS4KCiogQW4gaXRlcmF0b3IgYGBqYGAgaXMgYHJlYWNoYWJsZWAgZnJvbSBhbiBpdGVyYXRvciBgYGlgYCBpZiAsIGFmdGVyIHJlY3Vyc2l2ZSAKICBhcHBsaWNhdGlvbiBvZiBgYG5leHRgYCBtZXRhZnVuY3Rpb24gdG8gYGBpYGAgYSBmaW5pdGUgbnVtYmVyIG9mIHRpbWVzLCBgYGlgYCAKICBpcyBlcXVpdmFsZW50IHRvIGBgamBgLgoKKiBUaGUgbm90YXRpb24gW2BgaWBgLFwgYGBqYGApIHJlZmVycyB0byBhIGByYW5nZWAgb2YgaXRlcmF0b3JzIGJlZ2lubmluZyB3aXRoIAogIGBgaWBgIGFuZCB1cCB0byBidXQgbm90IGluY2x1ZGluZyBgYGpgYC4KCiogVGhlIHJhbmdlIFtgYGlgYCxcIGBgamBgKSBpcyBhIGB2YWxpZCByYW5nZWAgaWYgYGBqYGAgaXMgcmVhY2hhYmxlIGZyb20gYGBpYGAuIAoKCkV4cHJlc3Npb24gcmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgRXhwcmVzc2lvbiAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wbGV4aXR5ICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgZGVyZWY8aT46OnR5cGVgYCAgICB8IEFueSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQW1vcnRpemVkIGNvbnN0YW50IHRpbWUgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYG5leHQ8aT46OnR5cGVgYCAgICAgfCB8Rm9yd2FyZCBJdGVyYXRvcnwgICAgICAgICAgICAgICAgICAgICAgICB8IEFtb3J0aXplZCBjb25zdGFudCB0aW1lICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBpOjpjYXRlZ29yeWBgICAgICAgIHwgfEludGVncmFsIENvbnN0YW50fCwgY29udmVydGlibGUgICAgICAgICAgfCBDb25zdGFudCB0aW1lICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgfCB0byBgYGZvcndhcmRfaXRlcmF0b3JfdGFnYGAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBkZXJlZjxpPjo6dHlwZSBqOwoKOlByZWNvbmRpdGlvbjoKICAgIGBgaWBgIGlzIGRlcmVmZXJlbmNlYWJsZSAKCjpTZW1hbnRpY3M6CiAgICBgYGpgYCBpcyBpZGVudGljYWwgdG8gdGhlIHR5cGUgb2YgdGhlIHBvaW50ZWQgZWxlbWVudCAgCgoKLi4gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIG5leHQ8aT46OnR5cGUgajsKCjpQcmVjb25kaXRpb246CiAgICBgYGlgYCBpcyBpbmNyZW1lbnRhYmxlIAoKOlNlbWFudGljczoKICAgIGBgamBgIGlzIHRoZSBuZXh0IGl0ZXJhdG9yIGluIGEgc2VxdWVuY2UgCgo6UG9zdGNvbmRpdGlvbjoKICAgIGBgamBgIGlzIGRlcmVmZXJlbmNlYWJsZSBvciBwYXN0LXRoZS1lbmQgIAoKCi4uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBpOjpjYXRlZ29yeSBjOwoKOlNlbWFudGljczoKICAgIGBgY2BgIGlzIGlkZW50aWNhbCB0byB0aGUgaXRlcmF0b3IncyBjYXRlZ29yeSB0YWcKCgpJbnZhcmlhbnRzCi0tLS0tLS0tLS0KCkZvciBhbnkgZm9yd2FyZCBpdGVyYXRvcnMgYGBpYGAgYW5kIGBgamBgIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBhbHdheXMgaG9sZDogCgoqIGBgaWBgIGFuZCBgYGpgYCBhcmUgZXF1aXZhbGVudCBpZiBhbmQgb25seSBpZiB0aGV5IGFyZSBwb2ludGluZyB0byB0aGUgc2FtZSAKICBlbGVtZW50LgoKKiBJZiBgYGlgYCBpcyBkZXJlZmVyZW5jZWFibGUsIGFuZCBgYGpgYCBpcyBlcXVpdmFsZW50IHRvIGBgaWBgLCB0aGVuIGBgamBgIGlzIAogIGRlcmVmZXJlbmNlYWJsZSBhcyB3ZWxsLgoKKiBJZiBgYGlgYCBhbmQgYGBqYGAgYXJlIGVxdWl2YWxlbnQgYW5kIGRlcmVmZXJlbmNlYWJsZSwgdGhlbiBgYGRlcmVmPGk+Ojp0eXBlYGAgCiAgYW5kIGBgZGVyZWY8aj46OnR5cGVgYCBhcmUgaWRlbnRpY2FsLiAKCiogSWYgYGBpYGAgaXMgaW5jcmVtZW50YWJsZSwgYW5kIGBgamBgIGlzIGVxdWl2YWxlbnQgdG8gYGBpYGAsIHRoZW4gYGBqYGAgaXMgCiAgaW5jcmVtZW50YWJsZSBhcyB3ZWxsLgoKKiBJZiBgYGlgYCBhbmQgYGBqYGAgYXJlIGVxdWl2YWxlbnQgYW5kIGluY3JlbWVudGFibGUsIHRoZW4gYGBuZXh0PGk+Ojp0eXBlYGAgCiAgYW5kIGBgbmV4dDxqPjo6dHlwZWBgIGFyZSBlcXVpdmFsZW50LiAKCgpTZWUgYWxzbwotLS0tLS0tLQoKfEl0ZXJhdG9yc3wsIHxCaWRpcmVjdGlvbmFsIEl0ZXJhdG9yfCwgfEZvcndhcmQgU2VxdWVuY2V8LCB8ZGVyZWZ8LCB8bmV4dHwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==