rO0ABXQUrmZ1bmMlfCFGaWxsfGZpbGxfYmFja3dhcmQ6OmZpbGxfYmFja3dhcmQoVGltZXNlcmllcykNCi0gUmV0dXJucyB0aGUgZGFpbHkgc2VyaWVzIHdpdGggbnVsbCB2YWx1ZXMgZmlsbGVkIHVzaW5nIGZpcnN0IG9ic2VydmF0aW9uIGNhcnJpZWQgYmFja3dhcmQgKGZvY2IpIG1ldGhvZCV8IUZpbGx8ZmlsbF9mb3J3YXJkOjpmaWxsX2ZvcndhcmQoVGltZXNlcmllcykNCi0gUmV0dXJucyB0aGUgZGFpbHkgc2VyaWVzIHdpdGggbnVsbCB2YWx1ZXMgZmlsbGVkIHVzaW5nIGxhc3Qgb2JzZXJ2YXRpb24gY2FycmllZCBmb3J3YXJkIChsb2NmKSBtZXRob2QlfCFJbnRlcnBvbGF0aW9ufGludGVycG9sYXRlOjppbnRlcnBvbGF0ZShUaW1lc2VyaWVzKQ0KLSBSZXR1cm5zIHRoZSBkYWlseSBzZXJpZXMgd2l0aCBpbnRlcnBvbGF0ZWQgbWlzc2luZyBkYWlseSB2YWx1ZXMgZnJvbSBhbm90aGVyIHNlcmllcyV8IUxlYWQgYW5kIExhZ3xsYWc6OmxhZyhOdW1iZXIgWCwgSW50ZWdlciBEKQ0KLSBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcm93IG9mZnNldCBEIGJlZm9yZSBjdXJyZW50IHJvdw0KCgpFLmcuIGxhZyhGRURfVVNEX0NOWSwgMikgcmV0dXJucyB0aGUgdmFsdWUgb2Ygc3ltYm9sIEZFRF9VU0RfQ05ZIDIgZGF5cyBiZWZvcmUgY3VycmVudCByb3clfCFMZWFkIGFuZCBMYWd8bGVhZDo6bGVhZChOdW1iZXIgWCwgSW50ZWdlciBEKQ0KLSBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcm93IG9mZnNldCBEIGFmdGVyIGN1cnJlbnQgcm93DQoKCkUuZy4gbGVhZChGRURfVVNEX0NOWSwgMikgcmV0dXJucyB0aGUgdmFsdWUgb2Ygc3ltYm9sIEZFRF9VU0RfQ05ZIDIgZGF5cyBhZnRlciBjdXJyZW50IHJvdyV8IU1hdGh8YWJzOjphYnMoTnVtYmVyIFgpDQotIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgbnVtYmVyIFgsIGEgbnVtYmVyIHdpdGhvdXQgaXRzIHNpZ24NCg0KRS5nLiBhYnMoLTUuMikgcmV0dXJucyB2YWx1ZSBvZiA1LjIlfCFNYXRofGF2ZXJhZ2U6OmF2ZXJhZ2UoTnVtYmVyIEEsIE51bWJlciBCLCBOdW1iZXIgQyzigKYpDQoNCi0gUmV0dXJuIHRoZSBhdmVyYWdlIG9mIHVwIHRvIDEyIHN5bWJvbHMlfCFNYXRofGNicnQ6OmNicnQoTnVtYmVyIFgpDQotIFJldHVybnMgdGhlIGN1YmUgcm9vdCBvZiBhIG51bWJlciBYDQoNCg0KRS5nLiBjYnJ0KDgpIHJldHVybnMgdmFsdWUgb2YgMiV8IU1hdGh8Y2VpbDo6Y2VpbChOdW1iZXIgWCkNCi0gUmV0dXJucyB0aGUgbmVhcmVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBhIG51bWJlcg0KDQoNCkUuZy4gY2VpbCgtMzIuNykgcmV0dXJucyB2YWx1ZSBvZiAtMzIlfCFNYXRofGRlZ3JlZXM6OmRlZ3JlZXMoTnVtYmVyIFgpDQotIENvbnZlcnRzIHRoZSB2YWx1ZSBvZiBYIGluIHJhZGlhbnMgdG8gaW4gZGVncmVlcw0KDQoNCkUuZy4gZGVncmVlcygwLjUpIHJldHVybnMgdmFsdWUgb2YgMjguNjQ3ODg5NzU2NTQxMiV8IU1hdGh8ZGl2OjpkaXYoTnVtYmVyIFksIE51bWJlciBYKQ0KLSBSZXR1cm5zIHRoZSBpbnRlZ2VyIHF1b3RpZW50IG9mIFkvWA0KDQoNCkUuZy4gZGl2KDksNCkgcmV0dXJucyB2YWx1ZSBvZiAyJXwhTWF0aHxleHA6OmV4cChOdW1iZXIgWCkNClJldHVybnMgZSByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGEgZ2l2ZW4gbnVtYmVyIFggd2hlcmUgZSA9IDIuNzE4MjgxODI4NDU5MDUNCg0KDQpFLmcuIGV4cCgyLjApIHJldHVybnMgdmFsdWUgb2YgNy4zODkwNTYwOTg5MzA2NSV8IU1hdGh8Zmxvb3I6OmZsb29yKE51bWJlciBYKQ0KLSBSZXR1cm5zIHRoZSBuZWFyZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGEgbnVtYmVyIFgNCg0KDQpFLmcuICBGbG9vcigtMzIuNykgcmV0dXJucyB2YWx1ZSBvZiAtMzMlfCFNYXRofGxuOjpsbihOdW1iZXIgWCkNCi0gUmV0dXJucyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSBudW1iZXIgWA0KDQpFLmcuIGxuKDIuMCkgcmV0dXJucyB2YWx1ZSBvZiAwLjY5MzE0NzE4MDU1OTk0NSV8IU1hdGh8bG9nOjpsb2coTnVtYmVyIFgpDQotIFJldHVybnMgdGhlIGJhc2UgMTAgbG9nYXJpdGhtIG9mIGEgbnVtYmVyIFgNCg0KRS5nLiBsb2coMTAwLjApIHJldHVybnMgdmFsdWUgb2YgMiV8IU1hdGh8bG9nOjpsb2coTnVtYmVyIEIsIE51bWJlciBYKQ0KLSBSZXR1cm5zIHRoZSBiYXNlIEIgbG9nYXJpdGhtIG9mIGEgbnVtYmVyIFgNCg0KRS5nLiBsb2coMiwgNjQpIHJldHVybnMgdmFsdWUgb2YgNiV8IU1hdGh8bW9kOjptb2QoTnVtYmVyIFksIE51bWJlciBYKQ0KLSBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgWS9YDQoNCkUuZy4gbW9kKDksIDQpIHJldHVybnMgdmFsdWUgb2YgMSV8IU1hdGh8cGk6OnBpKCkNClJldHVybnMgdGhlIHZhbHVlIG9mIHBpDQoNCkUuZy4gcGkoKSByZXR1cm5zIHZhbHVlIG9mIDMuMTQxNTkyNjUzNTg5NzklfCFNYXRofHBvd2VyOjpwb3dlcihOdW1iZXIgWSwgTnVtYmVyIFgpDQpSZXR1cm5zIFkgcmFpc2VkIHRvIHRoZSBwb3dlciBvZiBhIGdpdmVuIG51bWJlciBYDQoNCkUuZy4gcG93ZXIoNCwzKSByZXR1cm5zIHZhbHVlIG9mIDY0JXwhTWF0aHxyYWRpYW5zOjpyYWRpYW5zKE51bWJlciBYKQ0KLSBDb252ZXJ0cyB0aGUgdmFsdWUgb2YgWCBpbiBkZWdyZWVzIHRvIGluIHJhZGlhbnMNCg0KRS5nLiByYWRpYW5zKDQ1LjApIHJldHVybnMgdmFsdWUgb2YgMC43ODUzOTgxNjMzOTc0NDglfCFNYXRofHJvdW5kOjpyb3VuZChOdW1iZXIgWCkNClJvdW5kcyBhIG51bWJlciBYIHRvIHRoZSBuZWFyZXN0IGludGVnZXINCg0KRS5nLiByb3VuZCgzMi4zKSByZXR1cm5zIHZhbHVlIG9mIDMyJXwhTWF0aHxyb3VuZDo6cm91bmQoTnVtYmVyIFgsIE51bWJlciBZKQ0KLSBSb3VuZHMgYSBudW1iZXIgWCB0byB0aGUgWSBkZWNpbWFsIHBsYWNlcw0KDQpFLmcuIHJvdW5kKDMyLjMxNDUsIDIpIHJldHVybnMgdmFsdWUgb2YgMzIuMzElfCFNYXRofHNpZ246OnNpZ24oTnVtYmVyIFgpDQotIFJvdW5kcyB0aGUgc2lnbiBvZiBhIG51bWJlciBYDQoNCkUuZy4gc2lnbigtMTIpIHJldHVybnMgdmFsdWUgb2YgLTElfCFNYXRofHNxcnQ6OnNxcnQoTnVtYmVyIFgpDQotIFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIGEgbnVtYmVyIFgNCg0KDQpFLmcuIHNxcnQoOSkgcmV0dXJucyB2YWx1ZSBvZiAzJXwhTWF0aHx0cnVuYzo6dHJ1bmMoTnVtYmVyIFgpDQotIFRydW5jYXRlcyB0aGUgZGVjaW1hbCBvZiBhIG51bWJlciBYIHRvIGFuIGludGVnZXINCg0KDQpFLmcuIHRydW5jKDkuNDMpIHJldHVybnMgdmFsdWUgb2YgOSV8IU1hdGh8dHJ1bmM6OnRydW5jKE51bWJlciBYLCBOdW1iZXIgWSkNCi0gVHJ1bmNhdGVzIHRoZSBkZWNpbWFsIG9mIGEgbnVtYmVyIFggdG8gWSBkZWNpbWFsIHBsYWNlcw0KDQoNCkUuZy4gdHJ1bmMoOS40MzU2LDMpIHJldHVybnMgdmFsdWUgb2YgOS40MzUlfCFNYXRofHdpZHRoX2J1Y2tldDo6d2lkdGhfYnVja2V0KE51bWJlciBBLCBOdW1iZXIgQjEsIE51bWJlciBCMiwgSW50ZWdlciBDKQ0KLSBSZXR1cm4gdGhlIGJ1Y2tldCB0byB3aGljaCBhIG51bWJlciBBIHdvdWxkIGJlIGFzc2lnbmVkIGluIGFuIGVxdWlkZXB0aCBoaXN0b2dyYW0gd2l0aCBjb3VudCBidWNrZXRzIEMsIGluIHRoZSByYW5nZSBCMSB0byBCMg0KDQpFLmcuIHdpZHRoX2J1Y2tldCg1LjM1LCAwLjAyNCwgMTAuMDYsIDUpIHJldHVybnMgdmFsdWUgb2YgMyV8IU1vdmV8cGVyY2VudF9tb3ZlOjpwZXJjZW50X21vdmUoTnVtYmVyIFgsIEludGVnZXIgRCkNCi0gUmV0dXJucyB0aGUgcGVyY2VudGFnZSBtb3ZlIG9mIHRoZSBjdXJ2ZSBmcm9tIEQgZGF5cyBiZWZvcmUgY3VycmVudCBkYXRlDQoKCkUuZy4gcGVyY2VudF9tb3ZlKE5ZTUVYX05HX0Z1dHVyZXMsIDMpIHJldHVybnMgdGhlIHBlcmNlbnRhZ2UgbW92ZSBvZiB0aGUgY3VydmUgTllNRVhfTkdfRnV0dXJlcyAzIGRheXMgYmVmb3JlIGN1cnJlbnQgcm93JXwhTW92ZXx2YWx1ZV9tb3ZlOjp2YWx1ZV9tb3ZlKE51bWJlciBYLCBJbnRlZ2VyIEQpDQotIFJldHVybnMgdGhlIHZhbHVlIG1vdmUgb2YgdGhlIGN1cnZlIGZyb20gRCBkYXlzIGJlZm9yZSBjdXJyZW50IGRhdGUNCgoKRS5nLiB2YWx1ZV9tb3ZlKE5ZTUVYX05HX0Z1dHVyZXMsIDMpIHJldHVybnMgdGhlIHZhbHVlIG1vdmUgb2YgdGhlIGN1cnZlIE5ZTUVYX05HX0Z1dHVyZXMgMyBkYXlzIGJlZm9yZSBjdXJyZW50IHJvdyV8IVRyaWdvbm9tZXRyaWN8YWNvczo6YWNvcyhOdW1iZXIgWCkNCi0gUmV0dXJucyB0aGUgaW52ZXJzZSBjb3NpbmUgb2YgYSBudW1iZXIgaW4gcmFkaWFucw0KDQpFLmcuIGFjb3MoMC41KSByZXR1cm5zIHZhbHVlIG9mIDEuMDQ3MTk3NTUxMTk2NiV8IVRyaWdvbm9tZXRyaWN8YXNpbjo6YXNpbihOdW1iZXIgWCkNCi0gUmV0dXJucyB0aGUgaW52ZXJzZSBzaW5lIG9mIGEgbnVtYmVyIGluIHJhZGlhbnMNCg0KRS5nLiBhc2luKDAuNSkgcmV0dXJucyB2YWx1ZSBvZiAwLjUyMzU5ODc3NTU5ODI5OSV8IVRyaWdvbm9tZXRyaWN8YXRhbjo6YXRhbihOdW1iZXIgWCkNCi0gUmV0dXJucyB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgbnVtYmVyIGluIHJhZGlhbnMNCg0KRS5nLiBhdGFuKDAuNSkgcmV0dXJucyB2YWx1ZSBvZiAwLjQ2MzY0NzYwOTAwMDgwNiV8IVRyaWdvbm9tZXRyaWN8YXRhbjI6OmF0YW4yKE51bWJlciBZLCBOdW1iZXIgWCkNCi0gUmV0dXJucyB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgWS9YIGluIHJhZGlhbnMNCg0KRS5nLiBhdGFuMig1LDMpIHJldHVybnMgdmFsdWUgb2YgMS4wMzAzNzY4MjY1MjQzMSV8IVRyaWdvbm9tZXRyaWN8Y29zOjpjb3MoTnVtYmVyIFgpDQotIFJldHVybnMgdGhlIGNvc2luZSBvZiBhIG51bWJlciBpbiByYWRpYW5zDQoNCkUuZy4gY29zKDIpIHJldHVybnMgdmFsdWUgb2YgLTAuNDE2MTQ2ODM2NTQ3MTQyJXwhVHJpZ29ub21ldHJpY3xjb3Q6OmNvdChOdW1iZXIgWCkNCi0gUmV0dXJucyB0aGUgY290YW5nZW50IG9mIGEgbnVtYmVyIGluIHJhZGlhbnMNCg0KRS5nLiBjb3QoMikgcmV0dXJucyB2YWx1ZSBvZiAtMC40NTc2NTc1NTQzNjAyODYlfCFUcmlnb25vbWV0cmljfHNpbjo6c2luKE51bWJlciBYKQ0KLSBSZXR1cm5zIHRoZSBzaW5lIG9mIGEgbnVtYmVyIGluIHJhZGlhbnMNCg0KRS5nLiBzaW4oMikgcmV0dXJucyB2YWx1ZSBvZiAwLjkwOTI5NzQyNjgyNTY4MiV8IVRyaWdvbm9tZXRyaWN8dGFuOjp0YW4oTnVtYmVyIFgpDQotIFJldHVybnMgdGhlIHRhbmdlbnQgb2YgYSBudW1iZXIgaW4gcmFkaWFucw0KDQpFLmcuIHRhbigyKSByZXR1cm5zIHZhbHVlIG9mIC0yLjE4NTAzOTg2MzI2MTUy