Li4gTWV0YWZ1bmN0aW9ucy9Db25jZXB0cy8vTnVtZXJpYyBNZXRhZnVuY3Rpb24gfDYwCgpOdW1lcmljIE1ldGFmdW5jdGlvbgo9PT09PT09PT09PT09PT09PT09PQoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KCkEgfE51bWVyaWMgTWV0YWZ1bmN0aW9ufCBpcyBhIHx0YWcgZGlzcGF0Y2hlZCBtZXRhZnVuY3Rpb258IHRoYXQgcHJvdmlkZXMgCmEgYnVpbHQtaW4gaW5mcmFzdHJ1Y3R1cmUgZm9yIGVhc3kgaW1wbGVtZW50YXRpb24gb2YgbWl4ZWQtdHlwZSBvcGVyYXRpb25zLgoKCkV4cHJlc3Npb24gcmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp8SW4gdGhlIGZvbGxvd2luZyB0YWJsZS4uLnwgYGBvcGBgIGlzIGEgcGxhY2Vob2xkZXIgdG9rZW4gZm9yIHRoZSBhY3R1YWwgCnxOdW1lcmljIE1ldGFmdW5jdGlvbnwncyBuYW1lLCBhbmQgYGB4YGAsIGBgeWBgIGFuZCB8eDEuLi54bnwgYXJlCmFyYml0cmFyeSBudW1lcmljIHR5cGVzLgoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IEV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgIHwgQ29tcGxleGl0eSAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfGBgb3BfdGFnPHg+Ojp0eXBlYGAgICAgICAgICAgICAgICAgICAgICAgICB8IHxJbnRlZ3JhbCBDb25zdGFudHwgICB8IEFtb3J0aXplZCBjb25zdGFudCB0aW1lLiAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgLi4gcGFyc2VkLWxpdGVyYWw6OiAgICAgICAgICAgICAgICAgICAgICAgfCBBbnkgdHlwZSAgICAgICAgICAgICAgfCBVbnNwZWNpZmllZC4gICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgIG9wX2ltcGw8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICBvcF90YWc8eD46OnR5cGUgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAsIG9wX3RhZzx5Pjo6dHlwZSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgID46OmFwcGx5PHgseT46OnR5cGUgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfGBgb3A8YGBcIHx4MS4uLnhufFwgYGA+Ojp0eXBlYGAgICAgICAgICAgICB8IEFueSB0eXBlICAgICAgICAgICAgICB8IFVuc3BlY2lmaWVkLiAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIG9wX3RhZzx4Pjo6dHlwZSB0YWc7Cgo6U2VtYW50aWNzOgogICAgYGB0YWdgYCBpcyBhIHRhZyB0eXBlIGZvciBgYHhgYCBmb3IgYGBvcGBgLiAKICAgIGBgdGFnOjp2YWx1ZWBgIGlzIGBgeGBgXCAncyAqY29udmVyc2lvbiByYW5rKi4KCgouLiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgb3BfaW1wbDwKICAgICAgICAgIG9wX3RhZzx4Pjo6dHlwZQogICAgICAgICwgb3BfdGFnPHk+Ojp0eXBlCiAgICAgICAgPjo6YXBwbHk8eCx5Pjo6dHlwZSByOwoKOlNlbWFudGljczoKICAgIGBgcmBgIGlzIHRoZSByZXN1bHQgb2YgYGBvcGBgIGFwcGxpY2F0aW9uIG9uIGFyZ3VtZW50cyBgYHhgYCAKICAgIGFuZCBgYHlgYC4KCgouLiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgb3A8XCB8eDEuLi54bnxcID46OnR5cGUgcjsKCjpTZW1hbnRpY3M6CiAgICBgYHJgYCBpcyB0aGUgcmVzdWx0IG9mIGBgb3BgYCBhcHBsaWNhdGlvbiBvbiBhcmd1bWVudHMgfHgxLi4ueG58LgoKCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgoKICAgIHN0cnVjdCBjb21wbGV4X3RhZyA6IGludF88MTA+IHt9OwoKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBSZSwgdHlwZW5hbWUgSW0gPiBzdHJ1Y3QgY29tcGxleAogICAgewogICAgICAgIHR5cGVkZWYgY29tcGxleF90YWcgdGFnOwogICAgICAgIHR5cGVkZWYgY29tcGxleCB0eXBlOwogICAgICAgIHR5cGVkZWYgUmUgcmVhbDsKICAgICAgICB0eXBlZGVmIEltIGltYWc7CiAgICB9OwoKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBDID4gc3RydWN0IHJlYWwgOiBDOjpyZWFsIHt9OwogICAgdGVtcGxhdGU8IHR5cGVuYW1lIEMgPiBzdHJ1Y3QgaW1hZyA6IEM6OmltYWcge307CgogICAgbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7CgogICAgdGVtcGxhdGU8PgogICAgc3RydWN0IHBsdXNfaW1wbDwgY29tcGxleF90YWcsY29tcGxleF90YWcgPgogICAgewogICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBOMSwgdHlwZW5hbWUgTjIgPiBzdHJ1Y3QgYXBwbHkKICAgICAgICAgICAgOiBjb21wbGV4PAogICAgICAgICAgICAgICAgICBwbHVzPCB0eXBlbmFtZSBOMTo6cmVhbCwgdHlwZW5hbWUgTjI6OnJlYWwgPgogICAgICAgICAgICAgICAgLCBwbHVzPCB0eXBlbmFtZSBOMTo6aW1hZywgdHlwZW5hbWUgTjI6OmltYWcgPgogICAgICAgICAgICAgICAgPgogICAgICAgIHsKICAgICAgICB9OwogICAgfTsKCiAgICB9fQoKICAgIHR5cGVkZWYgY29tcGxleDwgaW50Xzw1PiwgaW50XzwtMT4gPiBjMTsKICAgIHR5cGVkZWYgY29tcGxleDwgaW50XzwtNT4sIGludF88MT4gPiBjMjsKCiAgICB0eXBlZGVmIHBsdXM8YzEsYzI+IHIxOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggcmVhbDxyMT46OnZhbHVlLCA9PSwgMCApOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggaW1hZzxyMT46OnZhbHVlLCA9PSwgMCApOwoKICAgIHR5cGVkZWYgcGx1czxjMSxjMT4gcjI7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCByZWFsPHIyPjo6dmFsdWUsID09LCAxMCApOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggaW1hZzxyMj46OnZhbHVlLCA9PSwgLTIgKTsKCiAgICB0eXBlZGVmIHBsdXM8YzIsYzI+IHIzOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggcmVhbDxyMz46OnZhbHVlLCA9PSwgLTEwICk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBpbWFnPHIzPjo6dmFsdWUsID09LCAyICk7CgoKCk1vZGVscwotLS0tLS0KCiogfHBsdXN8CiogfG1pbnVzfAoqIHx0aW1lc3wKKiB8ZGl2aWRlc3wKCgpTZWUgYWxzbwotLS0tLS0tLQoKfFRhZyBEaXNwYXRjaGVkIE1ldGFmdW5jdGlvbnwsIHxNZXRhZnVuY3Rpb25zfCwgfG51bWVyaWNfY2FzdHwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==