PGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KPHRpdGxlPkN1c3RvbSBQb2x5Z29uIFNldDwvdGl0bGU+CjwvaGVhZD4KCjxib2R5PgoKPHA+PGZvbnQgZmFjZT0iQ291cmllciBOZXciPi8qPGJyPgpDb3B5cmlnaHQgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbjxicj4KPGJyPgpVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLDxicj4KVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQ8YnI+Cmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuPGJyPgoqLzxicj4KI2luY2x1ZGUgJmx0O2Jvb3N0L3BvbHlnb24vcG9seWdvbi5ocHAmZ3Q7PGJyPgojaW5jbHVkZSAmbHQ7bGlzdCZndDs8YnI+CiNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7PGJyPgojaW5jbHVkZSAmbHQ7Y2Fzc2VydCZndDs8YnI+CiNpbmNsdWRlICZsdDtkZXF1ZSZndDs8YnI+CiNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDs8YnI+Cm5hbWVzcGFjZSBndGwgPSBib29zdDo6cG9seWdvbjs8YnI+CnVzaW5nIG5hbWVzcGFjZSBib29zdDo6cG9seWdvbjo6b3BlcmF0b3JzOzxicj48YnI+Ci8vb25jZSBhZ2FpbiB3ZSBtYWtlIG91ciB1c2FnZSBvZiB0aGUgbGlicmFyeSBnZW5lcmljPGJyPgovL2FuZCBwYXJhbWV0ZXJpemUgaXQgb24gdGhlIHBvbHlnb24gc2V0IHR5cGU8YnI+CnRlbXBsYXRlICZsdDt0eXBlbmFtZSBQb2x5Z29uU2V0Jmd0Ozxicj4Kdm9pZCB0ZXN0X3BvbHlnb25fc2V0KCkgezxicj4KJm5ic3A7IHVzaW5nIG5hbWVzcGFjZSBndGw7IDxicj4KJm5ic3A7IFBvbHlnb25TZXQgcHM7PGJyPgombmJzcDsgcHMgKz0gcmVjdGFuZ2xlX2RhdGEmbHQ7aW50Jmd0OygwLCAwLCAxMCwgMTApOzxicj4KJm5ic3A7IFBvbHlnb25TZXQgcHMyOzxicj4KJm5ic3A7IHBzMiArPSByZWN0YW5nbGVfZGF0YSZsdDtpbnQmZ3Q7KDUsIDUsIDE1LCAxNSk7PGJyPgombmJzcDsgUG9seWdvblNldCBwczM7PGJyPgombmJzcDsgYXNzaWduKHBzMywgcHMgKiBwczIpOyA8YnI+CiZuYnNwOyBQb2x5Z29uU2V0IHBzNDs8YnI+CiZuYnNwOyBwczQgKz0gcHMgKyBwczI7PGJyPgombmJzcDsgYXNzZXJ0KGFyZWEocHM0KSA9PSBhcmVhKHBzKSArIGFyZWEocHMyKSAtIGFyZWEocHMzKSk7PGJyPgombmJzcDsgYXNzZXJ0KGVxdWl2YWxlbmNlKChwcyArIHBzMikgLSAocHMgKiBwczIpLCBwcyBeIHBzMikpOzxicj4KJm5ic3A7IHJlY3RhbmdsZV9kYXRhJmx0O2ludCZndDsgcmVjdDs8YnI+CiZuYnNwOyBhc3NlcnQoZXh0ZW50cyhyZWN0LCBwcyBeIHBzMikpOzxicj4KJm5ic3A7IGFzc2VydChhcmVhKHJlY3QpID09IDIyNSk7PGJyPgombmJzcDsgYXNzZXJ0KGFyZWEocmVjdCBeIChwcyBeIHBzMikpID09IGFyZWEocmVjdCkgLSBhcmVhKHBzIF4gcHMyKSk7IDxicj4KfTxicj4KPGJyPgovL2ZpcnN0IHRoaW5nIGlzIGZpcnN0LCBsZXRzIGluY2x1ZGUgYWxsIHRoZSBjb2RlIGZyb20gcHJldmlvdXMgZXhhbXBsZXM8YnI+Cjxicj4KLy90aGUgQ1BvaW50IGV4YW1wbGU8YnI+CnN0cnVjdCBDUG9pbnQgezxicj4KJm5ic3A7IGludCB4Ozxicj4KJm5ic3A7IGludCB5Ozxicj4KfTs8YnI+Cjxicj4KbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIHBvbHlnb24gezxicj4KJm5ic3A7IHRlbXBsYXRlICZsdDsmZ3Q7PGJyPgombmJzcDsgc3RydWN0IGdlb21ldHJ5X2NvbmNlcHQmbHQ7Q1BvaW50Jmd0OyB7IHR5cGVkZWYgcG9pbnRfY29uY2VwdCB0eXBlOyB9Ozxicj4KJm5ic3A7IHRlbXBsYXRlICZsdDsmZ3Q7PGJyPgombmJzcDsgc3RydWN0IHBvaW50X3RyYWl0cyZsdDtDUG9pbnQmZ3Q7IHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB0eXBlZGVmIGludCBjb29yZGluYXRlX3R5cGU7PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgaW5saW5lIGNvb3JkaW5hdGVfdHlwZSBnZXQoY29uc3QgQ1BvaW50JmFtcDsgcG9pbnQsIDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IApvcmllbnRhdGlvbl8yZCBvcmllbnQpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpZihvcmllbnQgPT0gSE9SSVpPTlRBTCk8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gcG9pbnQueDs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gcG9pbnQueTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgombmJzcDsgfTs8YnI+Cjxicj4KJm5ic3A7IHRlbXBsYXRlICZsdDsmZ3Q7PGJyPgombmJzcDsgc3RydWN0IHBvaW50X211dGFibGVfdHJhaXRzJmx0O0NQb2ludCZndDsgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHN0YXRpYyBpbmxpbmUgdm9pZCBzZXQoQ1BvaW50JmFtcDsgcG9pbnQsIG9yaWVudGF0aW9uXzJkIG9yaWVudCwgCmludCB2YWx1ZSkgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmKG9yaWVudCA9PSBIT1JJWk9OVEFMKTxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHBvaW50LnggPSB2YWx1ZTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBlbHNlPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcG9pbnQueSA9IHZhbHVlOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgaW5saW5lIENQb2ludCBjb25zdHJ1Y3QoaW50IHhfdmFsdWUsIGludCB5X3ZhbHVlKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQ1BvaW50IHJldHZhbDs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR2YWwueCA9IHhfdmFsdWU7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dmFsLnkgPSB5X3ZhbHVlOyA8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gcmV0dmFsOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiZuYnNwOyB9Ozxicj4KfSB9PGJyPgo8YnI+Ci8vdGhlIENQb2x5Z29uIGV4YW1wbGU8YnI+CnR5cGVkZWYgc3RkOjpsaXN0Jmx0O0NQb2ludCZndDsgQ1BvbHlnb247PGJyPgo8YnI+Ci8vd2UgbmVlZCB0byBzcGVjaWFsaXplIG91ciBwb2x5Z29uIGNvbmNlcHQgbWFwcGluZyBpbiBib29zdCBwb2x5Z29uPGJyPgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgcG9seWdvbiB7PGJyPgombmJzcDsgLy9maXJzdCByZWdpc3RlciBDUG9seWdvbiBhcyBhIHBvbHlnb25fY29uY2VwdCB0eXBlPGJyPgombmJzcDsgdGVtcGxhdGUgJmx0OyZndDs8YnI+CiZuYnNwOyBzdHJ1Y3QgZ2VvbWV0cnlfY29uY2VwdCZsdDtDUG9seWdvbiZndDt7IHR5cGVkZWYgcG9seWdvbl9jb25jZXB0IHR5cGU7IH07PGJyPgo8YnI+CiZuYnNwOyB0ZW1wbGF0ZSAmbHQ7Jmd0Ozxicj4KJm5ic3A7IHN0cnVjdCBwb2x5Z29uX3RyYWl0cyZsdDtDUG9seWdvbiZndDsgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHR5cGVkZWYgaW50IGNvb3JkaW5hdGVfdHlwZTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB0eXBlZGVmIENQb2x5Z29uOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcl90eXBlOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHR5cGVkZWYgQ1BvaW50IHBvaW50X3R5cGU7PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAvLyBHZXQgdGhlIGJlZ2luIGl0ZXJhdG9yPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgc3RhdGljIGlubGluZSBpdGVyYXRvcl90eXBlIGJlZ2luX3BvaW50cyhjb25zdCBDUG9seWdvbiZhbXA7IHQpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gdC5iZWdpbigpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIEdldCB0aGUgZW5kIGl0ZXJhdG9yPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgc3RhdGljIGlubGluZSBpdGVyYXRvcl90eXBlIGVuZF9wb2ludHMoY29uc3QgQ1BvbHlnb24mYW1wOyB0KSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIHQuZW5kKCk7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgLy8gR2V0IHRoZSBudW1iZXIgb2Ygc2lkZXMgb2YgdGhlIHBvbHlnb248YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgaW5saW5lIHN0ZDo6c2l6ZV90IHNpemUoY29uc3QgQ1BvbHlnb24mYW1wOyB0KSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIHQuc2l6ZSgpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIEdldCB0aGUgd2luZGluZyBkaXJlY3Rpb24gb2YgdGhlIHBvbHlnb248YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgaW5saW5lIHdpbmRpbmdfZGlyZWN0aW9uIHdpbmRpbmcoY29uc3QgQ1BvbHlnb24mYW1wOyB0KSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIHVua25vd25fd2luZGluZzs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgombmJzcDsgfTs8YnI+Cjxicj4KJm5ic3A7IHRlbXBsYXRlICZsdDsmZ3Q7PGJyPgombmJzcDsgc3RydWN0IHBvbHlnb25fbXV0YWJsZV90cmFpdHMmbHQ7Q1BvbHlnb24mZ3Q7IHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAvL2V4cGVjdHMgc3RsIHN0eWxlIGl0ZXJhdG9yczxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHRlbXBsYXRlICZsdDt0eXBlbmFtZSBpVCZndDs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgaW5saW5lIENQb2x5Z29uJmFtcDsgc2V0X3BvaW50cyhDUG9seWdvbiZhbXA7IHQsIDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IAppVCBpbnB1dF9iZWdpbiwgaVQgaW5wdXRfZW5kKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdC5jbGVhcigpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHdoaWxlKGlucHV0X2JlZ2luICE9IGlucHV0X2VuZCkgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHQucHVzaF9iYWNrKENQb2ludCgpKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBndGw6OmFzc2lnbih0LmJhY2soKSwgKmlucHV0X2JlZ2luKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyArK2lucHV0X2JlZ2luOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gdDs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgo8YnI+CiZuYnNwOyB9Ozxicj4KfSB9PGJyPgo8YnI+Ci8vT0ssIGZpbmFsbHkgd2UgZ2V0IHRvIGRlY2xhcmUgb3VyIG93biBwb2x5Z29uIHNldCB0eXBlPGJyPgp0eXBlZGVmIHN0ZDo6ZGVxdWUmbHQ7Q1BvbHlnb24mZ3Q7IENQb2x5Z29uU2V0Ozxicj4KPGJyPgovL2RlcXVlIGlzbid0IGF1dG9tYXRpY2FsbHkgYSBwb2x5Z29uIHNldCBpbiB0aGUgbGlicmFyeTxicj4KLy9iZWNhdXNlIGl0IGlzIGEgc3RhbmRhcmQgY29udGFpbmVyIHRoZXJlIGlzIGEgc2hvcnRjdXQ8YnI+Ci8vZm9yIG1hcHBpbmcgaXQgdG8gcG9seWdvbiBzZXQgY29uY2VwdCwgYnV0IEknbGwgZG8gaXQ8YnI+Ci8vdGhlIGxvbmcgd2F5IHRoYXQgeW91IHdvdWxkIHVzZSBpbiB0aGUgZ2VuZXJhbCBjYXNlLjxicj4KbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIHBvbHlnb24gezxicj4KJm5ic3A7IC8vZmlyc3Qgd2UgcmVnaXN0ZXIgQ1BvbHlnb25TZXQgYXMgYSBwb2x5Z29uIHNldDxicj4KJm5ic3A7IHRlbXBsYXRlICZsdDsmZ3Q7PGJyPgombmJzcDsgc3RydWN0IGdlb21ldHJ5X2NvbmNlcHQmbHQ7Q1BvbHlnb25TZXQmZ3Q7IHsgdHlwZWRlZiBwb2x5Z29uX3NldF9jb25jZXB0IHR5cGU7IAp9Ozxicj4KPGJyPgombmJzcDsgLy9uZXh0IHdlIG1hcCB0byB0aGUgY29uY2VwdCB0aHJvdWdoIHRyYWl0czxicj4KJm5ic3A7IHRlbXBsYXRlICZsdDsmZ3Q7PGJyPgombmJzcDsgc3RydWN0IHBvbHlnb25fc2V0X3RyYWl0cyZsdDtDUG9seWdvblNldCZndDsgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHR5cGVkZWYgaW50IGNvb3JkaW5hdGVfdHlwZTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB0eXBlZGVmIENQb2x5Z29uU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcl90eXBlOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHR5cGVkZWYgQ1BvbHlnb25TZXQgb3BlcmF0b3JfYXJnX3R5cGU7PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgaW5saW5lIGl0ZXJhdG9yX3R5cGUgYmVnaW4oY29uc3QgQ1BvbHlnb25TZXQmYW1wOyAKcG9seWdvbl9zZXQpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gcG9seWdvbl9zZXQuYmVnaW4oKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgaW5saW5lIGl0ZXJhdG9yX3R5cGUgZW5kKGNvbnN0IENQb2x5Z29uU2V0JmFtcDsgCnBvbHlnb25fc2V0KSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIHBvbHlnb25fc2V0LmVuZCgpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IC8vZG9uJ3Qgd29ycnkgYWJvdXQgdGhlc2UsIGp1c3QgcmV0dXJuIGZhbHNlIGZyb20gdGhlbTxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHN0YXRpYyBpbmxpbmUgYm9vbCBjbGVhbihjb25zdCBDUG9seWdvblNldCZhbXA7IHBvbHlnb25fc2V0KSB7IApyZXR1cm4gZmFsc2U7IH08YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgaW5saW5lIGJvb2wgc29ydGVkKGNvbnN0IENQb2x5Z29uU2V0JmFtcDsgcG9seWdvbl9zZXQpIHsgCnJldHVybiBmYWxzZTsgfTxicj4KJm5ic3A7IH07PGJyPgo8YnI+CiZuYnNwOyB0ZW1wbGF0ZSAmbHQ7Jmd0Ozxicj4KJm5ic3A7IHN0cnVjdCBwb2x5Z29uX3NldF9tdXRhYmxlX3RyYWl0cyZsdDtDUG9seWdvblNldCZndDsgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHRlbXBsYXRlICZsdDt0eXBlbmFtZSBpbnB1dF9pdGVyYXRvcl90eXBlJmd0Ozxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHN0YXRpYyBpbmxpbmUgdm9pZCBzZXQoQ1BvbHlnb25TZXQmYW1wOyBwb2x5Z29uX3NldCwgCmlucHV0X2l0ZXJhdG9yX3R5cGUgaW5wdXRfYmVnaW4sIGlucHV0X2l0ZXJhdG9yX3R5cGUgaW5wdXRfZW5kKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcG9seWdvbl9zZXQuY2xlYXIoKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvL3RoaXMgaXMga2luZCBvZiBjaGVlc3kuIEkgYW0gY29weWluZyB0aGUgCnVua25vd24gaW5wdXQgZ2VvbWV0cnk8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvL2ludG8gbXkgb3duIHBvbHlnb24gc2V0IGFuZCB0aGVuIGNhbGxpbmcgZ2V0IHRvIApwb3B1bGF0ZSB0aGU8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvL2RlcXVlPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcG9seWdvbl9zZXRfZGF0YSZsdDtpbnQmZ3Q7IHBzOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHBzLmluc2VydChpbnB1dF9iZWdpbiwgaW5wdXRfZW5kKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBwcy5nZXQocG9seWdvbl9zZXQpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vaWYgeW91IGhhZCB5b3VyIG93biBvZGQtYmFsbCBwb2x5Z29uIHNldCB5b3UgCndvdWxkIHByb2JhYmx5IGhhdmU8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvL3RvIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIHBvbHlnb24gYXQgdGhpcyBwb2ludCAKYW5kIGRvIHNvbWV0aGluZzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vZXh0cmE8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgombmJzcDsgfTs8YnI+Cn0gfTxicj4KPGJyPgppbnQgbWFpbigpIHs8YnI+CiZuYnNwOyBsb25nIGxvbmcgYzEgPSBjbG9jaygpOzxicj4KJm5ic3A7IGZvcihpbnQgaSA9IDA7IGkgJmx0OyAxMDAwOyArK2kpIDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHRlc3RfcG9seWdvbl9zZXQmbHQ7Q1BvbHlnb25TZXQmZ3Q7KCk7PGJyPgombmJzcDsgbG9uZyBsb25nIGMyID0gY2xvY2soKTs8YnI+CiZuYnNwOyBmb3IoaW50IGkgPSAwOyBpICZsdDsgMTAwMDsgKytpKSA8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB0ZXN0X3BvbHlnb25fc2V0Jmx0O2d0bDo6cG9seWdvbl9zZXRfZGF0YSZsdDtpbnQmZ3Q7ICZndDsoKTs8YnI+CiZuYnNwOyBsb25nIGxvbmcgYzMgPSBjbG9jaygpOzxicj4KJm5ic3A7IGxvbmcgbG9uZyBkaWZmMSA9IGMyIC0gYzE7PGJyPgombmJzcDsgbG9uZyBsb25nIGRpZmYyID0gYzMgLSBjMjs8YnI+CiZuYnNwOyBpZihkaWZmMSAmZ3Q7IDAgJmFtcDsmYW1wOyBkaWZmMik8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGQ6OmNvdXQgJmx0OyZsdDsgJnF1b3Q7bGlicmFyeSBwb2x5Z29uX3NldF9kYXRhIGlzICZxdW90OyAmbHQ7Jmx0OyAKZmxvYXQoZGlmZjEpL2Zsb2F0KGRpZmYyKSAmbHQ7Jmx0OyAmcXVvdDtYIGZhc3RlciB0aGFuIGN1c3RvbSBwb2x5Z29uIHNldCBkZXF1ZSBvZiBDUG9seWdvbiZxdW90OyAKJmx0OyZsdDsgc3RkOjplbmRsOzxicj4KJm5ic3A7IGVsc2U8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGQ6OmNvdXQgJmx0OyZsdDsgJnF1b3Q7b3BlcmF0aW9uIHdhcyB0b28gZmFzdCZxdW90OyAmbHQ7Jmx0OyBzdGQ6OmVuZGw7PGJyPgombmJzcDsgcmV0dXJuIDA7PGJyPgp9PC9mb250PjwvcD4KPHA+PGZvbnQgZmFjZT0iQ291cmllciBOZXciPi8vTm93IHlvdSBrbm93IGhvdyB0byBtYXAgeW91ciBvd24gZGF0YSB0eXBlIHRvIApwb2x5Z29uIHNldCBjb25jZXB0PGJyPgovL05vdyB5b3UgYWxzbyBrbm93IGhvdyB0byBtYWtlIHlvdXIgYXBwbGljYXRpb24gY29kZSB0aGF0IG9wZXJhdGVzIG9uIGdlb21ldHJ5PGJyPgovL2RhdGEgdHlwZSBhZ25vc3RpYyBmcm9tIHBvaW50IHRocm91Z2ggcG9seWdvbiBzZXQKJm5ic3A7PC9mb250PjwvcD4KCgo8dGFibGUgY2xhc3M9ImRvY2luZm8iIHJ1bGVzPSJub25lIiBmcmFtZT0idm9pZCIgaWQ9InRhYmxlMSI+Cgk8Y29sZ3JvdXA+CgkJPGNvbCBjbGFzcz0iZG9jaW5mby1uYW1lIj48Y29sIGNsYXNzPSJkb2NpbmZvLWNvbnRlbnQiPgoJPC9jb2xncm91cD4KCTx0Ym9keSB2QWxpZ249InRvcCI+CgkJPHRyPgoJCQk8dGggY2xhc3M9ImRvY2luZm8tbmFtZSI+Q29weXJpZ2h0OjwvdGg+CgkJCTx0ZD5Db3B5cmlnaHQgqSBJbnRlbCBDb3Jwb3JhdGlvbiAyMDA4LTIwMTAuPC90ZD4KCQk8L3RyPgoJCTx0ciBjbGFzcz0iZmllbGQiPgoJCQk8dGggY2xhc3M9ImRvY2luZm8tbmFtZSI+TGljZW5zZTo8L3RoPgoJCQk8dGQgY2xhc3M9ImZpZWxkLWJvZHkiPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCAKCQkJVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgPHR0IGNsYXNzPSJsaXRlcmFsIj4KCQkJPHNwYW4gY2xhc3M9InByZSI+TElDRU5TRV8xXzAudHh0PC9zcGFuPjwvdHQ+IG9yIGNvcHkgYXQKCQkJPGEgY2xhc3M9InJlZmVyZW5jZSIgdGFyZ2V0PSJfdG9wIiBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPgoJCQlodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvdGQ+CgkJPC90cj4KPC90YWJsZT4KCjwvYm9keT4KCjwvaHRtbD4K