Pj4KPj5jcmVhdGUgdGFibGUgdGFiX2lzbzkxIChjIGNoYXIoMTApIGNoYXJhY3RlciBzZXQgSVNPODg1OTEpOwoKLS0tIFNRTCBvcGVyYXRpb24gY29tcGxldGUuCj4+Y3JlYXRlIHRhYmxlIHRhYl91Y3MyIChkIGNoYXIoMTApIGNoYXJhY3RlciBzZXQgVUNTMik7CgotLS0gU1FMIG9wZXJhdGlvbiBjb21wbGV0ZS4KPj5jcmVhdGUgdGFibGUgdGFiX2ludCggaSBpbnQpOwoKLS0tIFNRTCBvcGVyYXRpb24gY29tcGxldGUuCj4+Cj4+P3NlY3Rpb24gZG1sCj4+Cj4+LS1wb3NpdGl2ZQo+Pgo+Pmluc2VydCBpbnRvIHRhYl9pbnQgdmFsdWVzKEFTQ0lJKCdhc2RmJykpOwoKLS0tIDEgcm93KHMpIGluc2VydGVkLgo+Pmluc2VydCBpbnRvIHRhYl9pbnQgdmFsdWVzKEFTQ0lJKHgnMDAnKSk7CgotLS0gMSByb3cocykgaW5zZXJ0ZWQuCj4+aW5zZXJ0IGludG8gdGFiX2ludCB2YWx1ZXMoY29kZV92YWx1ZSgnenhjdicpKTsKCi0tLSAxIHJvdyhzKSBpbnNlcnRlZC4KPj5pbnNlcnQgaW50byB0YWJfaW50IHZhbHVlcyhjb2RlX3ZhbHVlKCd6eGN2JykpOwoKLS0tIDEgcm93KHMpIGluc2VydGVkLgo+Pmluc2VydCBpbnRvIHRhYl9pbnQgdmFsdWVzKGNvZGVfdmFsdWUoX3VjczIgeCcxMjM0IDU2NzgnKSk7CgotLS0gMSByb3cocykgaW5zZXJ0ZWQuCj4+c2VsZWN0ICogZnJvbSB0YWJfaW50OwoKSSAgICAgICAgICAKLS0tLS0tLS0tLS0KCiAgICAgICAgIDk3CiAgICAgICAgICAwCiAgICAgICAgMTIyCiAgICAgICAgMTIyCiAgICAgICA0NjYwCgotLS0gNSByb3cocykgc2VsZWN0ZWQuCj4+Cj4+aW5zZXJ0IGludG8gdGFiX2lzbzkxIHZhbHVlcyhDSEFSKDQzKSk7CgotLS0gMSByb3cocykgaW5zZXJ0ZWQuCj4+aW5zZXJ0IGludG8gdGFiX2lzbzkxIHZhbHVlcyhDSEFSKDY1LCBJU084ODU5MSkpOwoKLS0tIDEgcm93KHMpIGluc2VydGVkLgo+PnNlbGVjdCAqIGZyb20gdGFiX2lzbzkxOwoKQyAgICAgICAgIAotLS0tLS0tLS0tCgorICAgICAgICAgCkEgICAgICAgICAKCi0tLSAyIHJvdyhzKSBzZWxlY3RlZC4KPj4KPj5pbnNlcnQgaW50byB0YWJfdWNzMiB2YWx1ZXMoQ0hBUigxMDQxLCBVQ1MyKSk7CgotLS0gMSByb3cocykgaW5zZXJ0ZWQuCj4+IC0tIGN5cmlsbGljIGNhcGl0YWwgbGV0dGVyIEJFCj4+aW5zZXJ0IGludG8gdGFiX3VjczIgdmFsdWVzKENIQVIoOTYxNywgVUNTMikpOwoKLS0tIDEgcm93KHMpIGluc2VydGVkLgo+PiAtLSBsaWdodCBzaGFkZSBzeW1ib2wKPj5zZWxlY3QgY29kZV92YWx1ZShkKSBmcm9tIHRhYl91Y3MyOwoKKEVYUFIpICAgIAotLS0tLS0tLS0tCgogICAgICAxMDQxCiAgICAgIDk2MTcKCi0tLSAyIHJvdyhzKSBzZWxlY3RlZC4KPj4KPj5zZWxlY3QgVVBQRVIoX1VDUzInQUxMIElOIENBUFMnKSBmcm9tICh2YWx1ZXMoMSkpeDsKCihFWFBSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFMTCBJTiBDQVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKLS0tIDEgcm93KHMpIHNlbGVjdGVkLgo+PnNlbGVjdCBVUFBFUihfVUNTMidhbGwgaW4gc21hbGwgY2FzZScpIGZyb20gKHZhbHVlcygxKSl4OwoKKEVYUFIpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQUxMIElOIFNNQUxMIENBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgotLS0gMSByb3cocykgc2VsZWN0ZWQuCj4+c2VsZWN0IGxvd2VyKF9VQ1MyJ0FMTCBJTiBDQVBTJykgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmFsbCBpbiBjYXBzICAgICAgICAgICAKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj5zZWxlY3QgbG93ZXIoX1VDUzInYWxsIGluIHNtYWxsIGNhc2UnKSBmcm9tICh2YWx1ZXMoMSkpeDsKCihFWFBSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKYWxsIGluIHNtYWxsIGNhc2UgICAgICAgICAgICAgICAgIAoKLS0tIDEgcm93KHMpIHNlbGVjdGVkLgo+Pgo+Pi0tIHRpdGxlIGNhc2VzLgo+Pi0tMHgwMUYxICJEWiIgY2FwaXRhbCBkeiBpcyBVKzAxRjIgIkR6IiBjYXBpdGFsIGQgd2l0aCBzbWFsbCB6LiAKPj4KPj4KPj4tLSBzaG91bGQgZ2V0IDB4MDFmMSA9IDQ5Nwo+PnNlbGVjdCBjb2RlX3ZhbHVlKFVQUEVSKF9VQ1MyIHgnMDFmMicpKSBmcm9tICh2YWx1ZXMoMSkpeDsKCihFWFBSKSAgICAKLS0tLS0tLS0tLQoKICAgICAgIDQ5NwoKLS0tIDEgcm93KHMpIHNlbGVjdGVkLgo+Pgo+Pi0tIHNob3VsZCBnZXQgMHgwMWYzID0gNDk5Cj4+c2VsZWN0IGNvZGVfdmFsdWUobG93ZXIoX1VDUzIgeCcwMWYyJykpIGZyb20gKHZhbHVlcygxKSl4OwoKKEVYUFIpICAgIAotLS0tLS0tLS0tCgogICAgICAgNDk5CgotLS0gMSByb3cocykgc2VsZWN0ZWQuCj4+Cj4+LS0wMGUwIGFuZCAwMGY2Cj4+c2VsZWN0IGNvbnZlcnR0b2hleCh1cHBlcihfdWNzMiB4JzAwZTAgMDBmNicpKSBmcm9tICh2YWx1ZXMoMSkpeDsKCihFWFBSKSAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCjAwQzAwMEQ2ICAgICAgICAgICAgICAgIAoKLS0tIDEgcm93KHMpIHNlbGVjdGVkLgo+PnNlbGVjdCBjb252ZXJ0dG9oZXgobG93ZXIoX3VjczIgeCcwMGMwIDAwZDYnKSkgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgIAotLS0tLS0tLQoKMDBFMDAwRjYKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj5zZWxlY3QgY29udmVydHRvaGV4KGNvZGVfdmFsdWUoX3VjczIgeCcwMGMwIDAwZDYnKSkgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgIAotLS0tLS0tLQoKQzAwMDAwMDAKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj4KPj4tLTAxMzAKPj5zZWxlY3QgY29udmVydHRvaGV4KGxvd2VyKF9VQ1MyIHgnMDEzMCcpKSBmcm9tICh2YWx1ZXMoMSkpeDsKCihFWFBSKQotLS0tLS0KCjAwNjkgIAoKLS0tIDEgcm93KHMpIHNlbGVjdGVkLgo+PnNlbGVjdCBjb252ZXJ0dG9oZXgodXBwZXIoX1VDUzIgeCcwMTMwJykpIGZyb20gKHZhbHVlcygxKSl4OwoKKEVYUFIpICAgICAgCi0tLS0tLS0tLS0tLQoKMDEzMCAgICAgICAgCgotLS0gMSByb3cocykgc2VsZWN0ZWQuCj4+Cj4+LS0wMTMxCj4+c2VsZWN0IGNvbnZlcnR0b2hleChsb3dlcihfVUNTMiB4JzAxMzEnKSkgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikKLS0tLS0tCgowMTMxICAKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj5zZWxlY3QgY29udmVydHRvaGV4KHVwcGVyKF9VQ1MyIHgnMDEzMScpKSBmcm9tICh2YWx1ZXMoMSkpeDsKCihFWFBSKSAgICAgIAotLS0tLS0tLS0tLS0KCjAwNDkgICAgICAgIAoKLS0tIDEgcm93KHMpIHNlbGVjdGVkLgo+Pgo+Pi0tIDFlOWEgLT4gMDA0MSAwMmJlCj4+LS0gMDBkZiAtPiAwMDUzIDAwNTMKPj5zZWxlY3QgY2hhcl9sZW5ndGgodXBwZXIoX1VDUzIgWCcxZTlhIDAwREYnKSkgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgICAgCi0tLS0tLS0tLS0KCiAgICAgICAgIDQKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj5zZWxlY3QgdXBwZXIocmVwZWF0KF9VQ1MyIFgnMDBERicsIDEwKSkgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpTU1NTU1NTU1NTU1NTU1NTU1NTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj4KPj4tLWJvdGggaGF2ZSB0aGUgc2FtZSB1cHBlci9sb3dlciBjYXNlCj4+c2VsZWN0IGNvZGVfdmFsdWUodXBwZXIoX3VjczIgeCcwMDAwJykpIGZyb20gKHZhbHVlcygxKSl4OwoKKEVYUFIpICAgIAotLS0tLS0tLS0tCgogICAgICAgICAwCgotLS0gMSByb3cocykgc2VsZWN0ZWQuCj4+c2VsZWN0IGNvZGVfdmFsdWUobG93ZXIoX3VjczIgeCdGRkZEJykpIGZyb20gKHZhbHVlcygxKSl4OwoKKEVYUFIpICAgIAotLS0tLS0tLS0tCgogICAgIDY1NTMzCgotLS0gMSByb3cocykgc2VsZWN0ZWQuCj4+Cj4+LS1sL3IgdHJpbXMKPj5zZWxlY3QgY2hhcl9sZW5ndGgobHRyaW0oX3VjczInICBhYmMgICcpKSBmcm9tICh2YWx1ZXMoMSkpeDsKCihFWFBSKSAgICAKLS0tLS0tLS0tLQoKICAgICAgICAgNQoKLS0tIDEgcm93KHMpIHNlbGVjdGVkLgo+PnNlbGVjdCBydHJpbShfdWNzMicgIGFiYyAgJykgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgICAgICAgIAotLS0tLS0tLS0tLS0tLQoKICBhYmMgICAgICAgICAKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj4KPj4tLXNwYWNlCj4+c2VsZWN0ICogZnJvbSAodmFsdWVzKDEpKXggd2hlcmUgY2hhcl9sZW5ndGgoc3BhY2UoMzAsIGlzbzg4NTkxKSkgPSAzMDsKCihFWFBSKQotLS0tLS0KCiAgICAgMQoKLS0tIDEgcm93KHMpIHNlbGVjdGVkLgo+PnNlbGVjdCAqIGZyb20gKHZhbHVlcygxKSl4IHdoZXJlIGNoYXJfbGVuZ3RoKHNwYWNlKDMwLCB1Y3MyKSkgPSAzMDsKCihFWFBSKQotLS0tLS0KCiAgICAgMQoKLS0tIDEgcm93KHMpIHNlbGVjdGVkLgo+PnNlbGVjdCBzcGFjZSgxMCkgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgICAgCi0tLS0tLS0tLS0KCiAgICAgICAgICAKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj5zZWxlY3Qgc3BhY2UoMTAsIHVjczIpIGZyb20gKHZhbHVlcygxKSl4OwoKKEVYUFIpICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICAgICAgICAgCgotLS0gMSByb3cocykgc2VsZWN0ZWQuCj4+Cj4+LS1yZXBsYWNlCj4+c2VsZWN0IHJlcGxhY2UoX3VjczInMWFiY2RlYWInLCBfdWNzMidhYmNkZWFiJywgX3VjczIgeCcwMDU4JykgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0KCjFYICAgICAgICAgICAgICAKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj5zZWxlY3QgcmVwbGFjZShfdWNzMicxYWJjZGVhYicsIF91Y3MyJ2FiY2RlYWInLCBfdWNzMiB4JycpIGZyb20gKHZhbHVlcygxKSl4OwoKKEVYUFIpICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tCgoxICAgICAgICAgICAgICAgCgotLS0gMSByb3cocykgc2VsZWN0ZWQuCj4+c2VsZWN0IHJlcGxhY2UoX3VjczInYWJjJywgX3VjczIneicsIF91Y3MyIHgnJykgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikKLS0tLS0tCgphYmMgICAKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj4KPj4tLVVDUzIgY29sdW1uIGNhbiBiZSB1c2VkIGluIHdoZXJlIGNsYXVzZQo+PnNlbGVjdCBkIGZyb20gdGFiX3VjczIgd2hlcmUgZCA9IF91Y3MyJ2FiYyc7CgotLS0gMCByb3cocykgc2VsZWN0ZWQuCj4+Cj4+LS1uZWdhdGl2ZQo+Pgo+Pi0tY2hhcnNldCBtaXNtYXRjaAo+PnNlbGVjdCBhc2NpaShfdWNzMidhc2RmJykgZnJvbSAodmFsdWVzKDEpKSB4OwoKKioqIEVSUk9SWzQxMDZdIFRoZSBjaGFyYWN0ZXIgc2V0IGZvciB0aGUgb3BlcmFuZCBvZiBmdW5jdGlvbiBBU0NJSSBtdXN0IGJlIElTTzg4NTkxLgoKKioqIEVSUk9SWzg4MjJdIFRoZSBzdGF0ZW1lbnQgd2FzIG5vdCBwcmVwYXJlZC4KCj4+aW5zZXJ0IGludG8gdGFiX3VjczIgdmFsdWVzKENIQVIoNDMpKTsKCi0tLSAxIHJvdyhzKSBpbnNlcnRlZC4KPj4KPj4tLWlsbGVnYWwgY2hhcnMKPj5zZWxlY3QgY2hhcigtMSkgZnJvbSAodmFsdWVzKDEpKSB4OwoKKioqIEVSUk9SWzg0MzJdIEEgbmVnYXRpdmUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZCBudW1lcmljIGRhdGF0eXBlLiBTb3VyY2UgVHlwZTpTTUFMTElOVCBTSUdORUQoTUJJTjE2UykgU291cmNlIFZhbHVlOi0xIFRhcmdldCBUeXBlOkxBUkdFSU5UKElCSU42NFMpIE1heCBUYXJnZXQgVmFsdWU6MC4gSW5zdHJ1Y3Rpb246UkFOR0VfTE9XX1MxNlM2NCBPcGVyYXRpb246UkFOR0VfTE9XLgoKLS0tIDAgcm93KHMpIHNlbGVjdGVkLgo+PnNlbGVjdCBjaGFyKDI1NykgZnJvbSAodmFsdWVzKDEpKSB4OwoKKioqIEVSUk9SWzg0MjhdIFRoZSBhcmd1bWVudCB0byBmdW5jdGlvbiBDSEFSIGlzIG5vdCB2YWxpZC4KCi0tLSAwIHJvdyhzKSBzZWxlY3RlZC4KPj5zZWxlY3QgY2hhcigtMTAsIHVjczIpIGZyb20gKHZhbHVlcygxKSkgeDsKCioqKiBFUlJPUls4NDMyXSBBIG5lZ2F0aXZlIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgbnVtZXJpYyBkYXRhdHlwZS4gU291cmNlIFR5cGU6U01BTExJTlQgU0lHTkVEKE1CSU4xNlMpIFNvdXJjZSBWYWx1ZTotMTAgVGFyZ2V0IFR5cGU6TEFSR0VJTlQoSUJJTjY0UykgTWF4IFRhcmdldCBWYWx1ZTowLiBJbnN0cnVjdGlvbjpSQU5HRV9MT1dfUzE2UzY0IE9wZXJhdGlvbjpSQU5HRV9MT1cuCgotLS0gMCByb3cocykgc2VsZWN0ZWQuCj4+c2VsZWN0IGNoYXIoNjU1MzUsIHVjczIpIGZyb20gKHZhbHVlcygxKSkgeDsKCioqKiBFUlJPUls4NDI4XSBUaGUgYXJndW1lbnQgdG8gZnVuY3Rpb24gQ0hBUiBpcyBub3QgdmFsaWQuCgotLS0gMCByb3cocykgc2VsZWN0ZWQuCj4+Cj4+LS0gb3ZlcmZsb3cgCj4+Cj4+LS1vayBhcyA0MDk2IGJ5dGVzIG9yIDIwNDggVUNTMiBjaGFycyBpcyB0aGUgdXBwZXIgbGltaXQuIDY4MnggMyA9IDIwNDYgCj4+c2VsZWN0IGNoYXJfbGVuZ3RoKHVwcGVyKHJlcGVhdChfdWNzMiB4JzAzOTAnLCA2ODIpKSkgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgICAgCi0tLS0tLS0tLS0KCiAgICAgIDIwNDYKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj4KPj4tLXNob3VsZCBzZWUgYW4gb3ZlcmZsb3cgZXJyb3IgKDY4M3gzPTIwNDkpCj4+c2VsZWN0IGNoYXJfbGVuZ3RoKHVwcGVyKHJlcGVhdChfdWNzMiB4JzAzOTAnLCA2ODMpKSkgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgICAgCi0tLS0tLS0tLS0KCiAgICAgIDIwNDkKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj4KPj4tLWRpc2FibGVkIG9sZCBmdW5jIG5hbWVzCj4+c2VsZWN0IHVuaWNvZGVfdmFsdWUoX3VjczIgeCcwMzkwJywgdWNzMikgZnJvbSAodmFsdWVzKDEpKXg7CgoqKiogRVJST1JbNDQ1MF0gRnVuY3Rpb24gVFJBRk9ESU9OLiJfVURGXyIuVU5JQ09ERV9WQUxVRSBpcyBub3QgYSBidWlsdC1pbiBmdW5jdGlvbiBvciByZWdpc3RlcmVkIHVzZXItZGVmaW5lZCBmdW5jdGlvbi4KCioqKiBFUlJPUls4ODIyXSBUaGUgc3RhdGVtZW50IHdhcyBub3QgcHJlcGFyZWQuCgo+PnNlbGVjdCB1bmljb2RlX2NoYXIoMDM5MCwgdWNzMikgZnJvbSAodmFsdWVzKDEpKXg7CgoqKiogRVJST1JbNDQ1MF0gRnVuY3Rpb24gVFJBRk9ESU9OLiJfVURGXyIuVU5JQ09ERV9DSEFSIGlzIG5vdCBhIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIHJlZ2lzdGVyZWQgdXNlci1kZWZpbmVkIGZ1bmN0aW9uLgoKKioqIEVSUk9SWzg4MjJdIFRoZSBzdGF0ZW1lbnQgd2FzIG5vdCBwcmVwYXJlZC4KCj4+Cj4+LS1yZXBsYWNlKCksIHplcm8gbGVuZ3RoIHBhdHRlcm4KPj5zZWxlY3QgcmVwbGFjZShfdWNzMidhYmMnLCBfdWNzMicnLCBfdWNzMiB4JycpIGZyb20gKHZhbHVlcygxKSl4OwoKKioqIEVSUk9SWzg0MjhdIFRoZSBhcmd1bWVudCB0byBmdW5jdGlvbiBSRVBMQUNFIGlzIG5vdCB2YWxpZC4KCioqKiBFUlJPUls4ODIyXSBUaGUgc3RhdGVtZW50IHdhcyBub3QgcHJlcGFyZWQuCgo+Pgo+Pi0tIEFOU0kgY2hhciBtYXRjaGluZyBydWxlcyBhcmUgcHJlc2VydmVkIChpLmUuLCByZWxheGF0aW9uIG9ubHkgZG9uZSBvbiBVQ1MyIGhvc3R2YXJzKQo+PnNlbGVjdCBfdWNzMidhYmMnIHx8ICcnIGZyb20gKHZhbHVlcygxKSl4OwoKKEVYUFIpCi0tLS0tLQoKYWJjICAgCgotLS0gMSByb3cocykgc2VsZWN0ZWQuCj4+Cj4+c2VsZWN0IGxlZnQocmVwZWF0KF91Y3MyIHgnMDBjMCAwMGQ2JywgMjUwMDApLCAxMCkgZnJvbSAodmFsdWVzKDEpKXg7CgooRVhQUikgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLQoKwNbA1sDWwNbA1iAgICAgICAgICAKCi0tLSAxIHJvdyhzKSBzZWxlY3RlZC4KPj5zZWxlY3QgX2lzbzg4NTkxIHgnJCMnIGZyb20gKHZhbHVlcygxKSl4OwoKKioqIEVSUk9SWzM0MDJdIFRoZSBmb3JtYXQgb2YgdGhlIElTTzg4NTkxIGhleGFkZWNpbWFsIHN0cmluZyBsaXRlcmFsIGlzIG5vdCB2YWxpZC4KCioqKiBFUlJPUlsxNTAwMV0gQSBzeW50YXggZXJyb3Igb2NjdXJyZWQgYXQgb3IgYmVmb3JlOiAKc2VsZWN0IF9pc284ODU5MSB4JyQjJyBmcm9tICh2YWx1ZXMoMSkpeDsKICAgICAgICAgICAgICAgICAgICAgXiAoMjIgY2hhcmFjdGVycyBmcm9tIHN0YXJ0IG9mIFNRTCBzdGF0ZW1lbnQpCgoqKiogRVJST1JbODgyMl0gVGhlIHN0YXRlbWVudCB3YXMgbm90IHByZXBhcmVkLgoKPj5zZWxlY3QgX3VjczIgeCcwYSQjJyBmcm9tICh2YWx1ZXMoMSkpeDsKCioqKiBFUlJPUlszNDAyXSBUaGUgZm9ybWF0IG9mIHRoZSBVQ1MyIGhleGFkZWNpbWFsIHN0cmluZyBsaXRlcmFsIGlzIG5vdCB2YWxpZC4KCioqKiBFUlJPUlsxNTAwMV0gQSBzeW50YXggZXJyb3Igb2NjdXJyZWQgYXQgb3IgYmVmb3JlOiAKc2VsZWN0IF91Y3MyIHgnMGEkIycgZnJvbSAodmFsdWVzKDEpKXg7CiAgICAgICAgICAgICAgICAgICBeICgyMCBjaGFyYWN0ZXJzIGZyb20gc3RhcnQgb2YgU1FMIHN0YXRlbWVudCkKCioqKiBFUlJPUls4ODIyXSBUaGUgc3RhdGVtZW50IHdhcyBub3QgcHJlcGFyZWQuCgo+Pgo+Pi0tbGFyZ2UgbGVuZ3RoIHZhbHVlcyBzaG91bGQgbm90IGNhdXNlIGNvcmUtZHVtcCAoY2FzZSAxMC0wNDAyMTgtMjM0NikKPj5zZWxlY3Qgc3BhY2UoMjE0NzQ4MzY0Nyx1Y3MyKSBmcm9tICh2YWx1ZXMgKDEpKSBhcyB4OwoKKioqIEVSUk9SWzQxMjldIFRoZSBjaGFyYWN0ZXItdHlwZWQgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBSRVBFQVQgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gc3VwcG9ydGVkIHNpemUuCgoqKiogRVJST1JbNDA2Ml0gVGhlIHByZWNlZGluZyBlcnJvciBhY3R1YWxseSBvY2N1cnJlZCBpbiBmdW5jdGlvbiBTUEFDRS4KCioqKiBFUlJPUls4ODIyXSBUaGUgc3RhdGVtZW50IHdhcyBub3QgcHJlcGFyZWQuCgo+PnNlbGVjdCBycGFkKE4ndGVzdCcsMjE0NzQ4MzY0NyxOJ1QnKSBmcm9tICh2YWx1ZXMoMSkpIGFzIHg7CgoqKiogRVJST1JbNDEyOV0gVGhlIGNoYXJhY3Rlci10eXBlZCByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIFJQQUQgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gc3VwcG9ydGVkIHNpemUuCgoqKiogRVJST1JbODgyMl0gVGhlIHN0YXRlbWVudCB3YXMgbm90IHByZXBhcmVkLgoKPj5zZWxlY3QgbHBhZChOJ3Rlc3QnLDIxNDc0ODM2NDcsTidUJykgZnJvbSAodmFsdWVzKDEpKSBhcyB4OwoKKioqIEVSUk9SWzQxMjldIFRoZSBjaGFyYWN0ZXItdHlwZWQgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBSRVBFQVQgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gc3VwcG9ydGVkIHNpemUuCgoqKiogRVJST1JbNDA2Ml0gVGhlIHByZWNlZGluZyBlcnJvciBhY3R1YWxseSBvY2N1cnJlZCBpbiBmdW5jdGlvbiBMUEFELgoKKioqIEVSUk9SWzg4MjJdIFRoZSBzdGF0ZW1lbnQgd2FzIG5vdCBwcmVwYXJlZC4KCj4+c2VsZWN0IHN1YnN0cmluZyhfdWNzMidjaGFyYWN0ZXIgc2V0IHRlc3QnIGZyb20gMSBmb3IgMjE0NzQ4MzY0NykgZnJvbSAodmFsdWVzKDEpKSBhcyB4OwoKKEVYUFIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKY2hhcmFjdGVyIHNldCB0ZXN0ICAgICAgICAgICAgICAgICAgCgotLS0gMSByb3cocykgc2VsZWN0ZWQuCj4+Cj4+bG9nOwo=