IyEvdXNyL2Jpbi9lbnYgcGVybAoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFtSZV13cml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKIyAiW1JlXXdyaXR0ZW4iIHdhcyBhY2hpZXZlZCBpbiB0d28gbWFqb3Igb3ZlcmhhdWxzLiBJbiAyMDA0IEJPRFlfKgojIGZ1bmN0aW9ucyB3ZXJlIHJlLWltcGxlbWVudGVkIHRvIGFkZHJlc3MgUDQgcGVyZm9ybWFuY2UgaXNzdWUgW3NlZQojIGNvbW1lbnRhcnkgYmVsb3ddLCBhbmQgaW4gMjAwNiB0aGUgcmVzdCB3YXMgcmV3cml0dGVuIGluIG9yZGVyIHRvCiMgZ2FpbiBmcmVlZG9tIHRvIGxpYmVyYXRlIGxpY2Vuc2luZyB0ZXJtcy4KCiMgSmFudWFyeSwgU2VwdGVtYmVyIDIwMDQuCiMKIyBJdCB3YXMgbm90ZWQgdGhhdCBJbnRlbCBJQS0zMiBDIGNvbXBpbGVyIGdlbmVyYXRlcyBjb2RlIHdoaWNoCiMgcGVyZm9ybXMgfjMwJSAqZmFzdGVyKiBvbiBQNCBDUFUgdGhhbiBvcmlnaW5hbCAqaGFuZC1jb2RlZCoKIyBTSEExIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbi4gVG8gYWRkcmVzcyB0aGlzIHByb2JsZW0gKGFuZAojIHByb3ZlIHRoYXQgaHVtYW5zIGFyZSBzdGlsbCBiZXR0ZXIgdGhhbiBtYWNoaW5lczotKSwgdGhlCiMgb3JpZ2luYWwgY29kZSB3YXMgb3ZlcmhhdWxlZCwgd2hpY2ggcmVzdWx0ZWQgaW4gZm9sbG93aW5nCiMgcGVyZm9ybWFuY2UgY2hhbmdlczoKIwojCQljb21wYXJlZCB3aXRoIG9yaWdpbmFsCWNvbXBhcmVkIHdpdGggSW50ZWwgY2MKIwkJYXNzZW1ibGVyIGltcGwuCQlnZW5lcmF0ZWQgY29kZQojIFBlbnRpdW0JLTE2JQkJCSs0OCUKIyBQSUlJL0FNRAkrOCUJCQkrMTYlCiMgUDQJCSs4NSUoISkJCQkrNDUlCiMKIyBBcyB5b3UgY2FuIHNlZSBQZW50aXVtIGNhbWUgb3V0IGFzIGxvb3NlcjotKCBZZXQgSSByZWNrb25lZCB0aGF0CiMgaW1wcm92ZW1lbnQgb24gUDQgb3V0d2VpZ2h0cyB0aGUgbG9zcyBhbmQgaW5jb3Jwb3JhdGUgdGhpcwojIHJlLXR1bmVkIGNvZGUgdG8gMC45LjcgYW5kIGxhdGVyLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgoKIyBBdWd1c3QgMjAwOS4KIwojIEdlb3JnZSBTcGVsdmluIGhhcyB0aXBwZWQgdGhhdCBGXzQwXzU5KGIsYyxkKSBjYW4gYmUgcmV3cml0dGVuIGFzCiMgJyhjJmQpICsgKGImKGNeZCkpJywgd2hpY2ggYWxsb3dzIHRvIGFjY3VtdWxhdGUgcGFydGlhbCByZXN1bHRzCiMgYW5kIGxpZ2h0ZW4gInByZXNzdXJlIiBvbiBzY3JhdGNoIHJlZ2lzdGVycy4gVGhpcyByZXN1bHRlZCBpbgojID4xMiUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb24gY29udGVtcG9yYXJ5IEFNRCBjb3JlcyAod2l0aCBubwojIGRlZ3JhZGF0aW9uIG9uIG90aGVyIENQVXM6LSkuIEFsc28sIHRoZSBjb2RlIHdhcyByZXZpc2VkIHRvIG1heGltaXplCiMgImRpc3RhbmNlIiBiZXR3ZWVuIGluc3RydWN0aW9ucyBwcm9kdWNpbmcgaW5wdXQgdG8gJ2xlYScgaW5zdHJ1Y3Rpb24KIyBhbmQgdGhlICdsZWEnIGluc3RydWN0aW9uIGl0c2VsZiwgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBJbnRlbCBBdG9tCiMgY29yZSBhbmQgcmVzdWx0ZWQgaW4gfjE1JSBpbXByb3ZlbWVudC4KCiMgT2N0b2JlciAyMDEwLgojCiMgQWRkIFNTU0UzLCBTdXBwbGVtZW50YWxbIV0gU1NFMywgaW1wbGVtZW50YXRpb24uIFRoZSBpZGVhIGJlaGluZCBpdAojIGlzIHRvIG9mZmxvYWQgbWVzc2FnZSBzY2hlZHVsZSBkZW5vdGVkIGJ5IFd0IGluIE5JU1Qgc3BlY2lmaWNhdGlvbiwKIyBvciBYdXBkYXRlIGluIE9wZW5TU0wgc291cmNlLCB0byBTSU1EIHVuaXQuIFRoZSBpZGVhIGlzIG5vdCBub3ZlbCwKIyBhbmQgaW4gU1NFMiBjb250ZXh0IHdhcyBmaXJzdCBleHBsb3JlZCBieSBEZWFuIEdhdWRldCBpbiAyMDA0LCBzZWUKIyBodHRwOi8vYXJjdGljLm9yZy9+ZGVhbi9jcnlwdG8vc2hhMS5odG1sLiBTaW5jZSB0aGVuIHNldmVyYWwgdGhpbmdzCiMgaGF2ZSBjaGFuZ2VkIHRoYXQgbWFkZSBpdCBpbnRlcmVzdGluZyBhZ2FpbjoKIwojIGEpIFhNTSB1bml0cyBiZWNhbWUgZmFzdGVyIGFuZCB3aWRlcjsKIyBiKSBpbnN0cnVjdGlvbiBzZXQgYmVjYW1lIG1vcmUgdmVyc2F0aWxlOwojIGMpIGFuIGltcG9ydGFudCBvYnNlcnZhdGlvbiB3YXMgbWFkZSBieSBNYXggTG9ja3R5a2hpbiwgd2hpY2ggbWFkZQojICAgIGl0IHBvc3NpYmxlIHRvIHJlZHVjZSBhbW91bnQgb2YgaW5zdHJ1Y3Rpb25zIHJlcXVpcmVkIHRvIHBlcmZvcm0KIyAgICB0aGUgb3BlcmF0aW9uIGluIHF1ZXN0aW9uLCBmb3IgZnVydGhlciBkZXRhaWxzIHNlZQojICAgIGh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vZW4tdXMvYXJ0aWNsZXMvaW1wcm92aW5nLXRoZS1wZXJmb3JtYW5jZS1vZi10aGUtc2VjdXJlLWhhc2gtYWxnb3JpdGhtLTEvLgoKIyBBcHJpbCAyMDExLgojCiMgQWRkIEFWWCBjb2RlIHBhdGgsIHByb2JhYmx5IG1vc3QgY29udHJvdmVyc2lhbC4uLiBUaGUgdGhpbmcgaXMgdGhhdAojIHN3aXRjaCB0byBBVlggYWxvbmUgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYnkgYXMgbGl0dGxlIGFzIDQlIGluCiMgY29tcGFyaXNvbiB0byBTU1NFMyBjb2RlIHBhdGguIEJ1dCBiZWxvdyByZXN1bHQgZG9lc24ndCBsb29rIGxpa2UKIyA0JSBpbXByb3ZlbWVudC4uLiBUcm91YmxlIGlzIHRoYXQgU2FuZHkgQnJpZGdlIGRlY29kZXMgJ3JvW3JsXScgYXMKIyBwYWlyIG9mILUtb3BzLCBhbmQgaXQncyB0aGUgYWRkaXRpb25hbCC1LW9wcywgdHdvIHBlciByb3VuZCwgdGhhdAojIG1ha2UgaXQgcnVuIHNsb3dlciB0aGFuIENvcmUyIGFuZCBXZXN0bWVyZS4gQnV0ICdzaFtybF1kJyBpcyBkZWNvZGVkCiMgYXMgc2luZ2xlILUtb3AgYnkgU2FuZHkgQnJpZGdlIGFuZCBpdCdzIHJlcGxhY2luZyAncm9bcmxdJyB3aXRoCiMgZXF1aXZhbGVudCAnc2hbcmxdZCcgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGltcHJlc3NpdmUgNS4xCiMgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZS4gQnV0ICdzaFtybF1kJyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgdXNlZAojIHRvIGJlIGZhc3QsIG5vciBkb2VzIGl0IGFwcGVhciB0byBiZSBmYXN0IGluIHVwY29taW5nIEJ1bGxkb3plcgojIFthY2NvcmRpbmcgdG8gaXRzIG9wdGltaXphdGlvbiBtYW51YWxdLiBXaGljaCBpcyB3aHkgQVZYIGNvZGUgcGF0aAojIGlzIGd1YXJkZWQgYnkgKmJvdGgqIEFWWCBhbmQgc3ludGhldGljIGJpdCBkZW5vdGluZyBJbnRlbCBDUFVzLgojIE9uZSBjYW4gYXJndWUgdGhhdCBpdCdzIHVuZmFpciB0byBBTUQsIGJ1dCB3aXRob3V0ICdzaFtybF1kJyBpdAojIG1ha2VzIG5vIHNlbnNlIHRvIGtlZXAgdGhlIEFWWCBjb2RlIHBhdGguIElmIHNvbWVib2R5IGZlZWxzIHRoYXQKIyBzdHJvbmdseSwgaXQncyBwcm9iYWJseSBtb3JlIGFwcHJvcHJpYXRlIHRvIGRpc2N1c3MgcG9zc2liaWxpdHkgb2YKIyB1c2luZyB2ZWN0b3Igcm90YXRlIFhPUCBvbiBBTUQuLi4KCiMgTWFyY2ggMjAxNC4KIwojIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBTSEEgRXh0ZW5zaW9ucy4KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDdXJyZW50IHBlcmZvcm1hbmNlIGlzIHN1bW1hcml6ZWQgaW4gZm9sbG93aW5nIHRhYmxlLiBOdW1iZXJzIGFyZQojIENQVSBjbG9jayBjeWNsZXMgc3BlbnQgdG8gcHJvY2VzcyBzaW5nbGUgYnl0ZSAobGVzcyBpcyBiZXR0ZXIpLgojCiMJCXg4NgkJU1NTRTMJCUFWWAojIFBlbnRpdW0JMTUuNwkJLQojIFBJSUkJCTExLjUJCS0KIyBQNAkJMTAuNgkJLQojIEFNRCBLOAk3LjEJCS0KIyBDb3JlMgkJNy4zCQk2LjAvKzIyJQktCiMgQXRvbQkJMTIuNQkJOS4zKCopLyszNSUJLQojIFdlc3RtZXJlCTcuMwkJNS41LyszMyUJLQojIFNhbmR5IEJyaWRnZQk4LjgJCTYuMi8rNDAlCTUuMSgqKikvKzczJQojIEl2eSBCcmlkZ2UJNy4yCQk0LjgvKzUxJQk0LjcoKiopLys1MyUKIyBIYXN3ZWxsCTYuNQkJNC4zLys1MSUJNC4xKCoqKS8rNTglCiMgQnVsbGRvemVyCTExLjYJCTYuMC8rOTIlCiMgVklBIE5hbm8JMTAuNgkJNy41Lys0MSUKIwojICgqKQlMb29wIGlzIDEwNTYgaW5zdHJ1Y3Rpb25zIGxvbmcgYW5kIGV4cGVjdGVkIHJlc3VsdCBpcyB+OC4yNS4KIwlJdCByZW1haW5zIG15c3RlcnkgW3RvIG1lXSB3aHkgSUxQIGlzIGxpbWl0ZWQgdG8gMS43LgojCiMgKCoqKQlBcyBwZXIgYWJvdmUgY29tbWVudCwgdGhlIHJlc3VsdCBpcyBmb3IgQVZYICpwbHVzKiBzaFtybF1kLgoKJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKcHVzaChASU5DLCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7CnJlcXVpcmUgIng4NmFzbS5wbCI7CgomYXNtX2luaXQoJEFSR1ZbMF0sInNoYTEtNTg2LnBsIiwkQVJHVlskI0FSR1ZdIGVxICIzODYiKTsKCiR4bW09JHltbT0wOwpmb3IgKEBBUkdWKSB7ICR4bW09MSBpZiAoLy1ET1BFTlNTTF9JQTMyX1NTRTIvKTsgfQoKJHltbT0xIGlmICgkeG1tICYmCgkJYCRFTlZ7Q0N9IC1XYSwtdiAtYyAtbyAvZGV2L251bGwgLXggYXNzZW1ibGVyIC9kZXYvbnVsbCAyPiYxYAoJCQk9fiAvR05VIGFzc2VtYmxlciB2ZXJzaW9uIChbMi05XVwuWzAtOV0rKS8gJiYKCQkkMT49Mi4xOSk7CSMgZmlyc3QgdmVyc2lvbiBzdXBwb3J0aW5nIEFWWAoKJHltbT0xIGlmICgkeG1tICYmICEkeW1tICYmICRBUkdWWzBdIGVxICJ3aW4zMm4iICYmIAoJCWBuYXNtIC12IDI+JjFgID1+IC9OQVNNIHZlcnNpb24gKFsyLTldXC5bMC05XSspLyAmJgoJCSQxPj0yLjAzKTsJIyBmaXJzdCB2ZXJzaW9uIHN1cHBvcnRpbmcgQVZYCgokeW1tPTEgaWYgKCR4bW0gJiYgISR5bW0gJiYgJEFSR1ZbMF0gZXEgIndpbjMyIiAmJgoJCWBtbCAyPiYxYCA9fiAvVmVyc2lvbiAoWzAtOV0rKVwuLyAmJgoJCSQxPj0xMCk7CSMgZmlyc3QgdmVyc2lvbiBzdXBwb3J0aW5nIEFWWAoKJHltbT0xIGlmICgkeG1tICYmICEkeW1tICYmIGAkRU5We0NDfSAtdiAyPiYxYCA9fiAvKF5jbGFuZyB2ZXJzaW9ufGJhc2VkIG9uIExMVk0pIChbMy05XVwuWzAtOV0rKS8gJiYKCQkkMj49My4wKTsJIyBmaXJzdCB2ZXJzaW9uIHN1cHBvcnRpbmcgQVZYCgokc2hhZXh0PSR4bW07CSMjIyBzZXQgdG8gemVybyBpZiBjb21waWxpbmcgZm9yIDEuMC4xCgomZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9QIikgaWYgKCR4bW0pOwoKCiRBPSJlYXgiOwokQj0iZWJ4IjsKJEM9ImVjeCI7CiREPSJlZHgiOwokRT0iZWRpIjsKJFQ9ImVzaSI7CiR0bXAxPSJlYnAiOwoKQFY9KCRBLCRCLCRDLCRELCRFLCRUKTsKCiRhbHQ9MDsJIyAxIGRlbm90ZXMgYWx0ZXJuYXRpdmUgSUFMVSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggcGVyZm9ybXMKCSMgOCUgKndvcnNlKiBvbiBQNCwgc2FtZSBvbiBXZXN0bWVyZSBhbmQgQXRvbSwgMiUgYmV0dGVyIG9uCgkjIFNhbmR5IEJyaWRnZS4uLgoKc3ViIEJPRFlfMDBfMTUKCXsKCWxvY2FsKCRuLCRhLCRiLCRjLCRkLCRlLCRmKT1AXzsKCgkmY29tbWVudCgiMDBfMTUgJG4iKTsKCgkmbW92KCRmLCRjKTsJCQkjIGYgdG8gaG9sZCBGXzAwXzE5KGIsYyxkKQoJIGlmICgkbj09MCkgIHsgJm1vdigkdG1wMSwkYSk7IH0KCSBlbHNlICAgICAgICB7ICZtb3YoJGEsJHRtcDEpOyB9Cgkmcm90bCgkdG1wMSw1KTsJCQkjIHRtcDE9Uk9UQVRFKGEsNSkKCSAmeG9yKCRmLCRkKTsKCSZhZGQoJHRtcDEsJGUpOwkJCSMgdG1wMSs9ZTsKCSAmbW92KCRlLCZzd3RtcCgkbiUxNikpOwkjIGUgYmVjb21lcyB2b2xhdGlsZSBhbmQgaXMgbG9hZGVkCgkgCQkJCSMgd2l0aCB4aSwgYWxzbyBub3RlIHRoYXQgZSBiZWNvbWVzCgkJCQkJIyBmIGluIG5leHQgcm91bmQuLi4KCSZhbmQoJGYsJGIpOwoJJnJvdHIoJGIsMik7CQkJIyBiPVJPVEFURShiLDMwKQoJICZ4b3IoJGYsJGQpOwkJCSMgZiBob2xkcyBGXzAwXzE5KGIsYyxkKQoJJmxlYSgkdG1wMSwmRFdQKDB4NWE4Mjc5OTksJHRtcDEsJGUpKTsJIyB0bXAxKz1LXzAwXzE5K3hpCgoJaWYgKCRuPT0xNSkgeyAmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKTsjIHByZS1mZXRjaCBmIGZvciBuZXh0IHJvdW5kCgkJICAgICAgJmFkZCgkZiwkdG1wMSk7IH0JIyBmKz10bXAxCgllbHNlICAgICAgICB7ICZhZGQoJHRtcDEsJGYpOyB9CSMgZiBiZWNvbWVzIGEgaW4gbmV4dCByb3VuZAoJJm1vdigkdG1wMSwkYSkJCQlpZiAoJGFsdCAmJiAkbj09MTUpOwoJfQoKc3ViIEJPRFlfMTZfMTkKCXsKCWxvY2FsKCRuLCRhLCRiLCRjLCRkLCRlLCRmKT1AXzsKCgkmY29tbWVudCgiMTZfMTkgJG4iKTsKCmlmICgkYWx0KSB7CgkmeG9yKCRjLCRkKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rMiklMTYpKTsJIyBmIHRvIGhvbGQgWHVwZGF0ZSh4aSx4YSx4Yix4Yyx4ZCkKCSZhbmQoJHRtcDEsJGMpOwkJCSMgdG1wMSB0byBob2xkIEZfMDBfMTkoYixjLGQpLCBiJj1jXmQKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZ4b3IoJHRtcDEsJGQpOwkJCSMgdG1wMT1GXzAwXzE5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmYWRkKCRlLCR0bXAxKTsJCSMgZSs9Rl8wMF8xOShiLGMsZCkKCSZ4b3IoJGMsJGQpOwkJCSMgcmVzdG9yZSAkYwoJICZtb3YoJHRtcDEsJGEpOwkJIyBiIGluIG5leHQgcm91bmQKCSZyb3RyKCRiLCRuPT0xNj8yOjcpOwkJIyBiPVJPVEFURShiLDMwKQoJICZtb3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgoJJnJvdGwoJGEsNSk7CQkJIyBST1RBVEUoYSw1KQoJICZsZWEoJGYsJkRXUCgweDVhODI3OTk5LCRmLCRlKSk7IyBmKz1GXzAwXzE5KGIsYyxkKStlCgkmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKTsJIyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAoJICZhZGQoJGYsJGEpOwkJCSMgZis9Uk9UQVRFKGEsNSkKfSBlbHNlIHsKCSZtb3YoJHRtcDEsJGMpOwkJCSMgdG1wMSB0byBob2xkIEZfMDBfMTkoYixjLGQpCgkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCgkmeG9yKCR0bXAxLCRkKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZhbmQoJHRtcDEsJGIpOwoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmeG9yKCR0bXAxLCRkKTsJCSMgdG1wMT1GXzAwXzE5KGIsYyxkKQoJJmFkZCgkZSwkdG1wMSk7CQkJIyBlKz1GXzAwXzE5KGIsYyxkKQoJICZtb3YoJHRtcDEsJGEpOwoJJnJvdHIoJGIsMik7CQkJIyBiPVJPVEFURShiLDMwKQoJICZtb3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgoJJnJvdGwoJHRtcDEsNSk7CQkJIyBST1RBVEUoYSw1KQoJICZsZWEoJGYsJkRXUCgweDVhODI3OTk5LCRmLCRlKSk7IyBmKz1GXzAwXzE5KGIsYyxkKStlCgkmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKTsJIyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAoJICZhZGQoJGYsJHRtcDEpOwkJIyBmKz1ST1RBVEUoYSw1KQp9Cgl9CgpzdWIgQk9EWV8yMF8zOQoJewoJbG9jYWwoJG4sJGEsJGIsJGMsJGQsJGUsJGYpPUBfOwoJbG9jYWwgJEs9KCRuPDQwKT8weDZlZDllYmExOjB4Y2E2MmMxZDY7CgoJJmNvbW1lbnQoIjIwXzM5ICRuIik7CgppZiAoJGFsdCkgewoJJnhvcigkdG1wMSwkYyk7CQkJIyB0bXAxIHRvIGhvbGQgRl8yMF8zOShiLGMsZCksIGJePWMKCSAmeG9yKCRmLCZzd3RtcCgoJG4rMiklMTYpKTsJIyBmIHRvIGhvbGQgWHVwZGF0ZSh4aSx4YSx4Yix4Yyx4ZCkKCSZ4b3IoJHRtcDEsJGQpOwkJCSMgdG1wMSBob2xkcyBGXzIwXzM5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbis4KSUxNikpOwoJJmFkZCgkZSwkdG1wMSk7CQkJIyBlKz1GXzIwXzM5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmbW92KCR0bXAxLCRhKTsJCSMgYiBpbiBuZXh0IHJvdW5kCgkmcm90cigkYiw3KTsJCQkjIGI9Uk9UQVRFKGIsMzApCgkgJm1vdigmc3d0bXAoJG4lMTYpLCRmKQkJaWYoJG48NzcpOyMgeGk9ZgoJJnJvdGwoJGEsNSk7CQkJIyBST1RBVEUoYSw1KQoJICZ4b3IoJGIsJGMpCQkJaWYoJG49PTM5KTsjIHdhcm0gdXAgZm9yIEJPRFlfNDBfNTkKCSZhbmQoJHRtcDEsJGIpCQkJaWYoJG49PTM5KTsKCSAmbGVhKCRmLCZEV1AoJEssJGYsJGUpKTsJIyBmKz1lK0tfWFhfWVkKCSZtb3YoJGUsJnN3dG1wKCgkbisxKSUxNikpCWlmKCRuPDc5KTsjIHByZS1mZXRjaCBmIGZvciBuZXh0IHJvdW5kCgkgJmFkZCgkZiwkYSk7CQkJIyBmKz1ST1RBVEUoYSw1KQoJJnJvdHIoJGEsNSkJCQlpZiAoJG49PTc5KTsKfSBlbHNlIHsKCSZtb3YoJHRtcDEsJGIpOwkJCSMgdG1wMSB0byBob2xkIEZfMjBfMzkoYixjLGQpCgkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCgkmeG9yKCR0bXAxLCRjKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZ4b3IoJHRtcDEsJGQpOwkJCSMgdG1wMSBob2xkcyBGXzIwXzM5KGIsYyxkKQoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmYWRkKCRlLCR0bXAxKTsJCSMgZSs9Rl8yMF8zOShiLGMsZCkKCSZyb3RyKCRiLDIpOwkJCSMgYj1ST1RBVEUoYiwzMCkKCSAmbW92KCR0bXAxLCRhKTsKCSZyb3RsKCR0bXAxLDUpOwkJCSMgUk9UQVRFKGEsNSkKCSAmbW92KCZzd3RtcCgkbiUxNiksJGYpIGlmKCRuPDc3KTsjIHhpPWYKCSZsZWEoJGYsJkRXUCgkSywkZiwkZSkpOwkjIGYrPWUrS19YWF9ZWQoJICZtb3YoJGUsJnN3dG1wKCgkbisxKSUxNikpIGlmKCRuPDc5KTsjIHByZS1mZXRjaCBmIGZvciBuZXh0IHJvdW5kCgkmYWRkKCRmLCR0bXAxKTsJCQkjIGYrPVJPVEFURShhLDUpCn0KCX0KCnN1YiBCT0RZXzQwXzU5Cgl7Cglsb2NhbCgkbiwkYSwkYiwkYywkZCwkZSwkZik9QF87CgoJJmNvbW1lbnQoIjQwXzU5ICRuIik7CgppZiAoJGFsdCkgewoJJmFkZCgkZSwkdG1wMSk7CQkJIyBlKz1iJihjXmQpCgkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCgkmbW92KCR0bXAxLCRkKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZ4b3IoJGMsJGQpOwkJCSMgcmVzdG9yZSAkYwoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmYW5kKCR0bXAxLCRjKTsKCSZyb3RyKCRiLDcpOwkJCSMgYj1ST1RBVEUoYiwzMCkKCSAmYWRkKCRlLCR0bXAxKTsJCSMgZSs9YyZkCgkmbW92KCR0bXAxLCRhKTsJCQkjIGIgaW4gbmV4dCByb3VuZAoJICZtb3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgoJJnJvdGwoJGEsNSk7CQkJIyBST1RBVEUoYSw1KQoJICZ4b3IoJGIsJGMpCQkJaWYgKCRuPDU5KTsKCSZhbmQoJHRtcDEsJGIpCQkJaWYgKCRuPDU5KTsjIHRtcDEgdG8gaG9sZCBGXzQwXzU5KGIsYyxkKQoJICZsZWEoJGYsJkRXUCgweDhmMWJiY2RjLCRmLCRlKSk7IyBmKz1LXzQwXzU5K2UrKGImKGNeZCkpCgkmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKTsJIyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAoJICZhZGQoJGYsJGEpOwkJCSMgZis9Uk9UQVRFKGEsNSkKfSBlbHNlIHsKCSZtb3YoJHRtcDEsJGMpOwkJCSMgdG1wMSB0byBob2xkIEZfNDBfNTkoYixjLGQpCgkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCgkmeG9yKCR0bXAxLCRkKTsKCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKCSZhbmQoJHRtcDEsJGIpOwoJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCgkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKCSAmYWRkKCR0bXAxLCRlKTsJCSMgYiYoY15kKSs9ZQoJJnJvdHIoJGIsMik7CQkJIyBiPVJPVEFURShiLDMwKQoJICZtb3YoJGUsJGEpOwkJCSMgZSBiZWNvbWVzIHZvbGF0aWxlCgkmcm90bCgkZSw1KTsJCQkjIFJPVEFURShhLDUpCgkgJm1vdigmc3d0bXAoJG4lMTYpLCRmKTsJIyB4aT1mCgkmbGVhKCRmLCZEV1AoMHg4ZjFiYmNkYywkZiwkdG1wMSkpOyMgZis9S180MF81OStlKyhiJihjXmQpKQoJICZtb3YoJHRtcDEsJGMpOwoJJmFkZCgkZiwkZSk7CQkJIyBmKz1ST1RBVEUoYSw1KQoJICZhbmQoJHRtcDEsJGQpOwoJJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSk7CSMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKCSAmYWRkKCRmLCR0bXAxKTsJCSMgZis9YyZkCn0KCX0KCiZmdW5jdGlvbl9iZWdpbigic2hhMV9ibG9ja19kYXRhX29yZGVyIik7CmlmICgkeG1tKSB7CiAgJnN0YXRpY19sYWJlbCgic2hhZXh0X3Nob3J0Y3V0IikJaWYgKCRzaGFleHQpOwogICZzdGF0aWNfbGFiZWwoInNzc2UzX3Nob3J0Y3V0Iik7CiAgJnN0YXRpY19sYWJlbCgiYXZ4X3Nob3J0Y3V0IikJCWlmICgkeW1tKTsKICAmc3RhdGljX2xhYmVsKCJLX1hYX1hYIik7CgoJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwkjIG1ha2UgaXQgUElDIQogICZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCR0bXAxKTsKCSZwaWNtZXVwKCRULCJPUEVOU1NMX2lhMzJjYXBfUCIsJHRtcDEsJmxhYmVsKCJwaWNfcG9pbnQiKSk7CgkmbGVhCSgkdG1wMSwmRFdQKCZsYWJlbCgiS19YWF9YWCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0bXAxKSk7CgoJJm1vdgkoJEEsJkRXUCgwLCRUKSk7CgkmbW92CSgkRCwmRFdQKDQsJFQpKTsKCSZ0ZXN0CSgkRCwxPDw5KTsJCSMgY2hlY2sgU1NTRTMgYml0CgkmanoJKCZsYWJlbCgieDg2IikpOwoJJm1vdgkoJEMsJkRXUCg4LCRUKSk7CgkmdGVzdAkoJEEsMTw8MjQpOwkJIyBjaGVjayBGWFNSIGJpdAoJJmp6CSgmbGFiZWwoIng4NiIpKTsKCWlmICgkc2hhZXh0KSB7CgkJJnRlc3QJKCRDLDE8PDI5KTsJCSMgY2hlY2sgU0hBIGJpdAoJCSZqbnoJKCZsYWJlbCgic2hhZXh0X3Nob3J0Y3V0IikpOwoJfQoJaWYgKCR5bW0pIHsKCQkmYW5kCSgkRCwxPDwyOCk7CQkjIG1hc2sgQVZYIGJpdAoJCSZhbmQJKCRBLDE8PDMwKTsJCSMgbWFzayAiSW50ZWwgQ1BVIiBiaXQKCQkmb3IJKCRBLCREKTsKCQkmY21wCSgkQSwxPDwyOHwxPDwzMCk7CgkJJmplCSgmbGFiZWwoImF2eF9zaG9ydGN1dCIpKTsKCX0KCSZqbXAJKCZsYWJlbCgic3NzZTNfc2hvcnRjdXQiKSk7CiAgJnNldF9sYWJlbCgieDg2IiwxNik7Cn0KCSZtb3YoJHRtcDEsJndwYXJhbSgwKSk7CSMgU0hBX0NUWCAqYwoJJm1vdigkVCwmd3BhcmFtKDEpKTsJIyBjb25zdCB2b2lkICppbnB1dAoJJm1vdigkQSwmd3BhcmFtKDIpKTsJIyBzaXplX3QgbnVtCgkmc3RhY2tfcHVzaCgxNiszKTsJIyBhbGxvY2F0ZSBYWzE2XQoJJnNobCgkQSw2KTsKCSZhZGQoJEEsJFQpOwoJJm1vdigmd3BhcmFtKDIpLCRBKTsJIyBwb2ludGVyIGJleW9uZCB0aGUgZW5kIG9mIGlucHV0CgkmbW92KCRFLCZEV1AoMTYsJHRtcDEpKTsjIHByZS1sb2FkIEUKCSZqbXAoJmxhYmVsKCJsb29wIikpOwoKJnNldF9sYWJlbCgibG9vcCIsMTYpOwoKCSMgY29weSBpbnB1dCBjaHVuayB0byBYLCBidXQgcmV2ZXJzaW5nIGJ5dGUgb3JkZXIhCglmb3IgKCRpPTA7ICRpPDE2OyAkaSs9NCkKCQl7CgkJJm1vdigkQSwmRFdQKDQqKCRpKzApLCRUKSk7CgkJJm1vdigkQiwmRFdQKDQqKCRpKzEpLCRUKSk7CgkJJm1vdigkQywmRFdQKDQqKCRpKzIpLCRUKSk7CgkJJm1vdigkRCwmRFdQKDQqKCRpKzMpLCRUKSk7CgkJJmJzd2FwKCRBKTsKCQkmYnN3YXAoJEIpOwoJCSZic3dhcCgkQyk7CgkJJmJzd2FwKCREKTsKCQkmbW92KCZzd3RtcCgkaSswKSwkQSk7CgkJJm1vdigmc3d0bXAoJGkrMSksJEIpOwoJCSZtb3YoJnN3dG1wKCRpKzIpLCRDKTsKCQkmbW92KCZzd3RtcCgkaSszKSwkRCk7CgkJfQoJJm1vdigmd3BhcmFtKDEpLCRUKTsJIyByZWR1bmRhbnQgaW4gMXN0IHNwaW4KCgkmbW92KCRBLCZEV1AoMCwkdG1wMSkpOwkjIGxvYWQgU0hBX0NUWAoJJm1vdigkQiwmRFdQKDQsJHRtcDEpKTsKCSZtb3YoJEMsJkRXUCg4LCR0bXAxKSk7CgkmbW92KCRELCZEV1AoMTIsJHRtcDEpKTsKCSMgRSBpcyBwcmUtbG9hZGVkCgoJZm9yKCRpPTA7JGk8MTY7JGkrKykJeyAmQk9EWV8wMF8xNSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KCWZvcig7JGk8MjA7JGkrKykJeyAmQk9EWV8xNl8xOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KCWZvcig7JGk8NDA7JGkrKykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KCWZvcig7JGk8NjA7JGkrKykJeyAmQk9EWV80MF81OSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KCWZvcig7JGk8ODA7JGkrKykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KCgkoKCRWWzVdIGVxICREKSBhbmQgKCRWWzBdIGVxICRFKSkgb3IgZGllOwkjIGRvdWJsZS1jaGVjawoKCSZtb3YoJHRtcDEsJndwYXJhbSgwKSk7CSMgcmUtbG9hZCBTSEFfQ1RYKgoJJm1vdigkRCwmd3BhcmFtKDEpKTsJIyBEIGlzIGxhc3QgIlQiIGFuZCBpcyBkaXNjYXJkZWQKCgkmYWRkKCRFLCZEV1AoMCwkdG1wMSkpOwkjIEUgaXMgbGFzdCAiQSIuLi4KCSZhZGQoJFQsJkRXUCg0LCR0bXAxKSk7CgkmYWRkKCRBLCZEV1AoOCwkdG1wMSkpOwoJJmFkZCgkQiwmRFdQKDEyLCR0bXAxKSk7CgkmYWRkKCRDLCZEV1AoMTYsJHRtcDEpKTsKCgkmbW92KCZEV1AoMCwkdG1wMSksJEUpOwkjIHVwZGF0ZSBTSEFfQ1RYCgkgJmFkZCgkRCw2NCk7CQkjIGFkdmFuY2UgaW5wdXQgcG9pbnRlcgoJJm1vdigmRFdQKDQsJHRtcDEpLCRUKTsKCSAmY21wKCRELCZ3cGFyYW0oMikpOwkjIGhhdmUgd2UgcmVhY2hlZCB0aGUgZW5kIHlldD8KCSZtb3YoJkRXUCg4LCR0bXAxKSwkQSk7CgkgJm1vdigkRSwkQyk7CQkjIEMgaXMgbGFzdCAiRSIgd2hpY2ggbmVlZHMgdG8gYmUgInByZS1sb2FkZWQiCgkmbW92KCZEV1AoMTIsJHRtcDEpLCRCKTsKCSAmbW92KCRULCREKTsJCSMgaW5wdXQgcG9pbnRlcgoJJm1vdigmRFdQKDE2LCR0bXAxKSwkQyk7CgkmamIoJmxhYmVsKCJsb29wIikpOwoKCSZzdGFja19wb3AoMTYrMyk7CiZmdW5jdGlvbl9lbmQoInNoYTFfYmxvY2tfZGF0YV9vcmRlciIpOwoKaWYgKCR4bW0pIHsKaWYgKCRzaGFleHQpIHsKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEludGVsIFNIQSBFeHRlbnNpb25zIGltcGxlbWVudGF0aW9uIG9mIFNIQTEgdXBkYXRlIGZ1bmN0aW9uLgojCm15ICgkY3R4LCRpbnAsJG51bSk9KCJlZGkiLCJlc2kiLCJlY3giKTsKbXkgKCRBQkNELCRFLCRFXywkQlNXQVApPW1hcCgieG1tJF8iLCgwLi4zKSk7Cm15IEBNU0c9bWFwKCJ4bW0kXyIsKDQuLjcpKTsKCnN1YiBzaGExcm5kczQgewogbXkgKCRkc3QsJHNyYywkaW1tKT1AXzsKICAgIGlmICgiJGRzdDokc3JjIiA9fiAveG1tKFswLTddKTp4bW0oWzAtN10pLykKICAgIHsJJmRhdGFfYnl0ZSgweDBmLDB4M2EsMHhjYywweGMwfCgkMTw8Myl8JDIsJGltbSk7CX0KfQpzdWIgc2hhMW9wMzggewogbXkgKCRvcGNvZGVsZXQsJGRzdCwkc3JjKT1AXzsKICAgIGlmICgiJGRzdDokc3JjIiA9fiAveG1tKFswLTddKTp4bW0oWzAtN10pLykKICAgIHsJJmRhdGFfYnl0ZSgweDBmLDB4MzgsJG9wY29kZWxldCwweGMwfCgkMTw8Myl8JDIpOwl9Cn0Kc3ViIHNoYTFuZXh0ZQl7IHNoYTFvcDM4KDB4YzgsQF8pOyB9CnN1YiBzaGExbXNnMQl7IHNoYTFvcDM4KDB4YzksQF8pOyB9CnN1YiBzaGExbXNnMgl7IHNoYTFvcDM4KDB4Y2EsQF8pOyB9CgomZnVuY3Rpb25fYmVnaW4oIl9zaGExX2Jsb2NrX2RhdGFfb3JkZXJfc2hhZXh0Iik7CgkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CSMgbWFrZSBpdCBQSUMhCgkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKCSZibGluZHBvcCgkdG1wMSk7CgkmbGVhCSgkdG1wMSwmRFdQKCZsYWJlbCgiS19YWF9YWCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0bXAxKSk7CiZzZXRfbGFiZWwoInNoYWV4dF9zaG9ydGN1dCIpOwoJJm1vdgkoJGN0eCwmd3BhcmFtKDApKTsKCSZtb3YJKCJlYngiLCJlc3AiKTsKCSZtb3YJKCRpbnAsJndwYXJhbSgxKSk7CgkmbW92CSgkbnVtLCZ3cGFyYW0oMikpOwoJJnN1YgkoImVzcCIsMzIpOwoKCSZtb3ZkcXUJKCRBQkNELCZRV1AoMCwkY3R4KSk7CgkmbW92ZAkoJEUsJlFXUCgxNiwkY3R4KSk7CgkmYW5kCSgiZXNwIiwtMzIpOwoJJm1vdmRxYQkoJEJTV0FQLCZRV1AoMHg1MCwkdG1wMSkpOwkjIGJ5dGUtbi13b3JkIHN3YXAKCgkmbW92ZHF1CShATVNHWzBdLCZRV1AoMCwkaW5wKSk7CgkmcHNodWZkCSgkQUJDRCwkQUJDRCwwYjAwMDExMDExKTsJIyBmbGlwIHdvcmQgb3JkZXIKCSZtb3ZkcXUJKEBNU0dbMV0sJlFXUCgweDEwLCRpbnApKTsKCSZwc2h1ZmQJKCRFLCRFLDBiMDAwMTEwMTEpOwkJIyBmbGlwIHdvcmQgb3JkZXIKCSZtb3ZkcXUJKEBNU0dbMl0sJlFXUCgweDIwLCRpbnApKTsKCSZwc2h1ZmIJKEBNU0dbMF0sJEJTV0FQKTsKCSZtb3ZkcXUJKEBNU0dbM10sJlFXUCgweDMwLCRpbnApKTsKCSZwc2h1ZmIJKEBNU0dbMV0sJEJTV0FQKTsKCSZwc2h1ZmIJKEBNU0dbMl0sJEJTV0FQKTsKCSZwc2h1ZmIJKEBNU0dbM10sJEJTV0FQKTsKCSZqbXAJKCZsYWJlbCgibG9vcF9zaGFleHQiKSk7Cgomc2V0X2xhYmVsKCJsb29wX3NoYWV4dCIsMTYpOwoJJmRlYwkJKCRudW0pOwoJJmxlYQkJKCJlYXgiLCZEV1AoMHg0MCwkaW5wKSk7CgkmbW92ZHFhCQkoJlFXUCgwLCJlc3AiKSwkRSk7CSMgb2ZmbG9hZCAkRQoJJnBhZGRkCQkoJEUsQE1TR1swXSk7CgkmY21vdm5lCQkoJGlucCwiZWF4Iik7CgkmbW92ZHFhCQkoJlFXUCgxNiwiZXNwIiksJEFCQ0QpOwkjIG9mZmxvYWQgJEFCQ0QKCmZvcigkaT0wOyRpPDIwLTQ7JGkrPTIpIHsKCSZzaGExbXNnMQkoQE1TR1swXSxATVNHWzFdKTsKCSZtb3ZkcWEJCSgkRV8sJEFCQ0QpOwoJJnNoYTFybmRzNAkoJEFCQ0QsJEUsaW50KCRpLzUpKTsJIyAwLTMuLi4KCSZzaGExbmV4dGUJKCRFXyxATVNHWzFdKTsKCSZweG9yCQkoQE1TR1swXSxATVNHWzJdKTsKCSZzaGExbXNnMQkoQE1TR1sxXSxATVNHWzJdKTsKCSZzaGExbXNnMgkoQE1TR1swXSxATVNHWzNdKTsKCgkmbW92ZHFhCQkoJEUsJEFCQ0QpOwoJJnNoYTFybmRzNAkoJEFCQ0QsJEVfLGludCgoJGkrMSkvNSkpOwoJJnNoYTFuZXh0ZQkoJEUsQE1TR1syXSk7CgkmcHhvcgkJKEBNU0dbMV0sQE1TR1szXSk7Cgkmc2hhMW1zZzIJKEBNU0dbMV0sQE1TR1swXSk7CgoJcHVzaChATVNHLHNoaWZ0KEBNU0cpKTsJcHVzaChATVNHLHNoaWZ0KEBNU0cpKTsKfQoJJm1vdmRxdQkJKEBNU0dbMF0sJlFXUCgwLCRpbnApKTsKCSZtb3ZkcWEJCSgkRV8sJEFCQ0QpOwoJJnNoYTFybmRzNAkoJEFCQ0QsJEUsMyk7CQkjIDY0LTY3Cgkmc2hhMW5leHRlCSgkRV8sQE1TR1sxXSk7CgkmbW92ZHF1CQkoQE1TR1sxXSwmUVdQKDB4MTAsJGlucCkpOwoJJnBzaHVmYgkJKEBNU0dbMF0sJEJTV0FQKTsKCgkmbW92ZHFhCQkoJEUsJEFCQ0QpOwoJJnNoYTFybmRzNAkoJEFCQ0QsJEVfLDMpOwkJIyA2OC03MQoJJnNoYTFuZXh0ZQkoJEUsQE1TR1syXSk7CgkmbW92ZHF1CQkoQE1TR1syXSwmUVdQKDB4MjAsJGlucCkpOwoJJnBzaHVmYgkJKEBNU0dbMV0sJEJTV0FQKTsKCgkmbW92ZHFhCQkoJEVfLCRBQkNEKTsKCSZzaGExcm5kczQJKCRBQkNELCRFLDMpOwkJIyA3Mi03NQoJJnNoYTFuZXh0ZQkoJEVfLEBNU0dbM10pOwoJJm1vdmRxdQkJKEBNU0dbM10sJlFXUCgweDMwLCRpbnApKTsKCSZwc2h1ZmIJCShATVNHWzJdLCRCU1dBUCk7CgoJJm1vdmRxYQkJKCRFLCRBQkNEKTsKCSZzaGExcm5kczQJKCRBQkNELCRFXywzKTsJCSMgNzYtNzkKCSZtb3ZkcWEJCSgkRV8sJlFXUCgwLCJlc3AiKSk7CgkmcHNodWZiCQkoQE1TR1szXSwkQlNXQVApOwoJJnNoYTFuZXh0ZQkoJEUsJEVfKTsKCSZwYWRkZAkJKCRBQkNELCZRV1AoMTYsImVzcCIpKTsKCgkmam56CQkoJmxhYmVsKCJsb29wX3NoYWV4dCIpKTsKCgkmcHNodWZkCSgkQUJDRCwkQUJDRCwwYjAwMDExMDExKTsKCSZwc2h1ZmQJKCRFLCRFLDBiMDAwMTEwMTEpOwoJJm1vdmRxdQkoJlFXUCgwLCRjdHgpLCRBQkNEKQoJJm1vdmQJKCZEV1AoMTYsJGN0eCksJEUpOwoJJm1vdgkoImVzcCIsImVieCIpOwomZnVuY3Rpb25fZW5kKCJfc2hhMV9ibG9ja19kYXRhX29yZGVyX3NoYWV4dCIpOwp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBUaGUgU1NTRTMgaW1wbGVtZW50YXRpb24uCiMKIyAleG1tWzAtN10gYXJlIHVzZWQgYXMgcmluZyBAWFtdIGJ1ZmZlciBjb250YWluaW5nIHF1YWRydXBsZXMgb2YgbGFzdAojIDMyIGVsZW1lbnRzIG9mIHRoZSBtZXNzYWdlIHNjaGVkdWxlIG9yIFh1cGRhdGUgb3V0cHV0cy4gRmlyc3QgNAojIHF1YWRydXBsZXMgYXJlIHNpbXBseSBieXRlLXN3YXBwZWQgaW5wdXQsIG5leHQgNCBhcmUgY2FsY3VsYXRlZAojIGFjY29yZGluZyB0byBtZXRob2Qgb3JpZ2luYWxseSBzdWdnZXN0ZWQgYnkgRGVhbiBHYXVkZXQgKG1vZHVsbwojIGJlaW5nIGltcGxlbWVudGVkIGluIFNTU0UzKS4gT25jZSA4IHF1YWRydXBsZXMgb3IgMzIgZWxlbWVudHMgYXJlCiMgY29sbGVjdGVkLCBpdCBzd2l0Y2hlcyB0byByb3V0aW5lIHByb3Bvc2VkIGJ5IE1heCBMb2NrdHl1a2hpbi4KIwojIENhbGN1bGF0aW9ucyBpbmV2aXRhYmx5IHJlcXVpcmUgdGVtcG9yYXJ5IHJlcWlzdGVycywgYW5kIHRoZXJlIGFyZQojIG5vICV4bW0gcmVnaXN0ZXJzIGxlZnQgdG8gc3BhcmUuIEZvciB0aGlzIHJlYXNvbiBwYXJ0IG9mIHRoZSByaW5nCiMgYnVmZmVyLCBYWzIuLjRdIHRvIGJlIHNwZWNpZmljLCBpcyBvZmZsb2FkZWQgdG8gMyBxdWFkcmlwbGVzIHJpbmcKIyBidWZmZXIgb24gdGhlIHN0YWNrLiBLZWVwIGluIG1pbmQgdGhhdCBYWzJdIGlzIGFsaWFzIFhbLTZdLCBYWzNdIC0KIyBYWy01XSwgYW5kIFhbNF0gLSBYWy00XS4uLgojCiMgQW5vdGhlciBub3RhYmxlIG9wdGltaXphdGlvbiBpcyBhZ2dyZXNzaXZlIHN0YWNrIGZyYW1lIGNvbXByZXNzaW9uCiMgYWltaW5nIHRvIG1pbmltaXplIGFtb3VudCBvZiA5LWJ5dGUgaW5zdHJ1Y3Rpb25zLi4uCiMKIyBZZXQgYW5vdGhlciBub3RhYmxlIG9wdGltaXphdGlvbiBpcyAianVtcGluZyIgJEIgdmFyaWFibGUuIEl0IG1lYW5zCiMgdGhhdCB0aGVyZSBpcyBubyByZWdpc3RlciBwZXJtYW5lbnRseSBhbGxvY2F0ZWQgZm9yICRCIHZhbHVlLiBUaGlzCiMgYWxsb3dlZCB0byBlbGltaW5hdGUgb25lIGluc3RydWN0aW9uIGZyb20gYm9keV8yMF8zOS4uLgojCm15ICRYaT00OwkJCSMgNHhTSU1EIFh1cGRhdGUgcm91bmQsIHN0YXJ0IHByZS1zZWVkZWQKbXkgQFg9bWFwKCJ4bW0kXyIsKDQuLjcsMC4uMykpOwkjIHByZS1zZWVkZWQgZm9yICRYaT00Cm15IEBWPSgkQSwkQiwkQywkRCwkRSk7Cm15ICRqPTA7CQkJIyBoYXNoIHJvdW5kCm15ICRyeD0wOwpteSBAVD0oJFQsJHRtcDEpOwpteSAkaW5wOwoKbXkgJF9yb2w9c3ViIHsgJnJvbChAXykgfTsKbXkgJF9yb3I9c3ViIHsgJnJvcihAXykgfTsKCiZmdW5jdGlvbl9iZWdpbigiX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9zc3NlMyIpOwoJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwkjIG1ha2UgaXQgUElDIQoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoJHRtcDEpOwoJJmxlYQkoJHRtcDEsJkRXUCgmbGFiZWwoIktfWFhfWFgiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwkdG1wMSkpOwomc2V0X2xhYmVsKCJzc3NlM19zaG9ydGN1dCIpOwoKCSZtb3ZkcWEJKEBYWzNdLCZRV1AoMCwkdG1wMSkpOwkJIyBLXzAwXzE5CgkmbW92ZHFhCShAWFs0XSwmUVdQKDE2LCR0bXAxKSk7CQkjIEtfMjBfMzkKCSZtb3ZkcWEJKEBYWzVdLCZRV1AoMzIsJHRtcDEpKTsJCSMgS180MF81OQoJJm1vdmRxYQkoQFhbNl0sJlFXUCg0OCwkdG1wMSkpOwkJIyBLXzYwXzc5CgkmbW92ZHFhCShAWFsyXSwmUVdQKDY0LCR0bXAxKSk7CQkjIHBic3dhcCBtYXNrCgoJJm1vdgkoJEUsJndwYXJhbSgwKSk7CQkjIGxvYWQgYXJndW1lbnQgYmxvY2sKCSZtb3YJKCRpbnA9QFRbMV0sJndwYXJhbSgxKSk7CgkmbW92CSgkRCwmd3BhcmFtKDIpKTsKCSZtb3YJKEBUWzBdLCJlc3AiKTsKCgkjIHN0YWNrIGZyYW1lIGxheW91dAoJIwoJIyArMAlYWzBdK0sJWFsxXStLCVhbMl0rSwlYWzNdK0sJIyBYTU0tPklBTFUgeGZlciBhcmVhCgkjCVhbNF0rSwlYWzVdK0sJWFs2XStLCVhbN10rSwoJIwlYWzhdK0sJWFs5XStLCVhbMTBdK0sJWFsxMV0rSwoJIwlYWzEyXStLCVhbMTNdK0sJWFsxNF0rSwlYWzE1XStLCgkjCgkjICs2NAlYWzBdCVhbMV0JWFsyXQlYWzNdCSMgWE1NLT5YTU0gYmFja3RyYWNlIGFyZWEKCSMJWFs0XQlYWzVdCVhbNl0JWFs3XQoJIwlYWzhdCVhbOV0JWFsxMF0JWFsxMV0JIyBldmVuIGJvcnJvd2VkIGZvciBLXzAwXzE5CgkjCgkjICsxMTIJS18yMF8zOQlLXzIwXzM5CUtfMjBfMzkJS18yMF8zOQkjIGNvbnN0YW50cwoJIwlLXzQwXzU5CUtfNDBfNTkJS180MF81OQlLXzQwXzU5CgkjCUtfNjBfNzkJS182MF83OQlLXzYwXzc5CUtfNjBfNzkKCSMJS18wMF8xOQlLXzAwXzE5CUtfMDBfMTkJS18wMF8xOQoJIwlwYnN3YXAgbWFzawoJIwoJIyArMTkyCWN0eAkJCQkjIGFyZ3VtZW50IGJsb2NrCgkjICsxOTYJaW5wCgkjICsyMDAJZW5kCgkjICsyMDQJZXNwCgkmc3ViCSgiZXNwIiwyMDgpOwoJJmFuZAkoImVzcCIsLTY0KTsKCgkmbW92ZHFhCSgmUVdQKDExMiswLCJlc3AiKSxAWFs0XSk7CSMgY29weSBjb25zdGFudHMKCSZtb3ZkcWEJKCZRV1AoMTEyKzE2LCJlc3AiKSxAWFs1XSk7CgkmbW92ZHFhCSgmUVdQKDExMiszMiwiZXNwIiksQFhbNl0pOwoJJnNobAkoJEQsNik7CQkJCSMgbGVuKjY0CgkmbW92ZHFhCSgmUVdQKDExMis0OCwiZXNwIiksQFhbM10pOwoJJmFkZAkoJEQsJGlucCk7CQkJIyBlbmQgb2YgaW5wdXQKCSZtb3ZkcWEJKCZRV1AoMTEyKzY0LCJlc3AiKSxAWFsyXSk7CgkmYWRkCSgkaW5wLDY0KTsKCSZtb3YJKCZEV1AoMTkyKzAsImVzcCIpLCRFKTsJCSMgc2F2ZSBhcmd1bWVudCBibG9jawoJJm1vdgkoJkRXUCgxOTIrNCwiZXNwIiksJGlucCk7CgkmbW92CSgmRFdQKDE5Mis4LCJlc3AiKSwkRCk7CgkmbW92CSgmRFdQKDE5MisxMiwiZXNwIiksQFRbMF0pOwkjIHNhdmUgb3JpZ2luYWwgJWVzcAoKCSZtb3YJKCRBLCZEV1AoMCwkRSkpOwkJIyBsb2FkIGNvbnRleHQKCSZtb3YJKCRCLCZEV1AoNCwkRSkpOwoJJm1vdgkoJEMsJkRXUCg4LCRFKSk7CgkmbW92CSgkRCwmRFdQKDEyLCRFKSk7CgkmbW92CSgkRSwmRFdQKDE2LCRFKSk7CgkmbW92CShAVFswXSwkQik7CQkJIyBtYWdpYyBzZWVkCgoJJm1vdmRxdQkoQFhbLTQmN10sJlFXUCgtNjQsJGlucCkpOwkjIGxvYWQgaW5wdXQgdG8gJXhtbVswLTNdCgkmbW92ZHF1CShAWFstMyY3XSwmUVdQKC00OCwkaW5wKSk7CgkmbW92ZHF1CShAWFstMiY3XSwmUVdQKC0zMiwkaW5wKSk7CgkmbW92ZHF1CShAWFstMSY3XSwmUVdQKC0xNiwkaW5wKSk7CgkmcHNodWZiCShAWFstNCY3XSxAWFsyXSk7CQkjIGJ5dGUgc3dhcAoJJnBzaHVmYgkoQFhbLTMmN10sQFhbMl0pOwoJJnBzaHVmYgkoQFhbLTImN10sQFhbMl0pOwoJJm1vdmRxYQkoJlFXUCgxMTItMTYsImVzcCIpLEBYWzNdKTsJIyBib3Jyb3cgbGFzdCBiYWNrdHJhY2Ugc2xvdAoJJnBzaHVmYgkoQFhbLTEmN10sQFhbMl0pOwoJJnBhZGRkCShAWFstNCY3XSxAWFszXSk7CQkjIGFkZCBLXzAwXzE5CgkmcGFkZGQJKEBYWy0zJjddLEBYWzNdKTsKCSZwYWRkZAkoQFhbLTImN10sQFhbM10pOwoJJm1vdmRxYQkoJlFXUCgwLCJlc3AiKSxAWFstNCY3XSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCgkmcHN1YmQJKEBYWy00JjddLEBYWzNdKTsJCSMgcmVzdG9yZSBYW10KCSZtb3ZkcWEJKCZRV1AoMCsxNiwiZXNwIiksQFhbLTMmN10pOwoJJnBzdWJkCShAWFstMyY3XSxAWFszXSk7CgkmbW92ZHFhCSgmUVdQKDArMzIsImVzcCIpLEBYWy0yJjddKTsKCSZtb3YJKEBUWzFdLCRDKTsKCSZwc3ViZAkoQFhbLTImN10sQFhbM10pOwoJJnhvcgkoQFRbMV0sJEQpOwoJJnBzaHVmZAkoQFhbMF0sQFhbLTQmN10sMHhlZSk7CQkjIHdhcyAmbW92ZHFhCShAWFswXSxAWFstMyY3XSk7CgkmYW5kCShAVFswXSxAVFsxXSk7Cgkmam1wCSgmbGFiZWwoImxvb3AiKSk7CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU1NFIGluc3RydWN0aW9uIHNlcXVlbmNlIGlzIGZpcnN0IGJyb2tlbiB0byBncm91cHMgb2YgaW5kZXBlbnRlbnQKIyBpbnN0cnVjdGlvbnMsIGluZGVwZW5kZW50IGluIHJlc3BlY3QgdG8gdGhlaXIgaW5wdXRzIGFuZCBzaGlmdGVyCiMgKG5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBoYXZlIG1vcmUgdGhhbiBvbmUpLiBUaGVuIElBTFUgaW5zdHJ1Y3Rpb25zCiMgYXJlICJrbml0dGVkIGluIiBiZXR3ZWVuIHRoZSBTU0UgZ3JvdXBzLiBEaXN0YW5jZSBpcyBtYWludGFpbmVkIGZvcgojIFNTRSBsYXRlbmN5IG9mIDIgaW4gaG9wZSB0aGF0IGl0IGZpdHMgYmV0dGVyIHVwY29taW5nIEFNRCBCdWxsZG96ZXIKIyBbd2hpY2ggYWxsZWdlZGx5IGFsc28gaW1wbGVtZW50cyBTU1NFM10uLi4KIwojIFRlbXBvcmFyeSByZWdpc3RlcnMgdXNhZ2UuIFhbMl0gaXMgdm9sYXRpbGUgYXQgdGhlIGVudHJ5IGFuZCBhdCB0aGUKIyBlbmQgaXMgcmVzdG9yZWQgZnJvbSBiYWNrdHJhY2UgcmluZyBidWZmZXIuIFhbM10gaXMgZXhwZWN0ZWQgdG8KIyBjb250YWluIGN1cnJlbnQgS19YWF9YWCBjb25zdGFudCBhbmQgaXMgdXNlZCB0byBjYWNsdWxhdGUgWFstMV0rSwojIGZyb20gcHJldmlvdXMgcm91bmQsIGl0IGJlY29tZXMgdm9sYXRpbGUgdGhlIG1vbWVudCB0aGUgdmFsdWUgaXMKIyBzYXZlZCB0byBzdGFjayBmb3IgdHJhbnNmZXIgdG8gSUFMVS4gWFs0XSBiZWNvbWVzIHZvbGF0aWxlIHdoZW5ldmVyCiMgWFstNF0gaXMgYWNjdW11bGF0ZWQgYW5kIG9mZmxvYWRlZCB0byBiYWNrdHJhY2UgcmluZyBidWZmZXIsIGF0IHRoZQojIGVuZCBpdCBpcyBsb2FkZWQgd2l0aCBuZXh0IEtfWFhfWFggW3doaWNoIGJlY29tZXMgWFszXSBpbiBuZXh0CiMgcm91bmRdLi4uCiMKc3ViIFh1cGRhdGVfc3NzZTNfMTZfMzEoKQkJIyByZWNhbGwgdGhhdCAkWGkgc3RhcnRzIHd0aWggNAp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgNDAgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnB1bnBja2xxZHEoQFhbMF0sQFhbLTMmN10pOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0iLCB3YXMgJnBhbGlnbnIoQFhbMF0sQFhbLTQmN10sOCk7CgkmbW92ZHFhCShAWFsyXSxAWFstMSY3XSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSAgJnBhZGRkCShAWFszXSxAWFstMSY3XSk7CgkgICZtb3ZkcWEJKCZRV1AoNjQrMTYqKCgkWGktNCklMyksImVzcCIpLEBYWy00JjddKTsjIHNhdmUgWFtdIHRvIGJhY2t0cmFjZSBidWZmZXIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBzcmxkcQkoQFhbMl0sNCk7CQkjICJYWy0zXSIsIDMgZHdvcmRzCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnB4b3IJKEBYWzBdLEBYWy00JjddKTsJIyAiWFswXSJePSJYWy0xNl0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKCgkmcHhvcgkoQFhbMl0sQFhbLTImN10pOwkjICJYWy0zXSJeIlhbLThdIgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZweG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTNdIl4iWFstOF0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCSAgJm1vdmRxYQkoJlFXUCgwKzE2KigoJFhpLTEpJjMpLCJlc3AiKSxAWFszXSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZtb3ZkcWEJKEBYWzRdLEBYWzBdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkmbW92ZHFhIChAWFsyXSxAWFswXSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmcHNsbGRxCShAWFs0XSwxMik7CQkjICJYWzBdIjw8OTYsIGV4dHJhY3Qgb25lIGR3b3JkCgkmcGFkZGQJKEBYWzBdLEBYWzBdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnBzcmxkCShAWFsyXSwzMSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCSZtb3ZkcWEJKEBYWzNdLEBYWzRdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmcHNybGQJKEBYWzRdLDMwKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoJJnBvcgkoQFhbMF0sQFhbMl0pOwkJIyAiWFswXSI8PDw9MQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZtb3ZkcWEJKEBYWzJdLCZRV1AoNjQrMTYqKCgkWGktNiklMyksImVzcCIpKSBpZiAoJFhpPjUpOwkjIHJlc3RvcmUgWFtdIGZyb20gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmcHNsbGQJKEBYWzNdLDIpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCgkmcHhvciAgIChAWFswXSxAWFs0XSk7CgkgICZtb3ZkcWEJKEBYWzRdLCZRV1AoMTEyLTE2KzE2KigoJFhpKS81KSwiZXNwIikpOwkjIEtfWFhfWFgKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnB4b3IJKEBYWzBdLEBYWzNdKTsJCSMgIlhbMF0iXj0oIlhbMF0iPDw5Nik8PDwyCgkgICZwc2h1ZmQJKEBYWzFdLEBYWy0zJjddLDB4ZWUpCWlmICgkWGk8Nyk7CSMgd2FzICZtb3ZkcWEJKEBYWzFdLEBYWy0yJjddKQoJICAmcHNodWZkCShAWFszXSxAWFstMSY3XSwweGVlKQlpZiAoJFhpPT03KTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CSMgcmVtYWluaW5nIGluc3RydWN0aW9ucyBbaWYgYW55XQoKICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQp9CgpzdWIgWHVwZGF0ZV9zc3NlM18zMl83OSgpCnsgdXNlIGludGVnZXI7CiAgbXkgJGJvZHkgPSBzaGlmdDsKICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiB0byA0NCBpbnN0cnVjdGlvbnMKICBteSAoJGEsJGIsJGMsJGQsJGUpOwoKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CgkmcHhvcgkoQFhbMF0sQFhbLTQmN10pOwkjICJYWzBdIj0iWFstMzJdIl4iWFstMTZdIgoJJnB1bnBja2xxZHEoQFhbMl0sQFhbLTEmN10pOwkjIGNvbXBvc2UgIlhbLTZdIiwgd2FzICZwYWxpZ25yKEBYWzJdLEBYWy0yJjddLDgpCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAoKCSZweG9yCShAWFswXSxAWFstNyY3XSk7CSMgIlhbMF0iXj0iWFstMjhdIgoJICAmbW92ZHFhCSgmUVdQKDY0KzE2KigoJFhpLTQpJTMpLCJlc3AiKSxAWFstNCY3XSk7CSMgc2F2ZSBYW10gdG8gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpCQlpZiAoQGluc25zWzBdID1+IC9fcm9sLyk7CgkgaWYgKCRYaSU1KSB7CgkgICZtb3ZkcWEJKEBYWzRdLEBYWzNdKTsJIyAicGVycGV0dWF0ZSIgS19YWF9YWC4uLgoJIH0gZWxzZSB7CQkJIyAuLi4gb3IgbG9hZCBuZXh0IG9uZQoJICAmbW92ZHFhCShAWFs0XSwmUVdQKDExMi0xNisxNiooJFhpLzUpLCJlc3AiKSk7CgkgfQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoJICAmcGFkZGQJKEBYWzNdLEBYWy0xJjddKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZweG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTZdIgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCgoJJm1vdmRxYQkoQFhbMl0sQFhbMF0pOwoJICAmbW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpCQlpZiAoQGluc25zWzBdID1+IC9fcm9sLyk7CgoJJnBzbGxkCShAWFswXSwyKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZwc3JsZAkoQFhbMl0sMzApOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKQkJaWYgKEBpbnNuc1sxXSA9fiAvX3JvbC8pOwoJIGV2YWwoc2hpZnQoQGluc25zKSkJCWlmIChAaW5zbnNbMF0gPX4gL19yb2wvKTsKCgkmcG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIjw8PD0yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZtb3ZkcWEJKEBYWzJdLCZRV1AoNjQrMTYqKCgkWGktNiklMyksImVzcCIpKSBpZigkWGk8MTkpOwkjIHJlc3RvcmUgWFtdIGZyb20gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoJICAmcHNodWZkCShAWFszXSxAWFstMV0sMHhlZSkJaWYgKCRYaTwxOSk7CSMgd2FzICZtb3ZkcWEJKEBYWzNdLEBYWzBdKQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CSMgcmVtYWluaW5nIGluc3RydWN0aW9ucwoKICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQp9CgpzdWIgWHVwbGFzdF9zc3NlM184MCgpCnsgdXNlIGludGVnZXI7CiAgbXkgJGJvZHkgPSBzaGlmdDsKICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKICBteSAoJGEsJGIsJGMsJGQsJGUpOwoKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJICAmcGFkZGQJKEBYWzNdLEBYWy0xJjddKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSAgJm1vdmRxYQkoJlFXUCgwKzE2KigoJFhpLTEpJjMpLCJlc3AiKSxAWFszXSk7CSMgWFtdK0sgeGZlciBJQUxVCgoJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMKCgkmbW92CSgkaW5wPUBUWzFdLCZEV1AoMTkyKzQsImVzcCIpKTsKCSZjbXAJKCRpbnAsJkRXUCgxOTIrOCwiZXNwIikpOwoJJmplCSgmbGFiZWwoImRvbmUiKSk7CgoJJm1vdmRxYQkoQFhbM10sJlFXUCgxMTIrNDgsImVzcCIpKTsJIyBLXzAwXzE5CgkmbW92ZHFhCShAWFsyXSwmUVdQKDExMis2NCwiZXNwIikpOwkjIHBic3dhcCBtYXNrCgkmbW92ZHF1CShAWFstNCY3XSwmUVdQKDAsJGlucCkpOwkjIGxvYWQgaW5wdXQKCSZtb3ZkcXUJKEBYWy0zJjddLCZRV1AoMTYsJGlucCkpOwoJJm1vdmRxdQkoQFhbLTImN10sJlFXUCgzMiwkaW5wKSk7CgkmbW92ZHF1CShAWFstMSY3XSwmUVdQKDQ4LCRpbnApKTsKCSZhZGQJKCRpbnAsNjQpOwoJJnBzaHVmYgkoQFhbLTQmN10sQFhbMl0pOwkJIyBieXRlIHN3YXAKCSZtb3YJKCZEV1AoMTkyKzQsImVzcCIpLCRpbnApOwoJJm1vdmRxYQkoJlFXUCgxMTItMTYsImVzcCIpLEBYWzNdKTsJIyBib3Jyb3cgbGFzdCBiYWNrdHJhY2Ugc2xvdAoKICAkWGk9MDsKfQoKc3ViIFhsb29wX3Nzc2UzKCkKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcHNodWZiCShAWFsoJFhpLTMpJjddLEBYWzJdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBhZGRkCShAWFsoJFhpLTQpJjddLEBYWzNdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJm1vdmRxYQkoJlFXUCgwKzE2KiRYaSwiZXNwIiksQFhbKCRYaS00KSY3XSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZwc3ViZAkoQFhbKCRYaS00KSY3XSxAWFszXSk7CgoJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KICAkWGkrKzsKfQoKc3ViIFh0YWlsX3Nzc2UzKCkKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KfQoKc3ViIGJvZHlfMDBfMTkgKCkgewkjICgoY15kKSZiKV5kCgkjIG9uIHN0YXJ0IEBUWzBdPShjXmQpJmIKCXJldHVybiAmYm9keV8yMF8zOSgpCWlmICgkcng9PTE5KTsJJHJ4Kys7CgkoCgknKCRhLCRiLCRjLCRkLCRlKT1AVjsnLgoJJyYkX3JvcgkoJGIsJGo/NzoyKTsnLAkjICRiPj4+MgoJJyZ4b3IJKEBUWzBdLCRkKTsnLAoJJyZtb3YJKEBUWzFdLCRhKTsnLAkjICRiIGluIG5leHQgcm91bmQKCgknJmFkZAkoJGUsJkRXUCg0KigkaiYxNSksImVzcCIpKTsnLAkjIFhbXStLIHhmZXIKCScmeG9yCSgkYiwkYyk7JywJIyAkY14kZCBmb3IgbmV4dCByb3VuZAoKCScmJF9yb2wJKCRhLDUpOycsCgknJmFkZAkoJGUsQFRbMF0pOycsCgknJmFuZAkoQFRbMV0sJGIpOycsCSMgKCRiJigkY14kZCkpIGZvciBuZXh0IHJvdW5kCgoJJyZ4b3IJKCRiLCRjKTsnLAkjIHJlc3RvcmUgJGIKCScmYWRkCSgkZSwkYSk7JwkuJyRqKys7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHVuc2hpZnQoQFQscG9wKEBUKSk7JwoJKTsKfQoKc3ViIGJvZHlfMjBfMzkgKCkgewkjIGJeZF5jCgkjIG9uIGVudHJ5IEBUWzBdPWJeZAoJcmV0dXJuICZib2R5XzQwXzU5KCkJaWYgKCRyeD09MzkpOwkkcngrKzsKCSgKCScoJGEsJGIsJGMsJGQsJGUpPUBWOycuCgknJmFkZAkoJGUsJkRXUCg0KigkaiYxNSksImVzcCIpKTsnLAkjIFhbXStLIHhmZXIKCScmeG9yCShAVFswXSwkZCkJaWYoJGo9PTE5KTsnLgoJJyZ4b3IJKEBUWzBdLCRjKQlpZigkaj4gMTkpOycsCSMgKCRiXiRkXiRjKQoJJyZtb3YJKEBUWzFdLCRhKTsnLAkjICRiIGluIG5leHQgcm91bmQKCgknJiRfcm9sCSgkYSw1KTsnLAoJJyZhZGQJKCRlLEBUWzBdKTsnLAoJJyZ4b3IJKEBUWzFdLCRjKQlpZiAoJGo8IDc5KTsnLAkjICRiXiRkIGZvciBuZXh0IHJvdW5kCgoJJyYkX3JvcgkoJGIsNyk7JywJIyAkYj4+PjIKCScmYWRkCSgkZSwkYSk7JwkuJyRqKys7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHVuc2hpZnQoQFQscG9wKEBUKSk7JwoJKTsKfQoKc3ViIGJvZHlfNDBfNTkgKCkgewkjICgoYl5jKSYoY15kKSleYwoJIyBvbiBlbnRyeSBAVFswXT0oYl5jKSwgKGNePWQpCgkkcngrKzsKCSgKCScoJGEsJGIsJGMsJGQsJGUpPUBWOycuCgknJmFkZAkoJGUsJkRXUCg0KigkaiYxNSksImVzcCIpKTsnLAkjIFhbXStLIHhmZXIKCScmYW5kCShAVFswXSwkYykJaWYgKCRqPj00MCk7JywJIyAoYl5jKSYoY15kKQoJJyZ4b3IJKCRjLCRkKQkJaWYgKCRqPj00MCk7JywJIyByZXN0b3JlICRjCgoJJyYkX3JvcgkoJGIsNyk7JywJIyAkYj4+PjIKCScmbW92CShAVFsxXSwkYSk7JywJIyAkYiBmb3IgbmV4dCByb3VuZAoJJyZ4b3IJKEBUWzBdLCRjKTsnLAoKCScmJF9yb2wJKCRhLDUpOycsCgknJmFkZAkoJGUsQFRbMF0pOycsCgknJnhvcgkoQFRbMV0sJGMpCWlmICgkaj09NTkpOycuCgknJnhvcgkoQFRbMV0sJGIpCWlmICgkajwgNTkpOycsCSMgYl5jIGZvciBuZXh0IHJvdW5kCgoJJyZ4b3IJKCRiLCRjKQkJaWYgKCRqPCA1OSk7JywJIyBjXmQgZm9yIG5leHQgcm91bmQKCScmYWRkCSgkZSwkYSk7JwkuJyRqKys7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHVuc2hpZnQoQFQscG9wKEBUKSk7JwoJKTsKfQojIyMjIyMKc3ViIGJvZHl4XzAwXzE5ICgpIHsJIyAoKGNeZCkmYileZAoJIyBvbiBzdGFydCBAVFswXT0oYiZjKV4ofmImZCksICRlKz1YW10rSwoJcmV0dXJuICZib2R5eF8yMF8zOSgpCWlmICgkcng9PTE5KTsJJHJ4Kys7CgkoCgknKCRhLCRiLCRjLCRkLCRlKT1AVjsnLgoKCScmcm9yeAkoJGIsJGIsMikJCQlpZiAoJGo9PTApOycuCSMgJGI+Pj4yCgknJnJvcngJKCRiLEBUWzFdLDcpCQkJaWYgKCRqIT0wKTsnLAkjICRiPj4+MgoJJyZsZWEJKCRlLCZEV1AoMCwkZSxAVFswXSkpOycsCgknJnJvcngJKEBUWzBdLCRhLDUpOycsCgoJJyZhbmRuCShAVFsxXSwkYSwkYyk7JywKCScmYW5kCSgkYSwkYiknLAoJJyZhZGQJKCRkLCZEV1AoNCooKCRqKzEpJjE1KSwiZXNwIikpOycsCSMgWFtdK0sgeGZlcgoKCScmeG9yCShAVFsxXSwkYSknLAoJJyZhZGQJKCRlLEBUWzBdKTsnCS4nJGorKzsgdW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCgkpOwp9CgpzdWIgYm9keXhfMjBfMzkgKCkgewkjIGJeZF5jCgkjIG9uIHN0YXJ0ICRiPWJeY15kCglyZXR1cm4gJmJvZHl4XzQwXzU5KCkJaWYgKCRyeD09MzkpOwkkcngrKzsKCSgKCScoJGEsJGIsJGMsJGQsJGUpPUBWOycuCgoJJyZhZGQJKCRlLCgkaj09MTk/QFRbMF06JGIpKScsCgknJnJvcngJKCRiLEBUWzFdLDcpOycsCSMgJGI+Pj4yCgknJnJvcngJKEBUWzBdLCRhLDUpOycsCgoJJyZ4b3IJKCRhLCRiKQkJCQlpZiAoJGo8NzkpOycsCgknJmFkZAkoJGQsJkRXUCg0KigoJGorMSkmMTUpLCJlc3AiKSkJaWYgKCRqPDc5KTsnLAkjIFhbXStLIHhmZXIKCScmeG9yCSgkYSwkYykJCQkJaWYgKCRqPDc5KTsnLAoJJyZhZGQJKCRlLEBUWzBdKTsnCS4nJGorKzsgdW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCgkpOwp9CgpzdWIgYm9keXhfNDBfNTkgKCkgewkjICgoYl5jKSYoY15kKSleYwoJIyBvbiBzdGFydCAkYj0oKGJeYykmKGNeZCkpXmMKCXJldHVybiAmYm9keXhfMjBfMzkoKQlpZiAoJHJ4PT01OSk7CSRyeCsrOwoJKAoJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KCgknJnJvcngJKEBUWzBdLCRhLDUpJywKCScmbGVhCSgkZSwmRFdQKDAsJGUsJGIpKScsCgknJnJvcngJKCRiLEBUWzFdLDcpJywJIyAkYj4+PjIKCScmYWRkCSgkZCwmRFdQKDQqKCgkaisxKSYxNSksImVzcCIpKScsCSMgWFtdK0sgeGZlcgoKCScmbW92CShAVFsxXSwkYyknLAoJJyZ4b3IJKCRhLCRiKScsCSMgYl5jIGZvciBuZXh0IHJvdW5kCgknJnhvcgkoQFRbMV0sJGIpJywJIyBjXmQgZm9yIG5leHQgcm91bmQKCgknJmFuZAkoJGEsQFRbMV0pJywKCScmYWRkCSgkZSxAVFswXSknLAoJJyZ4b3IJKCRhLCRiKScJLickaisrOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB1bnNoaWZ0KEBULHBvcChAVCkpOycKCSk7Cn0KCiZzZXRfbGFiZWwoImxvb3AiLDE2KTsKCSZYdXBkYXRlX3Nzc2UzXzE2XzMxKFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOwoJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKCSZYdXBkYXRlX3Nzc2UzXzE2XzMxKFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMDBfMTkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CgkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOwoJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwbGFzdF9zc3NlM184MChcJmJvZHlfMjBfMzkpOwkjIGNhbiBqdW1wIHRvICJkb25lIgoKCQkJCSRzYXZlZF9qPSRqOyBAc2F2ZWRfVj1AVjsKCgkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsKCSZYbG9vcF9zc3NlMyhcJmJvZHlfMjBfMzkpOwoJJlhsb29wX3Nzc2UzKFwmYm9keV8yMF8zOSk7CgoJJm1vdgkoQFRbMV0sJkRXUCgxOTIsImVzcCIpKTsJIyB1cGRhdGUgY29udGV4dAoJJmFkZAkoJEEsJkRXUCgwLEBUWzFdKSk7CgkmYWRkCShAVFswXSwmRFdQKDQsQFRbMV0pKTsJCSMgJGIKCSZhZGQJKCRDLCZEV1AoOCxAVFsxXSkpOwoJJm1vdgkoJkRXUCgwLEBUWzFdKSwkQSk7CgkmYWRkCSgkRCwmRFdQKDEyLEBUWzFdKSk7CgkmbW92CSgmRFdQKDQsQFRbMV0pLEBUWzBdKTsKCSZhZGQJKCRFLCZEV1AoMTYsQFRbMV0pKTsKCSZtb3YJKCZEV1AoOCxAVFsxXSksJEMpOwoJJm1vdgkoJEIsJEMpOwoJJm1vdgkoJkRXUCgxMixAVFsxXSksJEQpOwoJJnhvcgkoJEIsJEQpOwoJJm1vdgkoJkRXUCgxNixAVFsxXSksJEUpOwoJJm1vdgkoQFRbMV0sQFRbMF0pOwoJJnBzaHVmZAkoQFhbMF0sQFhbLTQmN10sMHhlZSk7CQkjIHdhcyAmbW92ZHFhCShAWFswXSxAWFstMyY3XSk7CgkmYW5kCShAVFswXSwkQik7CgkmbW92CSgkQiwkVFsxXSk7CgoJJmptcAkoJmxhYmVsKCJsb29wIikpOwoKJnNldF9sYWJlbCgiZG9uZSIsMTYpOwkJJGo9JHNhdmVkX2o7IEBWPUBzYXZlZF9WOwoKCSZYdGFpbF9zc3NlMyhcJmJvZHlfMjBfMzkpOwoJJlh0YWlsX3Nzc2UzKFwmYm9keV8yMF8zOSk7CgkmWHRhaWxfc3NzZTMoXCZib2R5XzIwXzM5KTsKCgkmbW92CShAVFsxXSwmRFdQKDE5MiwiZXNwIikpOwkjIHVwZGF0ZSBjb250ZXh0CgkmYWRkCSgkQSwmRFdQKDAsQFRbMV0pKTsKCSZtb3YJKCJlc3AiLCZEV1AoMTkyKzEyLCJlc3AiKSk7CSMgcmVzdG9yZSAlZXNwCgkmYWRkCShAVFswXSwmRFdQKDQsQFRbMV0pKTsJCSMgJGIKCSZhZGQJKCRDLCZEV1AoOCxAVFsxXSkpOwoJJm1vdgkoJkRXUCgwLEBUWzFdKSwkQSk7CgkmYWRkCSgkRCwmRFdQKDEyLEBUWzFdKSk7CgkmbW92CSgmRFdQKDQsQFRbMV0pLEBUWzBdKTsKCSZhZGQJKCRFLCZEV1AoMTYsQFRbMV0pKTsKCSZtb3YJKCZEV1AoOCxAVFsxXSksJEMpOwoJJm1vdgkoJkRXUCgxMixAVFsxXSksJEQpOwoJJm1vdgkoJkRXUCgxNixAVFsxXSksJEUpOwoKJmZ1bmN0aW9uX2VuZCgiX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9zc3NlMyIpOwoKJHJ4PTA7CSMgcmVzZXQKCmlmICgkeW1tKSB7Cm15ICRYaT00OwkJCSMgNHhTSU1EIFh1cGRhdGUgcm91bmQsIHN0YXJ0IHByZS1zZWVkZWQKbXkgQFg9bWFwKCJ4bW0kXyIsKDQuLjcsMC4uMykpOwkjIHByZS1zZWVkZWQgZm9yICRYaT00Cm15IEBWPSgkQSwkQiwkQywkRCwkRSk7Cm15ICRqPTA7CQkJIyBoYXNoIHJvdW5kCm15IEBUPSgkVCwkdG1wMSk7Cm15ICRpbnA7CgpteSAkX3JvbD1zdWIgeyAmc2hsZChAX1swXSxAXykgfTsKbXkgJF9yb3I9c3ViIHsgJnNocmQoQF9bMF0sQF8pIH07CgomZnVuY3Rpb25fYmVnaW4oIl9zaGExX2Jsb2NrX2RhdGFfb3JkZXJfYXZ4Iik7CgkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CSMgbWFrZSBpdCBQSUMhCgkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKCSZibGluZHBvcCgkdG1wMSk7CgkmbGVhCSgkdG1wMSwmRFdQKCZsYWJlbCgiS19YWF9YWCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0bXAxKSk7CiZzZXRfbGFiZWwoImF2eF9zaG9ydGN1dCIpOwoJJnZ6ZXJvYWxsKCk7CgoJJnZtb3ZkcWEoQFhbM10sJlFXUCgwLCR0bXAxKSk7CQkjIEtfMDBfMTkKCSZ2bW92ZHFhKEBYWzRdLCZRV1AoMTYsJHRtcDEpKTsJCSMgS18yMF8zOQoJJnZtb3ZkcWEoQFhbNV0sJlFXUCgzMiwkdG1wMSkpOwkJIyBLXzQwXzU5Cgkmdm1vdmRxYShAWFs2XSwmUVdQKDQ4LCR0bXAxKSk7CQkjIEtfNjBfNzkKCSZ2bW92ZHFhKEBYWzJdLCZRV1AoNjQsJHRtcDEpKTsJCSMgcGJzd2FwIG1hc2sKCgkmbW92CSgkRSwmd3BhcmFtKDApKTsJCSMgbG9hZCBhcmd1bWVudCBibG9jawoJJm1vdgkoJGlucD1AVFsxXSwmd3BhcmFtKDEpKTsKCSZtb3YJKCRELCZ3cGFyYW0oMikpOwoJJm1vdgkoQFRbMF0sImVzcCIpOwoKCSMgc3RhY2sgZnJhbWUgbGF5b3V0CgkjCgkjICswCVhbMF0rSwlYWzFdK0sJWFsyXStLCVhbM10rSwkjIFhNTS0+SUFMVSB4ZmVyIGFyZWEKCSMJWFs0XStLCVhbNV0rSwlYWzZdK0sJWFs3XStLCgkjCVhbOF0rSwlYWzldK0sJWFsxMF0rSwlYWzExXStLCgkjCVhbMTJdK0sJWFsxM10rSwlYWzE0XStLCVhbMTVdK0sKCSMKCSMgKzY0CVhbMF0JWFsxXQlYWzJdCVhbM10JIyBYTU0tPlhNTSBiYWNrdHJhY2UgYXJlYQoJIwlYWzRdCVhbNV0JWFs2XQlYWzddCgkjCVhbOF0JWFs5XQlYWzEwXQlYWzExXQkjIGV2ZW4gYm9ycm93ZWQgZm9yIEtfMDBfMTkKCSMKCSMgKzExMglLXzIwXzM5CUtfMjBfMzkJS18yMF8zOQlLXzIwXzM5CSMgY29uc3RhbnRzCgkjCUtfNDBfNTkJS180MF81OQlLXzQwXzU5CUtfNDBfNTkKCSMJS182MF83OQlLXzYwXzc5CUtfNjBfNzkJS182MF83OQoJIwlLXzAwXzE5CUtfMDBfMTkJS18wMF8xOQlLXzAwXzE5CgkjCXBic3dhcCBtYXNrCgkjCgkjICsxOTIJY3R4CQkJCSMgYXJndW1lbnQgYmxvY2sKCSMgKzE5NglpbnAKCSMgKzIwMAllbmQKCSMgKzIwNAllc3AKCSZzdWIJKCJlc3AiLDIwOCk7CgkmYW5kCSgiZXNwIiwtNjQpOwoKCSZ2bW92ZHFhKCZRV1AoMTEyKzAsImVzcCIpLEBYWzRdKTsJIyBjb3B5IGNvbnN0YW50cwoJJnZtb3ZkcWEoJlFXUCgxMTIrMTYsImVzcCIpLEBYWzVdKTsKCSZ2bW92ZHFhKCZRV1AoMTEyKzMyLCJlc3AiKSxAWFs2XSk7Cgkmc2hsCSgkRCw2KTsJCQkJIyBsZW4qNjQKCSZ2bW92ZHFhKCZRV1AoMTEyKzQ4LCJlc3AiKSxAWFszXSk7CgkmYWRkCSgkRCwkaW5wKTsJCQkjIGVuZCBvZiBpbnB1dAoJJnZtb3ZkcWEoJlFXUCgxMTIrNjQsImVzcCIpLEBYWzJdKTsKCSZhZGQJKCRpbnAsNjQpOwoJJm1vdgkoJkRXUCgxOTIrMCwiZXNwIiksJEUpOwkJIyBzYXZlIGFyZ3VtZW50IGJsb2NrCgkmbW92CSgmRFdQKDE5Mis0LCJlc3AiKSwkaW5wKTsKCSZtb3YJKCZEV1AoMTkyKzgsImVzcCIpLCREKTsKCSZtb3YJKCZEV1AoMTkyKzEyLCJlc3AiKSxAVFswXSk7CSMgc2F2ZSBvcmlnaW5hbCAlZXNwCgoJJm1vdgkoJEEsJkRXUCgwLCRFKSk7CQkjIGxvYWQgY29udGV4dAoJJm1vdgkoJEIsJkRXUCg0LCRFKSk7CgkmbW92CSgkQywmRFdQKDgsJEUpKTsKCSZtb3YJKCRELCZEV1AoMTIsJEUpKTsKCSZtb3YJKCRFLCZEV1AoMTYsJEUpKTsKCSZtb3YJKEBUWzBdLCRCKTsJCQkjIG1hZ2ljIHNlZWQKCgkmdm1vdmRxdShAWFstNCY3XSwmUVdQKC02NCwkaW5wKSk7CSMgbG9hZCBpbnB1dCB0byAleG1tWzAtM10KCSZ2bW92ZHF1KEBYWy0zJjddLCZRV1AoLTQ4LCRpbnApKTsKCSZ2bW92ZHF1KEBYWy0yJjddLCZRV1AoLTMyLCRpbnApKTsKCSZ2bW92ZHF1KEBYWy0xJjddLCZRV1AoLTE2LCRpbnApKTsKCSZ2cHNodWZiKEBYWy00JjddLEBYWy00JjddLEBYWzJdKTsJIyBieXRlIHN3YXAKCSZ2cHNodWZiKEBYWy0zJjddLEBYWy0zJjddLEBYWzJdKTsKCSZ2cHNodWZiKEBYWy0yJjddLEBYWy0yJjddLEBYWzJdKTsKCSZ2bW92ZHFhKCZRV1AoMTEyLTE2LCJlc3AiKSxAWFszXSk7CSMgYm9ycm93IGxhc3QgYmFja3RyYWNlIHNsb3QKCSZ2cHNodWZiKEBYWy0xJjddLEBYWy0xJjddLEBYWzJdKTsKCSZ2cGFkZGQJKEBYWzBdLEBYWy00JjddLEBYWzNdKTsJCSMgYWRkIEtfMDBfMTkKCSZ2cGFkZGQJKEBYWzFdLEBYWy0zJjddLEBYWzNdKTsKCSZ2cGFkZGQJKEBYWzJdLEBYWy0yJjddLEBYWzNdKTsKCSZ2bW92ZHFhKCZRV1AoMCwiZXNwIiksQFhbMF0pOwkJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSZtb3YJKEBUWzFdLCRDKTsKCSZ2bW92ZHFhKCZRV1AoMCsxNiwiZXNwIiksQFhbMV0pOwoJJnhvcgkoQFRbMV0sJEQpOwoJJnZtb3ZkcWEoJlFXUCgwKzMyLCJlc3AiKSxAWFsyXSk7CgkmYW5kCShAVFswXSxAVFsxXSk7Cgkmam1wCSgmbGFiZWwoImxvb3AiKSk7CgpzdWIgWHVwZGF0ZV9hdnhfMTZfMzEoKQkJIyByZWNhbGwgdGhhdCAkWGkgc3RhcnRzIHd0aWggNAp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgNDAgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnZwYWxpZ25yKEBYWzBdLEBYWy0zJjddLEBYWy00JjddLDgpOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSAgJnZwYWRkZAkoQFhbM10sQFhbM10sQFhbLTEmN10pOwoJICAmdm1vdmRxYQkoJlFXUCg2NCsxNiooKCRYaS00KSUzKSwiZXNwIiksQFhbLTQmN10pOyMgc2F2ZSBYW10gdG8gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZ2cHNybGRxKEBYWzJdLEBYWy0xJjddLDQpOwkJIyAiWFstM10iLCAzIGR3b3JkcwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbLTQmN10pOwkJIyAiWFswXSJePSJYWy0xNl0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZ2cHhvcgkoQFhbMl0sQFhbMl0sQFhbLTImN10pOwkJIyAiWFstM10iXiJYWy04XSIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZ2bW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnZweG9yCShAWFswXSxAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTNdIl4iWFstOF0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnBzcmxkCShAWFsyXSxAWFswXSwzMSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnBzbGxkcShAWFs0XSxAWFswXSwxMik7CQkjICJYWzBdIjw8OTYsIGV4dHJhY3Qgb25lIGR3b3JkCgkmdnBhZGRkCShAWFswXSxAWFswXSxAWFswXSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnBzcmxkCShAWFszXSxAWFs0XSwzMCk7CgkmdnBvcgkoQFhbMF0sQFhbMF0sQFhbMl0pOwkJIyAiWFswXSI8PDw9MQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnZwc2xsZAkoQFhbNF0sQFhbNF0sMik7CgkgICZ2bW92ZHFhCShAWFsyXSwmUVdQKDY0KzE2KigoJFhpLTYpJTMpLCJlc3AiKSkgaWYgKCRYaT41KTsJIyByZXN0b3JlIFhbXSBmcm9tIGJhY2t0cmFjZSBidWZmZXIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWzNdKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbNF0pOwkJIyAiWFswXSJePSgiWFswXSI8PDk2KTw8PDIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZ2bW92ZHFhCShAWFs0XSwmUVdQKDExMi0xNisxNiooKCRYaSkvNSksImVzcCIpKTsJIyBLX1hYX1hYCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMgW2lmIGFueV0KCiAgJFhpKys7CXB1c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KfQoKc3ViIFh1cGRhdGVfYXZ4XzMyXzc5KCkKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIHRvIDQ0IGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJJnZwYWxpZ25yKEBYWzJdLEBYWy0xJjddLEBYWy0yJjddLDgpOwkjIGNvbXBvc2UgIlhbLTZdIgoJJnZweG9yCShAWFswXSxAWFswXSxAWFstNCY3XSk7CSMgIlhbMF0iPSJYWy0zMl0iXiJYWy0xNl0iCgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCgkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWy03JjddKTsJIyAiWFswXSJePSJYWy0yOF0iCgkgICZ2bW92ZHFhCSgmUVdQKDY0KzE2KigoJFhpLTQpJTMpLCJlc3AiKSxAWFstNCY3XSk7CSMgc2F2ZSBYW10gdG8gYmFja3RyYWNlIGJ1ZmZlcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBpZiAoJFhpJTUpIHsKCSAgJnZtb3ZkcWEJKEBYWzRdLEBYWzNdKTsJIyAicGVycGV0dWF0ZSIgS19YWF9YWC4uLgoJIH0gZWxzZSB7CQkJIyAuLi4gb3IgbG9hZCBuZXh0IG9uZQoJICAmdm1vdmRxYQkoQFhbNF0sJlFXUCgxMTItMTYrMTYqKCRYaS81KSwiZXNwIikpOwoJIH0KCSAgJnZwYWRkZAkoQFhbM10sQFhbM10sQFhbLTEmN10pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnZweG9yCShAWFswXSxAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTZdIgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCgoJJnZwc3JsZAkoQFhbMl0sQFhbMF0sMzApOwoJICAmdm1vdmRxYQkoJlFXUCgwKzE2KigoJFhpLTEpJjMpLCJlc3AiKSxAWFszXSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJJnZwc2xsZAkoQFhbMF0sQFhbMF0sMik7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCgkmdnBvcgkoQFhbMF0sQFhbMF0sQFhbMl0pOwkjICJYWzBdIjw8PD0yCgkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZ2bW92ZHFhCShAWFsyXSwmUVdQKDY0KzE2KigoJFhpLTYpJTMpLCJlc3AiKSkgaWYoJFhpPDE5KTsJIyByZXN0b3JlIFhbXSBmcm9tIGJhY2t0cmFjZSBidWZmZXIKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMKCiAgJFhpKys7CXB1c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KfQoKc3ViIFh1cGxhc3RfYXZ4XzgwKCkKeyB1c2UgaW50ZWdlcjsKICBteSAkYm9keSA9IHNoaWZ0OwogIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwogIG15ICgkYSwkYiwkYywkZCwkZSk7CgoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICZ2cGFkZGQJKEBYWzNdLEBYWzNdLEBYWy0xJjddKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoKCSAgJnZtb3ZkcWEJKCZRV1AoMCsxNiooKCRYaS0xKSYzKSwiZXNwIiksQFhbM10pOwkjIFhbXStLIHhmZXIgSUFMVQoKCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkJIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCgoJJm1vdgkoJGlucD1AVFsxXSwmRFdQKDE5Mis0LCJlc3AiKSk7CgkmY21wCSgkaW5wLCZEV1AoMTkyKzgsImVzcCIpKTsKCSZqZQkoJmxhYmVsKCJkb25lIikpOwoKCSZ2bW92ZHFhKEBYWzNdLCZRV1AoMTEyKzQ4LCJlc3AiKSk7CSMgS18wMF8xOQoJJnZtb3ZkcWEoQFhbMl0sJlFXUCgxMTIrNjQsImVzcCIpKTsJIyBwYnN3YXAgbWFzawoJJnZtb3ZkcXUoQFhbLTQmN10sJlFXUCgwLCRpbnApKTsJIyBsb2FkIGlucHV0Cgkmdm1vdmRxdShAWFstMyY3XSwmUVdQKDE2LCRpbnApKTsKCSZ2bW92ZHF1KEBYWy0yJjddLCZRV1AoMzIsJGlucCkpOwoJJnZtb3ZkcXUoQFhbLTEmN10sJlFXUCg0OCwkaW5wKSk7CgkmYWRkCSgkaW5wLDY0KTsKCSZ2cHNodWZiKEBYWy00JjddLEBYWy00JjddLEBYWzJdKTsJCSMgYnl0ZSBzd2FwCgkmbW92CSgmRFdQKDE5Mis0LCJlc3AiKSwkaW5wKTsKCSZ2bW92ZHFhKCZRV1AoMTEyLTE2LCJlc3AiKSxAWFszXSk7CSMgYm9ycm93IGxhc3QgYmFja3RyYWNlIHNsb3QKCiAgJFhpPTA7Cn0KCnN1YiBYbG9vcF9hdngoKQp7IHVzZSBpbnRlZ2VyOwogIG15ICRib2R5ID0gc2hpZnQ7CiAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCiAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKCgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnZwc2h1ZmIJKEBYWygkWGktMykmN10sQFhbKCRYaS0zKSY3XSxAWFsyXSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnZwYWRkZAkoQFhbJFhpJjddLEBYWygkWGktNCkmN10sQFhbM10pOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgZXZhbChzaGlmdChAaW5zbnMpKTsKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7Cgkmdm1vdmRxYQkoJlFXUCgwKzE2KiRYaSwiZXNwIiksQFhbJFhpJjddKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKCSBldmFsKHNoaWZ0KEBpbnNucykpOwoJIGV2YWwoc2hpZnQoQGluc25zKSk7CgoJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KICAkWGkrKzsKfQoKc3ViIFh0YWlsX2F2eCgpCnsgdXNlIGludGVnZXI7CiAgbXkgJGJvZHkgPSBzaGlmdDsKICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKICBteSAoJGEsJGIsJGMsJGQsJGUpOwoKCWZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9Cn0KCiZzZXRfbGFiZWwoImxvb3AiLDE2KTsKCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOwoJJlh1cGRhdGVfYXZ4XzE2XzMxKFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9hdnhfMTZfMzEoXCZib2R5XzAwXzE5KTsKCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV8wMF8xOSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV8yMF8zOSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzIwXzM5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV80MF81OSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOwoJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV80MF81OSk7CgkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzQwXzU5KTsKCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOwoJJlh1cGxhc3RfYXZ4XzgwKFwmYm9keV8yMF8zOSk7CSMgY2FuIGp1bXAgdG8gImRvbmUiCgoJCQkJJHNhdmVkX2o9JGo7IEBzYXZlZF9WPUBWOwoKCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKCgkmbW92CShAVFsxXSwmRFdQKDE5MiwiZXNwIikpOwkjIHVwZGF0ZSBjb250ZXh0CgkmYWRkCSgkQSwmRFdQKDAsQFRbMV0pKTsKCSZhZGQJKEBUWzBdLCZEV1AoNCxAVFsxXSkpOwkJIyAkYgoJJmFkZAkoJEMsJkRXUCg4LEBUWzFdKSk7CgkmbW92CSgmRFdQKDAsQFRbMV0pLCRBKTsKCSZhZGQJKCRELCZEV1AoMTIsQFRbMV0pKTsKCSZtb3YJKCZEV1AoNCxAVFsxXSksQFRbMF0pOwoJJmFkZAkoJEUsJkRXUCgxNixAVFsxXSkpOwoJJm1vdgkoJEIsJEMpOwoJJm1vdgkoJkRXUCg4LEBUWzFdKSwkQyk7CgkmeG9yCSgkQiwkRCk7CgkmbW92CSgmRFdQKDEyLEBUWzFdKSwkRCk7CgkmbW92CSgmRFdQKDE2LEBUWzFdKSwkRSk7CgkmbW92CShAVFsxXSxAVFswXSk7CgkmYW5kCShAVFswXSwkQik7CgkmbW92CSgkQixAVFsxXSk7CgoJJmptcAkoJmxhYmVsKCJsb29wIikpOwoKJnNldF9sYWJlbCgiZG9uZSIsMTYpOwkJJGo9JHNhdmVkX2o7IEBWPUBzYXZlZF9WOwoKCSZYdGFpbF9hdngoXCZib2R5XzIwXzM5KTsKCSZYdGFpbF9hdngoXCZib2R5XzIwXzM5KTsKCSZYdGFpbF9hdngoXCZib2R5XzIwXzM5KTsKCgkmdnplcm9hbGwoKTsKCgkmbW92CShAVFsxXSwmRFdQKDE5MiwiZXNwIikpOwkjIHVwZGF0ZSBjb250ZXh0CgkmYWRkCSgkQSwmRFdQKDAsQFRbMV0pKTsKCSZtb3YJKCJlc3AiLCZEV1AoMTkyKzEyLCJlc3AiKSk7CSMgcmVzdG9yZSAlZXNwCgkmYWRkCShAVFswXSwmRFdQKDQsQFRbMV0pKTsJCSMgJGIKCSZhZGQJKCRDLCZEV1AoOCxAVFsxXSkpOwoJJm1vdgkoJkRXUCgwLEBUWzFdKSwkQSk7CgkmYWRkCSgkRCwmRFdQKDEyLEBUWzFdKSk7CgkmbW92CSgmRFdQKDQsQFRbMV0pLEBUWzBdKTsKCSZhZGQJKCRFLCZEV1AoMTYsQFRbMV0pKTsKCSZtb3YJKCZEV1AoOCxAVFsxXSksJEMpOwoJJm1vdgkoJkRXUCgxMixAVFsxXSksJEQpOwoJJm1vdgkoJkRXUCgxNixAVFsxXSksJEUpOwomZnVuY3Rpb25fZW5kKCJfc2hhMV9ibG9ja19kYXRhX29yZGVyX2F2eCIpOwp9CiZzZXRfbGFiZWwoIktfWFhfWFgiLDY0KTsKJmRhdGFfd29yZCgweDVhODI3OTk5LDB4NWE4Mjc5OTksMHg1YTgyNzk5OSwweDVhODI3OTk5KTsJIyBLXzAwXzE5CiZkYXRhX3dvcmQoMHg2ZWQ5ZWJhMSwweDZlZDllYmExLDB4NmVkOWViYTEsMHg2ZWQ5ZWJhMSk7CSMgS18yMF8zOQomZGF0YV93b3JkKDB4OGYxYmJjZGMsMHg4ZjFiYmNkYywweDhmMWJiY2RjLDB4OGYxYmJjZGMpOwkjIEtfNDBfNTkKJmRhdGFfd29yZCgweGNhNjJjMWQ2LDB4Y2E2MmMxZDYsMHhjYTYyYzFkNiwweGNhNjJjMWQ2KTsJIyBLXzYwXzc5CiZkYXRhX3dvcmQoMHgwMDAxMDIwMywweDA0MDUwNjA3LDB4MDgwOTBhMGIsMHgwYzBkMGUwZik7CSMgcGJzd2FwIG1hc2sKJmRhdGFfYnl0ZSgweGYsMHhlLDB4ZCwweGMsMHhiLDB4YSwweDksMHg4LDB4NywweDYsMHg1LDB4NCwweDMsMHgyLDB4MSwweDApOwp9CiZhc2NpeigiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIHg4NiwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIpOwoKJmFzbV9maW5pc2goKTsK