Ci8qIHBuZ2djY3JkLmMgLSBtaXhlZCBDL2Fzc2VtYmxlciB2ZXJzaW9uIG9mIHV0aWxpdGllcyB0byByZWFkIGEgUE5HIGZpbGUKICoKICogRm9yIEludGVsL0FNRCB4ODYgb3IgeDg2LTY0IENQVSAoUGVudGl1bS1NTVggb3IgbGF0ZXIpIGFuZCBHTlUgQyBjb21waWxlci4KICoKICogTGFzdCBjaGFuZ2VkIGluIGxpYnBuZyAxLjIuMTkgQXVndXN0IDIxLCAyMDA3CiAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogKiBDb3B5cmlnaHQgKGMpIDE5OTggSW50ZWwgQ29ycG9yYXRpb24KICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIsMjAwNyBHcmVnIFJvZWxvZnMKICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAqCiAqIEJhc2VkIG9uIE1TVkMgY29kZSBjb250cmlidXRlZCBieSBOaXJhdiBDaGhhdHJhcGF0aSwgSW50ZWwgQ29ycC4sIDE5OTguCiAqIEludGVyZmFjZSB0byBsaWJwbmcgY29udHJpYnV0ZWQgYnkgR2lsbGVzIFZvbGxhbnQsIDE5OTkuCiAqIEdOVSBDIHBvcnQgYnkgR3JlZyBSb2Vsb2ZzLCAxOTk5LTIwMDEuCiAqCiAqIFJlZmVyZW5jZXM6CiAqCiAqICAgICBodHRwOi8vd3d3LmludGVsLmNvbS9kcmcvcGVudGl1bUlJL2FwcG5vdGVzLzkxNi85MTYuaHRtCiAqICAgICBodHRwOi8vd3d3LmludGVsLmNvbS9kcmcvcGVudGl1bUlJL2FwcG5vdGVzLzkyMy85MjMuaHRtCiAqICAgICAgIFtJbnRlbCdzIHBlcmZvcm1hbmNlIGFuYWx5c2lzIG9mIHRoZSBNTVggdnMuIG5vbi1NTVggY29kZTsKICogICAgICAgIG1vdmVkL2RlbGV0ZWQgYXMgb2YgMjAwNiwgYnV0IHRleHQgYW5kIHNvbWUgZ3JhcGhzIHN0aWxsCiAqICAgICAgICBhdmFpbGFibGUgdmlhIFdheUJhY2sgTWFjaGluZSBhdCBhcmNoaXZlLm9yZ10KICoKICogICAgIGh0dHA6Ly93d3cuaWJpYmxpby5vcmcvZ2ZlcmcvbGRwL0dDQy1JbmxpbmUtQXNzZW1ibHktSE9XVE8uaHRtbAogKiAgICAgaHR0cDovL3NhbS56b3kub3JnL2Jsb2cvMjAwNy0wNC0xMy1zaGxpYi13aXRoLW5vbi1waWMtY29kZS1oYXZlLWlubGluZS1hc3NlbWJseS1hbmQtcGljLW1peC13ZWxsCiAqICAgICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvRXh0ZW5kZWQtQXNtLmh0bWwKICogICAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9WYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwKICogICAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9GdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwKICogICAgIEFNRDY0IEFyY2hpdGVjdHVyZSBQcm9ncmFtbWVyJ3MgTWFudWFsLCB2b2x1bWVzIDEgYW5kIDUKICogICAgICAgW2h0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9Qcm9jZXNzb3JzL1RlY2huaWNhbFJlc291cmNlcy8wLCwzMF8xODJfNzM5XzcwNDQsMDAuaHRtbF0KICogICAgIEludGVsIDY0IGFuZCBJQS0zMiBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWxzCiAqICAgICAgIFtodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9wcm9kdWN0cy9wcm9jZXNzb3IvbWFudWFscy9dCiAqCiAqIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14XyooKSB3ZXJlIGNvbnZlcnRlZCBpbiBwbGFjZSB3aXRoIGludGVsMmdhcyAxLjMuMToKICoKICogICAgIGludGVsMmdhcyAtbWRJIHBuZ2djY3JkLmMucGFydGlhbGx5LW1zdmMgLW8gcG5nZ2NjcmQuYwogKgogKiBhbmQgdGhlbiBjbGVhbmVkIHVwIGJ5IGhhbmQuICBTZWUgaHR0cDovL2hlcm1lcy50ZXJtaW5hbC5hdC9pbnRlbDJnYXMvIC4KICoKICogTk9URTogIEEgc3VmZmljaWVudGx5IHJlY2VudCB2ZXJzaW9uIG9mIEdOVSBhcyAob3IgYXMuZXhlIHVuZGVyIERPUy9XaW5kb3dzKQogKiBpcyByZXF1aXJlZCB0byBhc3NlbWJsZSB0aGUgbmV3ZXIgYXNtIGluc3RydWN0aW9ucyBzdWNoIGFzIG1vdnEuICAoVmVyc2lvbgogKiAyLjUuMmwuMTUgaXMgZGVmaW5pdGVseSB0b28gb2xkLikgIFNlZSBmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L2JpbnV0aWxzLyAuCiAqLwoKLyoKICogUE9SVElORyBOT1RFUyBBTkQgQ0hBTkdFTE9HIChtb3N0bHkgYnkgR3JlZyBSb2Vsb2ZzKQogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KICoKICogMTk5OTEwMDY6CiAqICAtIGZpeGVkIHNpZ24gZXJyb3IgaW4gcG9zdC1NTVggY2xlYW51cCBjb2RlICgxNi0gJiAzMi1iaXQgY2FzZXMpCiAqCiAqIDE5OTkxMDA3OgogKiAgLSBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgKHBvc3NpYmxlIG9yIGRlZmluaXRlKToKICogICAgIHggW0RPTkVdIHdyaXRlIE1NWCBjb2RlIGZvciA2NC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gOCkgW25vdCB0ZXN0ZWRdCiAqICAgICAtIHdyaXRlIE1NWCBjb2RlIGZvciA0OC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gNikKICogICAgIC0gZmlndXJlIG91dCB3aGF0J3MgdXAgd2l0aCAyNC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gMyk6CiAqICAgICAgICB3aHkgc3VidHJhY3QgOCBmcm9tIHdpZHRoX21teCBpbiB0aGUgcGFzcyA0LzUgY2FzZT8KICogICAgICAgIChvbmx5IHdpZHRoX21teCBjYXNlKSAobmVhciBsaW5lIDIzMzUpCiAqICAgICB4IFtET05FXSByZXBsYWNlIHBpeGVsX2J5dGVzIHdpdGhpbiBlYWNoIGJsb2NrIHdpdGggdGhlIHRydWUKICogICAgICAgIGNvbnN0YW50IHZhbHVlIChvciBhcmUgY29tcGlsZXJzIHNtYXJ0IGVub3VnaCB0byBkbyB0aGF0PykKICogICAgIC0gcmV3cml0ZSBhbGwgTU1YIGludGVybGFjaW5nIGNvZGUgc28gaXQncyBhbGlnbmVkIHdpdGgKICogICAgICAgIHRoZSAqYmVnaW5uaW5nKiBvZiB0aGUgcm93IGJ1ZmZlciwgbm90IHRoZSBlbmQuICBUaGlzCiAqICAgICAgICB3b3VsZCBub3Qgb25seSBhbGxvdyBvbmUgdG8gZWxpbWluYXRlIGhhbGYgb2YgdGhlIG1lbW9yeQogKiAgICAgICAgd3JpdGVzIGZvciBvZGQgcGFzc2VzICh0aGF0IGlzLCBwYXNzID09IG9kZCksIGl0IG1heSBhbHNvCiAqICAgICAgICBlbGltaW5hdGUgc29tZSB1bmFsaWduZWQtZGF0YS1hY2Nlc3MgZXhjZXB0aW9ucyAoYXNzdW1pbmcKICogICAgICAgIHRoZXJlJ3MgYSBwZW5hbHR5IGZvciBub3QgYWxpZ25pbmcgNjQtYml0IGFjY2Vzc2VzIG9uCiAqICAgICAgICA2NC1iaXQgYm91bmRhcmllcykuICBUaGUgb25seSBjYXRjaCBpcyB0aGF0IHRoZSAibGVmdG92ZXIiCiAqICAgICAgICBwaXhlbChzKSBhdCB0aGUgZW5kIG9mIHRoZSByb3cgd291bGQgaGF2ZSB0byBiZSBzYXZlZCwKICogICAgICAgIGJ1dCB0aGVyZSBhcmUgZW5vdWdoIHVudXNlZCBNTVggcmVnaXN0ZXJzIGluIGV2ZXJ5IGNhc2UsCiAqICAgICAgICBzbyB0aGlzIGlzIG5vdCBhIHByb2JsZW0uICBBIGZ1cnRoZXIgYmVuZWZpdCBpcyB0aGF0IHRoZQogKiAgICAgICAgcG9zdC1NTVggY2xlYW51cCBjb2RlIChDIGNvZGUpIGluIGF0IGxlYXN0IHNvbWUgb2YgdGhlCiAqICAgICAgICBjYXNlcyBjb3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYXNzZW1ibGVyIGJsb2NrLgogKiAgeCBbRE9ORV0gdGhlICJ2MyB2MiB2MSB2MCB2NyB2NiB2NSB2NCIgY29tbWVudHMgYXJlIGNvbmZ1c2luZywKICogICAgIGluY29uc2lzdGVudCwgYW5kIGRvbid0IG1hdGNoIHRoZSBNTVggUHJvZ3JhbW1lcidzIFJlZmVyZW5jZQogKiAgICAgTWFudWFsIGNvbnZlbnRpb25zIGFueXdheS4gIFRoZXkgc2hvdWxkIGJlIGNoYW5nZWQgdG8KICogICAgICJiNyBiNiBiNSBiNCBiMyBiMiBiMSBiMCwiIHdoZXJlIGIwIGluZGljYXRlcyB0aGUgYnl0ZSB0aGF0CiAqICAgICB3YXMgbG93ZXN0IGluIG1lbW9yeSAoaS5lLiwgY29ycmVzcG9uZGluZyB0byBhIGxlZnQgcGl4ZWwpCiAqICAgICBhbmQgYjcgaXMgdGhlIGJ5dGUgdGhhdCB3YXMgaGlnaGVzdCAoaS5lLiwgYSByaWdodCBwaXhlbCkuCiAqCiAqIDE5OTkxMDE2OgogKiAgLSBCcmVubmFuJ3MgR3VpZGUgbm90d2l0aHN0YW5kaW5nLCBnY2MgdW5kZXIgTGludXggZG9lcyAqbm90KgogKiAgICAgd2FudCBnbG9iYWxzIHByZWZpeGVkIGJ5IHVuZGVyc2NvcmVzIHdoZW4gcmVmZXJlbmNpbmcgdGhlbS0tCiAqICAgICBpLmUuLCBpZiB0aGUgdmFyaWFibGUgaXMgY29uc3Q0LCB0aGVuIHJlZmVyIHRvIGl0IGFzIGNvbnN0NCwKICogICAgIG5vdCBfY29uc3Q0LiAgVGhpcyBzZWVtcyB0byBiZSBhIGRqZ3BwLXNwZWNpZmljIHJlcXVpcmVtZW50LgogKiAgICAgQWxzbywgc3VjaCB2YXJpYWJsZXMgYXBwYXJlbnRseSAqbXVzdCogYmUgZGVjbGFyZWQgb3V0c2lkZQogKiAgICAgb2YgZnVuY3Rpb25zOyBuZWl0aGVyIHN0YXRpYyBub3IgYXV0b21hdGljIHZhcmlhYmxlcyB3b3JrIGlmCiAqICAgICBkZWZpbmVkIHdpdGhpbiB0aGUgc2NvcGUgb2YgYSBzaW5nbGUgZnVuY3Rpb24sIGJ1dCBib3RoCiAqICAgICBzdGF0aWMgYW5kIHRydWx5IGdsb2JhbCAobXVsdGktbW9kdWxlKSB2YXJpYWJsZXMgd29yayBmaW5lLgogKgogKiAxOTk5MTAxNzoKICogIC0gcmVwbGFjZWQgcGl4ZWxfYnl0ZXMgaW4gZWFjaCBwbmdfbWVtY3B5KCkgY2FsbCB3aXRoIGNvbnN0YW50IHZhbHVlIGZvcgogKiAgICAgaW5saW5pbmcgKHBuZ19kb19yZWFkX2ludGVybGFjZSgpICJub24tTU1YL21vZGlmaWVkIEMgY29kZSIgYmxvY2spCiAqCiAqIDE5OTkxMDIzOgogKiAgLSBmaXhlZCBwbmdfY29tYmluZV9yb3coKSBub24tTU1YIHJlcGxpY2F0aW9uIGJ1ZyAob2RkIHBhc3NlcyBvbmx5PykKICogIC0gc3dpdGNoZWQgZnJvbSBzdHJpbmctY29uY2F0ZW5hdGlvbi13aXRoLW1hY3JvcyB0byBjbGVhbmVyIG1ldGhvZCBvZgogKiAgICAgcmVuYW1pbmcgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgZGpncHAtLWkuZS4sIGFsd2F5cyB1c2UgcHJlZml4ZXMgaW4KICogICAgIGlubGluZWQgYXNzZW1ibGVyIGNvZGUgKD09IHN0cmluZ3MpIGFuZCBjb25kaXRpb25hbGx5IHJlbmFtZSB0aGUKICogICAgIHZhcmlhYmxlcywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiAgSGVuY2UgX2NvbnN0NCwgX21hc2s4XzAsIGV0Yy4KICoKICogMTk5OTEwMjQ6CiAqICAtIGZpeGVkIG1teHN1cHBvcnQoKS9wbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSBmaXJzdC1yb3cgYnVnCiAqICAgICBUaGlzIG9uZSB3YXMgc2V2ZXJlbHkgd2VpcmQ6ICBldmVuIHRob3VnaCBtbXhzdXBwb3J0KCkgZG9lc24ndCB0b3VjaAogKiAgICAgZWJ4ICh3aGVyZSAicm93IiBwb2ludGVyIHdhcyBzdG9yZWQpLCBpdCBuZXZlcnRoZWxlc3MgbWFuYWdlZCB0byB6ZXJvCiAqICAgICB0aGUgcmVnaXN0ZXIgKGV2ZW4gaW4gc3RhdGljL25vbi1mUElDIGNvZGUtLXNlZSBiZWxvdyksIHdoaWNoIGluIHR1cm4KICogICAgIGNhdXNlZCBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSB0byByZXR1cm4gcHJlbWF0dXJlbHkgb24gdGhlIGZpcnN0IHJvdyBvZgogKiAgICAgaW50ZXJsYWNlZCBpbWFnZXMgKGkuZS4sIHdpdGhvdXQgZXhwYW5kaW5nIHRoZSBpbnRlcmxhY2VkIHBpeGVscykuCiAqICAgICBJbnNwZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibHkgY29kZSBkaWRuJ3QgdHVybiB1cCBhbnkgY2x1ZXMsCiAqICAgICBhbHRob3VnaCBpdCBkaWQgcG9pbnQgYXQgYSBtaW5vciBvcHRpbWl6YXRpb24gKGkuZS4sIGdldCByaWQgb2YKICogICAgIG1teF9zdXBwb3J0ZWRfbG9jYWwgdmFyaWFibGUgYW5kIGp1c3QgdXNlIGVheCkuICBQb3NzaWJseSB0aGUgQ1BVSUQKICogICAgIGluc3RydWN0aW9uIGlzIG1vcmUgZGVzdHJ1Y3RpdmUgdGhhbiBpdCBsb29rcz8gIChOb3QgeWV0IGNoZWNrZWQuKQogKiAgLSAiaW5mbyBnY2MiIHdhcyBuZXh0IHRvIHVzZWxlc3MsIHNvIGNvbXBhcmVkIGZQSUMgYW5kIG5vbi1mUElDIGFzc2VtYmx5CiAqICAgICBsaXN0aW5ncy4uLiAgQXBwYXJlbnRseSByZWdpc3RlciBzcGlsbGFnZSBoYXMgdG8gZG8gd2l0aCBlYngsIHNpbmNlCiAqICAgICBpdCdzIHVzZWQgdG8gaW5kZXggdGhlIGdsb2JhbCBvZmZzZXQgdGFibGUuICBDb21tZW50aW5nIGl0IG91dCBvZiB0aGUKICogICAgIGlucHV0LXJlZyBsaXN0cyBpbiBwbmdfY29tYmluZV9yb3coKSBlbGltaW5hdGVkIGNvbXBpbGVyIGJhcmZhZ2UsIHNvCiAqICAgICBpZmRlZidkIHdpdGggX19QSUNfXyBtYWNybzogIGlmIGRlZmluZWQsIHVzZSBhIGdsb2JhbCBmb3IgdW5tYXNrCiAqCiAqIDE5OTkxMTA3OgogKiAgLSB2ZXJpZmllZCBDUFVJRCBjbG9iYmVyYWdlOiAgMTItY2hhciBzdHJpbmcgY29uc3RhbnQgKCJHZW51aW5lSW50ZWwiLAogKiAgICAgIkF1dGhlbnRpY0FNRCIsIGV0Yy4pIHBsYWNlZCBpbiBlYng6ZWN4OmVkeC4gIFN0aWxsIG5lZWQgdG8gcG9saXNoLgogKgogKiAxOTk5MTEyMDoKICogIC0gbWFkZSAiZGlmZiIgdmFyaWFibGUgKG5vdyAiX2RpZiIpIGdsb2JhbCB0byBzaW1wbGlmeSBjb252ZXJzaW9uIG9mCiAqICAgICBmaWx0ZXJpbmcgcm91dGluZXMgKHJ1bm5pbmcgb3V0IG9mIHJlZ3MsIHNpZ2gpLiAgImRpZmYiIGlzIHN0aWxsIHVzZWQKICogICAgIGluIGludGVybGFjaW5nIHJvdXRpbmVzLCBob3dldmVyLgogKiAgLSBmaXhlZCB1cCBib3RoIHZlcnNpb25zIG9mIG1teHN1cHBvcnQoKSAoT1JJR19USEFUX1VTRURfVE9fQ0xPQkJFUl9FQlgKICogICAgIG1hY3JvIGRldGVybWluZXMgd2hpY2ggaXMgdXNlZCk7IG9yaWdpbmFsIG5vdCB5ZXQgdGVzdGVkLgogKgogKiAyMDAwMDIxMzoKICogIC0gd2hlbiBjb21waWxpbmcgd2l0aCBnY2MsIGJlIHN1cmUgdG8gdXNlICAtZm9taXQtZnJhbWUtcG9pbnRlcgogKgogKiAyMDAwMDMxOToKICogIC0gZml4ZWQgYSByZWdpc3Rlci1uYW1lIHR5cG8gaW4gcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCksIGRlZmF1bHQgKE1NWCkgY2FzZSwKICogICAgIHBhc3MgPT0gNCBvciA1LCB0aGF0IGNhdXNlZCB2aXNpYmxlIGNvcnJ1cHRpb24gb2YgaW50ZXJsYWNlZCBpbWFnZXMKICoKICogMjAwMDA2MjM6CiAqICAtIFZhcmlvdXMgcHJvYmxlbXMgd2VyZSByZXBvcnRlZCB3aXRoIGdjYyAyLjk1LjIgaW4gdGhlIEN5Z3dpbiBlbnZpcm9ubWVudCwKICogICAgIG1hbnkgb2YgdGhlIGZvcm0gImZvcmJpZGRlbiByZWdpc3RlciAwIChheCkgd2FzIHNwaWxsZWQgZm9yIGNsYXNzIEFSRUcuIgogKiAgICAgVGhpcyBpcyBleHBsYWluZWQgYXQgaHR0cDovL2djYy5nbnUub3JnL2ZvbV9zZXJ2L2NhY2hlLzIzLmh0bWwsIGFuZAogKiAgICAgQ2h1Y2sgV2lsc29uIHN1cHBsaWVkIGEgcGF0Y2ggaW52b2x2aW5nIGR1bW15IG91dHB1dCByZWdpc3RlcnMuICBTZWUKICogICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvYnVncy8/ZnVuYz1kZXRhaWxidWcmYnVnX2lkPTEwODc0MSZncm91cF9pZD01NjI0CiAqICAgICBmb3IgdGhlIG9yaWdpbmFsIChhbm9ueW1vdXMpIFNvdXJjZUZvcmdlIGJ1ZyByZXBvcnQuCiAqCiAqIDIwMDAwNzA2OgogKiAgLSBDaHVjayBXaWxzb24gcGFzc2VkIGFsb25nIHRoZXNlIHJlbWFpbmluZyBnY2MgMi45NS4yIGVycm9yczoKICogICAgICAgcG5nZ2NjcmQuYzogSW4gZnVuY3Rpb24gYHBuZ19jb21iaW5lX3Jvdyc6CiAqICAgICAgIHBuZ2djY3JkLmM6NTI1OiBtb3JlIHRoYW4gMTAgb3BlcmFuZHMgaW4gYGFzbScKICogICAgICAgcG5nZ2NjcmQuYzo2Njk6IG1vcmUgdGhhbiAxMCBvcGVyYW5kcyBpbiBgYXNtJwogKiAgICAgICBwbmdnY2NyZC5jOjgyODogbW9yZSB0aGFuIDEwIG9wZXJhbmRzIGluIGBhc20nCiAqICAgICAgIHBuZ2djY3JkLmM6OTk0OiBtb3JlIHRoYW4gMTAgb3BlcmFuZHMgaW4gYGFzbScKICogICAgICAgcG5nZ2NjcmQuYzoxMTc3OiBtb3JlIHRoYW4gMTAgb3BlcmFuZHMgaW4gYGFzbScKICogICAgIFRoZXkgYXJlIGFsbCB0aGUgc2FtZSBwcm9ibGVtIGFuZCBjYW4gYmUgd29ya2VkIGFyb3VuZCBieSB1c2luZyB0aGUKICogICAgIGdsb2JhbCBfdW5tYXNrIHZhcmlhYmxlIHVuY29uZGl0aW9uYWxseSwgbm90IGp1c3QgaW4gdGhlIC1mUElDIGNhc2UuCiAqICAgICBSZXBvcnRlZGx5IGVhcmxpZXIgdmVyc2lvbnMgb2YgZ2NjIGFsc28gaGF2ZSB0aGUgcHJvYmxlbSB3aXRoIG1vcmUgdGhhbgogKiAgICAgMTAgb3BlcmFuZHM7IHRoZXkganVzdCBkb24ndCByZXBvcnQgaXQuICBNdWNoIHN0cmFuZ2VuZXNzIGVuc3VlcywgZXRjLgogKgogKiAyMDAwMDcyOToKICogIC0gZW5hYmxlZCBwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cCgpIChzaG9ydGVzdCByZW1haW5pbmcgdW5jb252ZXJ0ZWQKICogICAgIE1NWCByb3V0aW5lKTsgYmVnYW4gY29udmVydGluZyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIoKQogKiAgLSB0byBmaW5pc2ggcmVtYWluaW5nIHNlY3Rpb25zOgogKiAgICAgLSBjbGVhbiB1cCBpbmRlbnRhdGlvbiBhbmQgY29tbWVudHMKICogICAgIC0gcHJlbG9hZCBsb2NhbCB2YXJpYWJsZXMKICogICAgIC0gYWRkIG91dHB1dCBhbmQgaW5wdXQgcmVncyAob3JkZXIgb2YgZm9ybWVyIGRldGVybWluZXMgbnVtZXJpY2FsCiAqICAgICAgICBtYXBwaW5nIG9mIGxhdHRlcikKICogICAgIC0gYXZvaWQgYWxsIHVzYWdlIG9mIGVieCAoaW5jbHVkaW5nIGJ4LCBiaCwgYmwpIHJlZ2lzdGVyIFsyMDAwMDgyM10KICogICAgIC0gcmVtb3ZlICIkIiBmcm9tIGFkZHJlc3Npbmcgb2YgU2hpZnQgYW5kIE1hc2sgdmFyaWFibGVzIFsyMDAwMDgyM10KICoKICogMjAwMDA3MzE6CiAqICAtIGdsb2JhbCB1bmlvbiB2YXJzIGNhdXNpbmcgc2VnZmF1bHRzIGluIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpPwogKgogKiAyMDAwMDgyMjoKICogIC0gQVJHSCwgc3R1cGlkIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpIHNlZ2ZhdWx0IG9ubHkgaGFwcGVucyB3aXRoCiAqICAgICBzaGFyZWQtbGlicmFyeSAoLWZQSUMpIHZlcnNpb24hICBDb2RlIHdvcmtzIGp1c3QgZmluZSBhcyBwYXJ0IG9mIHN0YXRpYwogKiAgICAgbGlicmFyeS4gIFNob3VsZCBoYXZlIHRlc3RlZCB0aGF0IHNvb25lci4KICogICAgIGVieCBpcyBnZXR0aW5nIGNsb2JiZXJlZCBhZ2FpbiAoZXhwbGljaXRseSB0aGlzIHRpbWUpOyBuZWVkIHRvIHNhdmUgaXQKICogICAgIG9uIHN0YWNrIG9yIHJld3JpdGUgYXNtIGNvZGUgdG8gYXZvaWQgdXNpbmcgaXQgYWx0b2dldGhlci4gIEJsYXJnaCEKICoKICogMjAwMDA4MjM6CiAqICAtIGZpcnN0IHNlY3Rpb24gd2FzIHRyaWNraWVzdDsgYWxsIHJlbWFpbmluZyBzZWN0aW9ucyBoYXZlIGVieCAtPiBlZHggbm93LgogKiAgICAgKC1mUElDIHdvcmtzIGFnYWluLikgIEFsc28gYWRkZWQgbWlzc2luZyB1bmRlcnNjb3JlcyB0byB2YXJpb3VzIFNoaWZ0KgogKiAgICAgYW5kICpNYXNrKiBnbG9iYWxzIGFuZCBnb3QgcmlkIG9mIGxlYWRpbmcgIiQiIHNpZ25zLgogKgogKiAyMDAwMDgyNjoKICogIC0gYWRkZWQgdmlzdWFsIHNlcGFyYXRvcnMgdG8gaGVscCBuYXZpZ2F0ZSBtaWNyb3Njb3BpYyBwcmludGVkIGNvcGllcwogKiAgICAgKGh0dHA6Ly9wb2JveC5jb20vfm5ld3QvY29kZS9ncHItbGF0ZXN0LnppcCwgbW9kZSAxMCk7IHN0YXJ0ZWQgd29ya2luZwogKiAgICAgb24gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKCkKICoKICogMjAwMDA4Mjg6CiAqICAtIGZpbmlzaGVkIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpOiAgb25seSBQYWV0aCBsZWZ0ISAoOTMwIGxpbmVzLi4uKQogKiAgICAgV2hhdCB0aGUgaGVsbCwgZGlkIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCksIHRvby4gIENvbW1lbnRzIG5vdAogKiAgICAgY2xlYW5lZCB1cC9zaG9ydGVuZWQgaW4gZWl0aGVyIHJvdXRpbmUsIGJ1dCBmdW5jdGlvbmFsaXR5IGlzIGNvbXBsZXRlCiAqICAgICBhbmQgc2VlbXMgdG8gYmUgd29ya2luZyBmaW5lLgogKgogKiAyMDAwMDgyOToKICogIC0gYWhoaCwgZmlndXJlZCBvdXQgbGFzdCg/KSBiaXQgb2YgZ2NjL2dhcyBhc20tZnU6ICBpZiByZWdpc3RlciBpcyBsaXN0ZWQKICogICAgIGFzIGFuIGlucHV0IHJlZyAod2l0aCBkdW1teSBvdXRwdXQgdmFyaWFibGVzLCBldGMuKSwgdGhlbiBpdCAqY2Fubm90KgogKiAgICAgYWxzbyBhcHBlYXIgaW4gdGhlIGNsb2JiZXIgbGlzdCBvciBnY2MgMi45NS4yIHdpbGwgYmFyZi4gIFRoZSBzb2x1dGlvbgogKiAgICAgaXMgc2ltcGxlIGVub3VnaC4uLgogKgogKiAyMDAwMDkxNDoKICogIC0gYnVnIGluIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpOiAgMTYtYml0IGdyYXlzY2FsZSBub3QgaGFuZGxlZAogKiAgICAgY29ycmVjdGx5IChidXQgNDgtYml0IFJHQiBqdXN0IGZpbmUpCiAqCiAqIDIwMDAwOTE2OgogKiAgLSBmaXhlZCBidWcgaW4gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKCksIGJwcCA9PSAyIGNhc2U7IHRocmVlIGVycm9yczoKICogICAgIC0gIl9TaGlmdEJwcC51c2UgPSAyNDsiICAgICAgc2hvdWxkIGhhdmUgYmVlbiAgICJfU2hpZnRCcHAudXNlID0gMTY7IgogKiAgICAgLSAiX1NoaWZ0UmVtLnVzZSA9IDQwOyIgICAgICBzaG91bGQgaGF2ZSBiZWVuICAgIl9TaGlmdFJlbS51c2UgPSA0ODsiCiAqICAgICAtICJwc2xscSBfU2hpZnRSZW0sICUlbW0yIiAgIHNob3VsZCBoYXZlIGJlZW4gICAicHNybHEgX1NoaWZ0UmVtLCAlJW1tMiIKICoKICogMjAwMTAxMDE6CiAqICAtIGFkZGVkIG5ldyBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBmdW5jdGlvbiAoaGVyZSBvbmx5IGJlY2F1c2UgaXQgbmVlZHMgdG8KICogICAgIGNhbGwgbW14c3VwcG9ydCgpLCB3aGljaCBzaG91bGQgcHJvYmFibHkgYmVjb21lIGdsb2JhbCBwbmdfbW14c3VwcG9ydCgpKTsKICogICAgIG1vZGlmaWVkIG90aGVyIE1NWCByb3V0aW5lcyB0byBydW4gY29uZGl0aW9uYWxseSAocG5nX3B0ci0+YXNtX2ZsYWdzKQogKgogKiAyMDAxMDEwMzoKICogIC0gcmVuYW1lZCBtbXhzdXBwb3J0KCkgdG8gcG5nX21teF9zdXBwb3J0KCksIHdpdGggYXV0by1zZXQgb2YgbW14X3N1cHBvcnRlZCwKICogICAgIGFuZCBtYWRlIGl0IHB1YmxpYzsgbW92ZWQgcG5nX2luaXRfbW14X2ZsYWdzKCkgdG8gcG5nLmMgYXMgaW50ZXJuYWwgZnVuYwogKgogKiAyMDAxMDEwNDoKICogIC0gcmVtb3ZlZCBkZXBlbmRlbmN5IG9uIHBuZ19yZWFkX2ZpbHRlcl9yb3dfYygpIChDIGNvZGUgYWxyZWFkeSBkdXBsaWNhdGVkCiAqICAgICB3aXRoaW4gTU1YIHZlcnNpb24gb2YgcG5nX3JlYWRfZmlsdGVyX3JvdygpKSBzbyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvCiAqICAgICBjb21waWxlIGl0IGludG8gcG5ncnV0aWwubwogKgogKiAyMDAxMDMxMDoKICogIC0gZml4ZWQgYnVmZmVyLW92ZXJydW4gYnVnIGluIHBuZ19jb21iaW5lX3JvdygpIEMgY29kZSAobm9uLU1NWCkKICoKICogMjAwMTA4MDg6CiAqICAtIGFkZGVkIFBOR19USFJFQURfVU5TQUZFX09LIGFyb3VuZCBjb2RlIHVzaW5nIGdsb2JhbCB2YXJpYWJsZXMgW0dSLVBdCiAqCiAqIDIwMDExMTI0OgogKiAgLSBmaXhlZCBtaXNzaW5nIHNhdmUgb2YgRWZsYWcgaW4gcG5nX21teF9zdXBwb3J0KCkgW01heGltIFNvYm9sZXZdCiAqCiAqIDIwMDIwMzA0OgogKiAgLSBlbGltaW5hdGVkIGluY29ycmVjdCB1c2Ugb2Ygd2lkdGhfbW14IGluIHBpeGVsX2J5dGVzID09IDggY2FzZQogKgogKiAyMDAyMDQwNzoKICogIC0gZml4ZWQgaW5zdWZmaWNpZW50IHByZXNlcnZhdGlvbiBvZiBlYnggcmVnaXN0ZXIgW1NhbWkgRmFyaW5dCiAqCiAqIDIwMDQwNzI0OgogKiAgLSBtb3JlIHRpbmtlcmluZyB3aXRoIGNsb2JiZXIgbGlzdCBhdCBsaW5lcyA0NTI5IGFuZCA1MDMzIHRvIGdldCBpdCB0bwogKiAgICAgY29tcGlsZSB3aXRoIGdjYyAzLjQgW0dSLVBdCiAqCiAqIDIwMDQwODA5OgogKiAgLSBhZGRlZCAicmltIiBkZWZpbml0aW9ucyBmb3IgQ09OU1Q0IGFuZCBDT05TVDYgW0dSLVBdCiAqCiAqIDIwMDYwMzAzOgogKiAgLSBhZGRlZCAiT1MyIiB0byBsaXN0IG9mIHN5c3RlbXMgdGhhdCBkb24ndCBuZWVkIGxlYWRpbmcgdW5kZXJzY29yZXMgW0dSLVBdCiAqCiAqIDIwMDYwMzIwOgogKiAgLSBtYWRlIFBJQy1jb21wbGlhbnQgW0NocmlzdGlhbiBBaWNoaW5nZXJdCiAqCiAqIDIwMDcwMzEzOgogKiAgLSBmaW5hbGx5IGFwcGxpZWQgR2l1c2VwcGUgR2hpYvIncyA2NC1iaXQgcGF0Y2ggb2YgMjAwNjA4MDMgKGNvbXBsZXRlbHkKICogICAgIG92ZXJsb29rZWQgRHlsYW4gQWxleCBTaW1vbidzIHNpbWlsYXIgcGF0Y2ggb2YgMjAwNjA0MTQsIG9vcHMuLi4pCiAqCiAqIDIwMDcwNTI0OgogKiAgLSBmaXhlZCBsaW5rIGZhaWx1cmUgY2F1c2VkIGJ5IGFzbS1vbmx5IHZhcmlhYmxlcyBiZWluZyBvcHRpbWl6ZWQgb3V0CiAqICAgICAoaWRlbnRpZmllZCBieSBEaW1pdHJpIG9mIFRyb2xsdGVjaCkgd2l0aCBfX2F0dHJpYnV0ZV9fKCh1c2VkKSksIHdoaWNoCiAqICAgICBhbHNvIGdldHMgcmlkIG9mIHdhcm5pbmdzID0+IG51a2VkIHVnbHkgcG5nX3NxdWVsY2hfd2FybmluZ3MoKSBoYWNrCiAqICAtIGRyb3BwZWQgcmVkdW5kYW50IGlmZGVmCiAqICAtIG1vdmVkIHBuZ19tbXhfc3VwcG9ydCgpIGJhY2sgdXAgd2hlcmUgb3JpZ2luYWxseSBpbnRlbmRlZCAoYXMgaW4KICogICAgIHBuZ3ZjcmQuYyksIHVzaW5nIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgaW4gZXh0cmEgcHJvdG90eXBlCiAqCiAqIDIwMDcwNTI3OgogKiAgLSByZXZpc2VkIHBuZ19jb21iaW5lX3JvdygpIHRvIHJldXNlIG1hc2sgaW4gbGlldSBvZiBleHRlcm5hbCBfdW5tYXNrCiAqICAtIG1vdmVkIDMyLWJpdCAoUkdCQSkgY2FzZSB0byB0b3Agb2YgcG5nX2NvbWJpbmVfcm93KCk6ICBtb3N0IGNvbW1vbgogKiAgLSBqdXN0IGFib3V0IHJlYWR5IHRvIGdpdmUgdXAgb24geDg2LTY0IC1mUElDIG1vZGU7IGNhbid0IGV2ZW4gYWNjZXNzIDE2CiAqICAgICBfbWFzaypfKiBjb25zdGFudHMgd2l0aG91dCB0cmlnZ2VyaW5nIGxpbmsgZXJyb3Igb24gc2hhcmVkIGxpYnJhcnk6CiAqICAgICAgIC91c3IvYmluL2xkOiBwbmdnY2NyZC5waWMubzogcmVsb2NhdGlvbiBSX1g4Nl82NF8zMlMgYWdhaW5zdCBgYSBsb2NhbAogKiAgICAgICAgIHN5bWJvbCcgY2FuIG5vdCBiZSB1c2VkIHdoZW4gbWFraW5nIGEgc2hhcmVkIG9iamVjdDsgcmVjb21waWxlIHdpdGgKICogICAgICAgICAtZlBJQwogKiAgICAgICBwbmdnY2NyZC5waWMubzogY291bGQgbm90IHJlYWQgc3ltYm9sczogQmFkIHZhbHVlCiAqICAgICAgICgib2JqZHVtcCAteCBwbmdnY2NyZC5waWMubyB8IGdyZXAgcm9kYXRhIiB0byB2ZXJpZnkpCiAqICAgICBbbWlnaHQgYmUgYWJsZSB0byB3b3JrIGFyb3VuZCBieSBkb2luZyB3aXRoaW4gYXNzZW1ibHkgY29kZSB3aGF0ZXZlcgogKiAgICAgLWZQSUMgZG9lcywgYnV0IGdpdmVuIHByb2JsZW1zIHRvIGRhdGUsIHNlZW1zIGxpa2UgbG9uZyBzaG90Li4uXQogKiAgICAgW3JlbGV2YW50IGlmZGVmczogIF9feDg2XzY0X18gJiYgX19QSUNfXyA9PiBDIGNvZGUgb25seV0KICogIC0gY2hhbmdlZCAjaWYgMCB0byAjaWZkZWYgUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEIGluIGNhc2UgZ2NjIGV2ZXIKICogICAgIHN1cHBvcnRzIE1NWCByZWdzICglbW0wLCBldGMuKSBpbiBjbG9iYmVyIGxpc3QgKG5vdCBzdXBwb3J0ZWQgYnkgZ2NjCiAqICAgICAyLjcuMi4zLCAyLjkxLjY2IChlZ2NzIDEuMS4yKSwgMy54LCBvciA0LjEuMikKICoKICogMjAwNzA2MDM6CiAqICAtIHJldmlzZWQgcG5nX2NvbWJpbmVfcm93KCkgdG8gdXNlIEBHT1RQQ1JFTCglJXJpcCkgYWRkcmVzc2luZyBvbiBfYzY0CiAqICAgICBzdHJ1Y3Qgb2YgX21hc2sqXyogY29uc3RhbnRzIGZvciB4ODYtNjQgLWZQSUM7IHNlZSBzYW0uem95Lm9yZyBsaW5rCiAqICAgICBhYm92ZSBmb3IgZGV0YWlscwogKiAgLSBtb3ZlZCBfY29uc3Q0IGFuZCBfY29uc3Q2IGludG8gX2M2NCBzdHJ1Y3QsIHJlbmFtZWQgdG8gX2FtYXNrNV8zXzAgYW5kCiAqICAgICBfYW1hc2s3XzFfMCwgcmVzcGVjdGl2ZWx5CiAqICAtIGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvIHVzZSBfYzY0Ll9tYXNrKl8qIHZhcnMgd2l0aGluIGFzbSBjb2RlLCBzbyBzdGlsbAogKiAgICAgbmVlZCBzaW5nbGUgdmFyaWFibGVzIGZvciBub24teDg2LTY0Ly1mUElDIGhhbGYgOi0oCiAqICAtIHJlcGxhY2VkIHZhcmlvdXMgX19QSUNfXyBpZmRlZnMgd2l0aCAqX0dPVF9lYnggbWFjcm9zCiAqICAtIG1vdmVkIF9MQkNhcnJ5TWFzayBhbmQgX0hCQ2xlYXJNYXNrIGludG8gX2M2NCBzdHJ1Y3QKICogIC0gY29uZGl0aW9uYWxseSByZXBsYWNlZCBfcCp0ZW1wIHZhcmlhYmxlcyB3aXRoICVyMTFkLSVyMTNkICh2aWEgcCpfVEVNUAogKiAgICAgYW5kIENMT0JCRVJfcjEqZCBtYWNyb3MpCiAqCiAqIDIwMDcwNjA0OgogKiAgLSByZXBsYWNlZCBhbGwgX0FjdGl2ZU1hc2sgYW5kIF9BY3RpdmVNYXNrRW5kIHdpdGggbmV3IF9hbWFzaypfKl8qIGNvbnN0cwogKiAgICAgKF9hbWFzayBuYW1pbmcgY29udmVudGlvbjogIG51bWJlcnMgb2YgMDAtYnl0ZXMsIGZmLWJ5dGVzLCAwMC1ieXRlcykKICogICAgLSBfQWN0aXZlTWFzayAgICAgLy8gKDEwKSAvLyBhdmcvcGFldGgvc3ViOyByZWFkLW9ubHk7IGNvbnN0czsgbW92cS9wYW5kCiAqICAgICAgIDB4MDAwMDAwMDAwMGZmZmZmZkxMIChicHAgMywgYXZnKSAgICAgIF9hbWFzazVfM18wCiAqICAgICAgIDB4ZmZmZmZmZmZmZmZmZmZmZkxMIChicHAgNCwgNiwgYXZnKSAgIF9hbWFzazBfOF8wCiAqICAgICAgIDB4MDAwMDAwMDAwMDAwZmZmZkxMIChicHAgMiwgYXZnKSAgICAgIF9hbWFzazZfMl8wCiAqICAgICAgIDB4MDAwMDAwMDAwMGZmZmZmZkxMIChicHAgMywgcGFldGgpICAgIF9hbWFzazVfM18wCiAqICAgICAgIDB4MDAwMDAwMDBmZmZmZmZmZkxMIChicHAgNiwgcGFldGgpICAgIF9hbWFzazRfNF8wCiAqICAgICAgIDB4MDAwMDAwMDBmZmZmZmZmZkxMIChicHAgNCwgcGFldGgpICAgIF9hbWFzazRfNF8wCiAqICAgICAgIDB4MDAwMDAwMDBmZmZmZmZmZkxMIChicHAgOCwgcGFldGgpICAgIF9hbWFzazRfNF8wCiAqICAgICAgIDB4MDAwMGZmZmZmZjAwMDAwMExMIChicHAgMywgc3ViKSAgICAgIF9hbWFzazJfM18zCiAqICAgICAgIDB4MDAwMDAwMDBmZmZmMDAwMExMIChicHAgMiwgc3ViKSAgICAgIF9hbWFzazRfMl8yCiAqICAgIC0gX0FjdGl2ZU1hc2tFbmQgIC8vICgxKSAgLy8gcGFldGggb25seTsgcmVhZC1vbmx5OyBjb25zdDsgcGFuZAogKiAgICAgICAweGZmZmYwMDAwMDAwMDAwMDBMTCAoYnBwIDMsIHBhZXRoKSAgICBfYW1hc2swXzJfNgogKiAgLSBjaGFuZ2VkIGFsbCAiI2lmIGRlZmluZWQoX194ODZfNjRfXykgLy8gbGF0ZXIgLy8gJiYgZGVmaW5lZChfX1BJQ19fKSIKICogICAgIGxpbmVzIHRvICIjaWZkZWYgUE5HX3g4Nl82NF9VU0VfR09UUENSRUwiIGZvciBlYXNpZXIvc2FmZXIgdGVzdGluZwogKgogKiAyMDA3MDYwNToKICogIC0gbWVyZ2VkIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMLCBub24tUE5HX3g4Nl82NF9VU0VfR09UUENSRUwgY29kZSB2aWEKICogICAgICpNQVNLKiBhbmQgTE9BRC9SRVNUT1JFIG1hY3JvcwogKgogKiAyMDA3MDYwNzoKICogIC0gcmVwbGFjZWQgYWxsIGNvbnN0YW50IGluc3RhbmNlcyBvZiBfU2hpZnRCcHAsIF9TaGlmdFJlbSB3aXRoIGltbWVkaWF0ZXMKICogICAgIChzdGlsbCBoYXZlIHR3byBzaGFyZWQgY2FzZXMgaW4gYXZnLCBzdWIgcm91dGluZXMpCiAqCiAqIDIwMDcwNjA5OgogKiAgLSByZXBsYWNlZCByZW1haW5pbmcgaW5zdGFuY2VzIG9mIF9TaGlmdEJwcCwgX1NoaWZ0UmVtIHdpdGggaW1tZWRpYXRlcwogKiAgICAgKHNwbGl0IHN1YiBhbmQgYXZnIDQvNi1icHAgY2FzZXMgaW50byBzZXBhcmF0ZSBibG9ja3MpCiAqICAtIGZpeGVkIHBhZXRoIGJ1ZyBkdWUgdG8gY2xvYmJlcmVkIHIxMS9yMTIvcjEzIHJlZ3MKICoKICogMjAwNzA2MTA6CiAqICAtIG1hZGUgZ2xvYmFsICJfZGlmIiB2YXJpYWJsZSAoYXZnL3BhZXRoL3N1YiByb3V0aW5lcykgbG9jYWwgYWdhaW4gKG5vdwogKiAgICAgImRpZmYiLS1zZWUgMTk5OTExMjAgZW50cnkgYWJvdmUpLCB1c2luZyByZWdpc3RlciBjb25zdHJhaW50cwogKiAgLSBub3RlIHRoYXQgJWVicCBpbiBjbG9iYmVyIGxpc3QgZG9lc24ndCBhY3R1YWxseSB3b3JrLCBhdCBsZWFzdCBmb3IgMzItYml0CiAqICAgICB2ZXJzaW9uIGFuZCBnY2MgNC4xLjI7IG11c3Qgc2F2ZSBhbmQgcmVzdG9yZSBtYW51YWxseS4gIChTZWVtcyB0byB3b3JrCiAqICAgICBPSyBmb3IgNjQtYml0IHZlcnNpb24gYW5kIGdjYyAzLjQuMywgYnV0IGdjYyBtYXkgbm90IGJlIHVzaW5nIGVicC9yYnAKICogICAgIGluIHRoYXQgY2FzZS4pCiAqICAtIHN0YXJ0ZWQgcmVwbGFjaW5nIGRpcmVjdCBfTU1YTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKICoKICogMjAwNzA2MTI6CiAqICAtIGNvbnRpbnVlZCByZXBsYWNpbmcgZGlyZWN0IF9NTVhMZW5ndGggYWNjZXNzZXMgd2l0aCByZWdpc3RlciBjb25zdHJhaW50cwogKgogKiAyMDA3MDYxMzoKICogIC0gZmluaXNoZWQgcmVwbGFjaW5nIGRpcmVjdCBfTU1YTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHM7CiAqICAgICBzd2l0Y2hlZCB0byBsb2NhbCB2YXJpYWJsZSAoYW5kIHJlbmFtZWQgYmFjayB0byBNTVhMZW5ndGgpCiAqCiAqIDIwMDcwNjE0OgogKiAgLSBmaXhlZCBzdWIgYnBwID0gMSBidWcKICogIC0gc3RhcnRlZCByZXBsYWNpbmcgZGlyZWN0IF9GdWxsTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKICoKICogMjAwNzA2MTU6CiAqICAtIGZpeGVkIDY0LWJpdCBwYWV0aCBicHAgMyBjcmFzaCBidWcgKG1pc3BsYWNlZCBMT0FEX0dPVF9yYnApCiAqICAtIGZpeGVkIDY0LWJpdCBwYWV0aCBicHAgMS8yIGFuZCBjbGVhbnVwLWJsb2NrIGNyYXNoIGJ1Z3MgKG1pc3BsYWNlZAogKiAgICAgUkVTVE9SRV9yMTFfcjEyX3IxMykKICogIC0gc2xpZ2h0bHkgb3B0aW1pemVkIGF2Zy9wYWV0aCBjbGVhbnVwIGJsb2NrcyBhbmQgcGFldGggYnBwIDEvMiBibG9jawogKiAgICAgKHNhdmUvcmVzdG9yZSBlYnggb25seSBpZiBuZWVkZWQpCiAqICAtIGNvbnRpbnVlZCByZXBsYWNpbmcgZGlyZWN0IF9GdWxsTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKICoKICogMjAwNzA2MTY6CiAqICAtIGZpbmlzaGVkIHJlcGxhY2luZyBkaXJlY3QgX0Z1bGxMZW5ndGggYWNjZXNzZXMgd2l0aCByZWdpc3RlciBjb25zdHJhaW50cwogKiAgICAgKCp1Z2x5KiBjb25kaXRpb25hbCBjbG9iYmVyLXNlcGFyYXRvciBtYWNyb3MgZm9yIGF2ZyBhbmQgcGFldGgsIHNpZ2gpCiAqCiAqIDIwMDcwNjE4OgogKiAgLSBmaXhlZCBtaXNwbGFjZWQgUE5HX1RIUkVBRF9VTlNBRkVfT0sgZW5kaWYgKHdhcyBtaXNzaW5nIExPQURfR09UX3JicC8KICogICAgIFJFU1RPUkVfcmJwIGluIDMyLWJpdCB0aHJlYWQtc2FmZSBjYXNlKQogKiAgLSBjaGFuZ2VkIGFsbCAiaWZkZWYgKiIgdG8gImlmIGRlZmluZWQoKikiIFtHUi1QXQogKgogKiAyMDA3MDYxOToKICogIC0gcmVhcnJhbmdlZCBtb3N0IGJpdGRlcHRoLXJlbGF0ZWQgY2FzZSBzdGF0ZW1lbnRzIHRvIHB1dCBtb3N0IGZyZXF1ZW50CiAqICAgICBjYXNlcyBhdCB0b3AgKDI0LWJpdCwgMzItYml0LCA4LWJpdCwgcmVzdCkKICoKICogMjAwNzA2MjM6CiAqICAtIGNsZWFuZWQgdXAgcG5nX2RlYnVnKCkgd2FybmluZ3MvZm9ybWF0dGluZwogKiAgLSByZW1vdmVkIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgaWZkZWZzIGFuZCBhZGRlZCBvdXRlciBfX0dOVUNfXyBpZmRlZgogKiAgICAgKG1vZHVsZSBubyBsb25nZXIgdXNlZCBieSBub24teDg2L25vbi1HQ0MgYnVpbGRzIGFzIG9mIGxpYnBuZyAxLjIuMTkpCiAqICAtIHJlbW92ZWQgc2luZ2xlIGxpYnBuZy0xLjIueCBQTkdfREVCVUcgZGVwZW5kZW5jeSBvbiAxLjAueCBwbmdfc3RydWN0CiAqICAgICBtZW1iZXIgKHJvd19idWZfc2l6ZSkKICogIC0gcmVhcnJhbmdlZCBwYXNzLXJlbGF0ZWQgaWYtYmxvY2tzIGluIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIHRvIHB1dCBtb3N0CiAqICAgICBmcmVxdWVudCBjYXNlcyAoNCwgNSkgYXQgdG9wIFtHUi1QIHN1Z2dlc3Rpb25dCiAqCiAqIDIwMDcwNjI0LTI5OgogKiAgLSBmaXhlZCA2NC1iaXQgY3Jhc2ggYnVnOiAgcG9pbnRlcnMgLT4gcnNpL3JkaSwgbm90IGVzaS9lZGkgKHN3aXRjaGVkIHRvCiAqICAgICAlMC8lMS8lMi8lMy8lNCBub3RhdGlvbjsgZWxpbWluYXRlZCBzaXplIHN1ZmZpeGVzIGZyb20gcmVsZXZhbnQgYWRkLwogKiAgICAgaW5jL3N1Yi9tb3YgaW5zdHJ1Y3Rpb25zOyBjaGFuZ2VkIGR1bW15IHZhcnMgdG8gcG9pbnRlcnMpCiAqICAgICAtIHBuZ19jb21iaW5lX3JvdygpCiAqICAgICAtIHBuZ19kb19yZWFkX2ludGVybGFjZSgpCiAqICAgICAtIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpCiAqICAgICAtIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkKICogICAgIC0gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkKICogICAgIC0gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfdXAoKQogKiAgLSBOT1RFOiAgdGhpcyBmaXggbWFrZXMgdXNlIG9mIHRoZSBmYWN0IHRoYXQgbW9kaWZ5aW5nIGEgMzItYml0IHJlZyAoZS5nLiwKICogICAgICUlZWJ4KSBjbGVhcnMgdGhlIHRvcCBoYWxmIG9mIGl0cyBjb3JyZXNwb25kaW5nIDY0LWJpdCByZWcgKCUlcmJ4KSwgc28KICogICAgIGl0J3Mgc2FmZSB0byBtaXggMzItYml0IG9wZXJhdGlvbnMgd2l0aCA2NC1iaXQgYmFzZS9pbmRleCBhZGRyZXNzaW5nCiAqICAgICAoc2VlIG5ldyBQU0kvUEFYL1BCWC9QRFgvUEJQL2V0Yy4gInBvaW50ZXItcmVnaXN0ZXIiIG1hY3Jvcyk7IGFwcGxpZXMKICogICAgIGFsc28gdG8gY2xvYmJlciBsaXN0cwogKgogKiAyMDA3MDYzMDoKICogIC0gY2xlYW5lZCB1cCBmb3JtYXR0aW5nLCBtYWNyb3MsIG1pbm9yIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpIDgtYnBwCiAqICAgICByZWdpc3Rlci11c2FnZSBpbmVmZmljaWVuY3kKICogIC0gZml4ZWQgMzItYml0IHBuZ19kb19yZWFkX2ludGVybGFjZSgpIGJ1ZyAod2FzIHVzaW5nIHBvaW50ZXIgc2l6ZSBmb3IKICogICAgIDY0LWJpdCBkdW1teSB2YWx1ZXMpCiAqCiAqIDIwMDcwNzAzOgogKiAgLSBhZGRlZCBjaGVjayBmb3IgKG1hbnVhbCkgUElDIG1hY3JvIHRvIGZpeCBPcGVuQlNEIGNyYXNoIGJ1ZwogKgogKiAyMDA3MDcxNzoKICogIC0gZml4ZWQgNDgtYml0IHBuZ19jb21iaW5lX3JvdygpIGJ1ZyAod2FzIGFjdGluZyBsaWtlIDMyLWJpdCk6ICBjb3B5IDYKICogICAgIGJ5dGVzIHBlciBwaXhlbCwgbm90IDQsIGFuZCB1c2Ugc3RyaWRlIG9mIDYsIG5vdCA0LCBpbiB0aGUgc2Vjb25kIGxvb3AKICogICAgIG9mIGludGVybGFjZSBwcm9jZXNzaW5nIG9mIDQ4LWJpdCBwaXhlbHMgW0dSLVBdCiAqCiAqIDIwMDcwNzIyOgogKiAgLSBmaXhlZCA2NC1iaXQgcG5nX3VpbnRfMzIgYnVnIHdpdGggTU1YTGVuZ3RoL0Z1bGxMZW5ndGggdGVtcCB2YXJzCiAqCiAqIFtzdGlsbCBicm9rZW46ICB0b3BzIG9mIGFsbCByb3ctZmlsdGVyIGJsb2NrcyAoaW5wdXQvb3V0cHV0IGNvbnN0cmFpbnRzKTsKICogIHNob3dzIHVwIG9uIDY0LWJpdCBkeW5hbWljICgtZlBJQykgdmVyc2lvbiB3aXRoIC1PMiwgZXNwZWNpYWxseSBpZiBkZWJ1Zy0KICogIHByaW50ZnMgZW5hYmxlZCwgYnV0IGF0IHJpZ2h0IGVkZ2Ugb2Ygb2RkLXdpZHRoIGltYWdlcyBldmVuIGlmIGRpc2FibGVkXQogKgogKgogKiBTVElMTCBUTyBETzoKICogIC0gZml4IGZpbmFsIHRocmVhZC11bnNhZmUgY29kZSB1c2luZyBzdGFjayB2YXJzIGFuZCBwb2ludGVyPyAocGFldGggdG9wLAogKiAgICAgZGVmYXVsdCwgYm90dG9tIG9ubHk6ICBkZWZhdWx0LCBib3R0b20gYWxyZWFkeSA1IHJlZyBjb25zdHJhaW50czsgY291bGQKICogICAgIHJlcGxhY2UgYnBwIHdpdGggcG9pbnRlciBhbmQgZ3JvdXAgYnBwL3BhdGVtcC9wYnRlbXAvcGN0ZW1wIGluIGFycmF5KQogKiAgLSBmaXggZWJwL25vLXJlZy1jb25zdHJhaW50IGluZWZmaWNpZW5jeSAoYXZnL3BhZXRoL3N1YiB0b3ApCiAqICAtIHRlc3QgcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgNjQtYml0IGNhc2UgKHBpeGVsX2J5dGVzID09IDgpCiAqICAtIHdyaXRlIE1NWCBjb2RlIGZvciA0OC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gNikKICogIC0gZmlndXJlIG91dCB3aGF0J3MgdXAgd2l0aCAyNC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gMyk6CiAqICAgICB3aHkgc3VidHJhY3QgOCBmcm9tIHdpZHRoX21teCBpbiB0aGUgcGFzcyA0LzUgY2FzZT8gIGR1ZSB0bwogKiAgICAgb2RkIG51bWJlciBvZiBieXRlcz8gKG9ubHkgd2lkdGhfbW14IGNhc2UpIChuZWFyIGxpbmUgMjMzNSkKICogIC0gcmV3cml0ZSBhbGwgTU1YIGludGVybGFjaW5nIGNvZGUgc28gaXQncyBhbGlnbmVkIHdpdGggYmVnaW5uaW5nCiAqICAgICBvZiB0aGUgcm93IGJ1ZmZlciwgbm90IHRoZSBlbmQgKHNlZSAxOTk5MTAwNyBmb3IgZGV0YWlscykKICogIC0gYWRkIGVycm9yIG1lc3NhZ2VzIHRvIGFueSByZW1haW5pbmcgYm9ndXMgZGVmYXVsdCBjYXNlcwogKiAgLSBlbmFibGUgcGl4ZWxfZGVwdGggPT0gOCBjYXNlcyBpbiBwbmdfcmVhZF9maWx0ZXJfcm93KCk/ICh0ZXN0IHNwZWVkKQogKiAgLSB0cnkgPXIsIGV0Yy4sIGFzIHJlZyBjb25zdHJhaW50cz8gICh3b3VsZCBnY2MgdXNlIDY0LWJpdCBvbmVzIG9uIHg4Ni02ND8pCiAqICAtIG5lZWQgZnVsbCwgbm9uLWdyYXBoaWNhbCwgQ1JDLWJhc2VkIHRlc3Qgc3VpdGUuLi4gIG1heWJlIGF1dG9nZW5lcmF0ZQogKiAgICAgcmFuZG9tIGRhdGEgb2YgdmFyaW91cyBoZWlnaHQvd2lkdGgvZGVwdGgsIGNvbXB1dGUgQ1JDcywgd3JpdGUgKEMKICogICAgIGZ1bmNzKSwgcmVhZCAoYXNtL01NWCksIHJlY29tcHV0ZSBDUkNzLCBhbmQgY29tcGFyZT8KICogIC0gd3JpdGUgdHJ1ZSB4ODYtNjQgdmVyc2lvbiB1c2luZyAxMjgtYml0ICJtZWRpYSBpbnN0cnVjdGlvbnMiLCAleG1tMC0xNSwKICogICAgIGFuZCBleHRyYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzCiAqLwoKI2lmIGRlZmluZWQoX19HTlVDX18pCgojZGVmaW5lIFBOR19JTlRFUk5BTAojaW5jbHVkZSAicG5nLmgiCgoKLyogZm9yIHNvbWUgaW5leHBsaWNhYmxlIHJlYXNvbiwgZ2NjIDMuMy41IG9uIE9wZW5CU0QgKGFuZCBlbHNld2hlcmU/KSBkb2VzCiAqICpub3QqIGRlZmluZSBfX1BJQ19fIHdoZW4gdGhlIC1mUElDIG9wdGlvbiBpcyB1c2VkLCBzbyB3ZSBoYXZlIHRvIHJlbHkgb24KICogbWFrZWZpbGVzIGFuZCB3aGF0bm90IHRvIGRlZmluZSB0aGUgUElDIG1hY3JvIGV4cGxpY2l0bHkgKi8KI2lmIGRlZmluZWQoUElDKSAmJiAhZGVmaW5lZChfX1BJQ19fKSAgIC8vICh0aGlzIGNhbi9zaG91bGQgbW92ZSB0byBwbmdjb25mLmgpCiMgIGRlZmluZSBfX1BJQ19fCiNlbmRpZgoKI2lmIGRlZmluZWQoUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCkgJiYgZGVmaW5lZChQTkdfVVNFX1BOR0dDQ1JEKQoKLyogaWYgeW91IHdhbnQvbmVlZCBmdWxsIHRocmVhZC1zYWZldHkgb24geDg2LTY0IGV2ZW4gd2hlbiBsaW5raW5nIHN0YXRpY2FsbHksCiAqIGNvbW1lbnQgb3V0IHRoZSAiJiYgZGVmaW5lZChfX1BJQ19fKSIgcGFydCBoZXJlOiAqLwojaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fUElDX18pCiMgIGRlZmluZSBQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCAgICAgICAgICAgIC8vIEdPVFBDUkVMID0+IGZ1bGwgdGhyZWFkLXNhZmV0eQojICBkZWZpbmUgUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVEICAvLyB3b3JrcyBhcyBvZiBnY2MgMy40LjMgLi4uCiNlbmRpZgoKaW50IFBOR0FQSSBwbmdfbW14X3N1cHBvcnQodm9pZCk7CgojaWYgZGVmaW5lZChQTkdfVVNFX0xPQ0FMX0FSUkFZUykKc3RhdGljIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc19zdGFydFs3XSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsKc3RhdGljIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc19pbmNbN10gICA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKc3RhdGljIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc193aWR0aFs3XSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsKI2VuZGlmCgovKiBkamdwcCwgV2luMzIsIEN5Z3dpbiwgYW5kIE9TMiBhZGQgdGhlaXIgb3duIHVuZGVyc2NvcmVzIHRvIGdsb2JhbCB2YXJpYWJsZXMsCiAqIHNvIGRlZmluZSB0aGVtIHdpdGhvdXQ6ICovCiNpZiBkZWZpbmVkKF9fREpHUFBfXykgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBcCiAgICBkZWZpbmVkKF9fT1MyX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQojICBkZWZpbmUgX21teF9zdXBwb3J0ZWQgIG1teF9zdXBwb3J0ZWQKIyAgZGVmaW5lIF9tYXNrOF8wICAgICAgICBtYXNrOF8wCiMgIGRlZmluZSBfbWFzazE2XzEgICAgICAgbWFzazE2XzEKIyAgZGVmaW5lIF9tYXNrMTZfMCAgICAgICBtYXNrMTZfMAojICBkZWZpbmUgX21hc2syNF8yICAgICAgIG1hc2syNF8yCiMgIGRlZmluZSBfbWFzazI0XzEgICAgICAgbWFzazI0XzEKIyAgZGVmaW5lIF9tYXNrMjRfMCAgICAgICBtYXNrMjRfMAojICBkZWZpbmUgX21hc2szMl8zICAgICAgIG1hc2szMl8zCiMgIGRlZmluZSBfbWFzazMyXzIgICAgICAgbWFzazMyXzIKIyAgZGVmaW5lIF9tYXNrMzJfMSAgICAgICBtYXNrMzJfMQojICBkZWZpbmUgX21hc2szMl8wICAgICAgIG1hc2szMl8wCiMgIGRlZmluZSBfbWFzazQ4XzUgICAgICAgbWFzazQ4XzUKIyAgZGVmaW5lIF9tYXNrNDhfNCAgICAgICBtYXNrNDhfNAojICBkZWZpbmUgX21hc2s0OF8zICAgICAgIG1hc2s0OF8zCiMgIGRlZmluZSBfbWFzazQ4XzIgICAgICAgbWFzazQ4XzIKIyAgZGVmaW5lIF9tYXNrNDhfMSAgICAgICBtYXNrNDhfMQojICBkZWZpbmUgX21hc2s0OF8wICAgICAgIG1hc2s0OF8wCiMgIGRlZmluZSBfYW1hc2s1XzNfMCAgICAgYW1hc2s1XzNfMAojICBkZWZpbmUgX2FtYXNrN18xXzAgICAgIGFtYXNrN18xXzAKIyAgZGVmaW5lIF9MQkNhcnJ5TWFzayAgICBMQkNhcnJ5TWFzawojICBkZWZpbmUgX0hCQ2xlYXJNYXNrICAgIEhCQ2xlYXJNYXNrCiMgIGRlZmluZSBfYW1hc2swXzhfMCAgICAgYW1hc2swXzhfMAojICBkZWZpbmUgX2FtYXNrNl8yXzAgICAgIGFtYXNrNl8yXzAKIyAgZGVmaW5lIF9hbWFzazRfNF8wICAgICBhbWFzazRfNF8wCiMgIGRlZmluZSBfYW1hc2swXzJfNiAgICAgYW1hc2swXzJfNgojICBkZWZpbmUgX2FtYXNrMl8zXzMgICAgIGFtYXNrMl8zXzMKIyAgZGVmaW5lIF9hbWFzazRfMl8yICAgICBhbWFzazRfMl8yCiMgIGlmIGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCiMgICAgZGVmaW5lIF9wYXRlbXAgICAgICAgcGF0ZW1wCiMgICAgZGVmaW5lIF9wYnRlbXAgICAgICAgcGJ0ZW1wCiMgICAgZGVmaW5lIF9wY3RlbXAgICAgICAgcGN0ZW1wCiMgIGVuZGlmCiNlbmRpZiAvLyBkamdwcCwgV2luMzIsIEN5Z3dpbiwgT1MyCgoKLyogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGluIHRoZSBpbmxpbmVkIE1NWCBhc3NlbWJseSBjb2RlLiAqLwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgIHVsbDsKCiNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKQpzdGF0aWMgUE5HX0NPTlNUIHN0cnVjdCB7CiAgICAvL3VsbCBfbWFza19hcnJheVsyNl07CgogICAgLy8gcG5nX2NvbWJpbmVfcm93KCkgY29uc3RhbnRzOgogICAgdWxsIF9tYXNrOF8wOwogICAgdWxsIF9tYXNrMTZfMCwgX21hc2sxNl8xOwogICAgdWxsIF9tYXNrMjRfMCwgX21hc2syNF8xLCBfbWFzazI0XzI7CiAgICB1bGwgX21hc2szMl8wLCBfbWFzazMyXzEsIF9tYXNrMzJfMiwgX21hc2szMl8zOwogICAgdWxsIF9tYXNrNDhfMCwgX21hc2s0OF8xLCBfbWFzazQ4XzIsIF9tYXNrNDhfMywgX21hc2s0OF80LCBfbWFzazQ4XzU7CgogICAgLy8gcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgY29uc3RhbnRzOgogICAgdWxsIF9hbWFzazVfM18wLCBfYW1hc2s3XzFfMDsgIC8vIHdhcyBfY29uc3Q0IGFuZCBfY29uc3Q2LCByZXNwZWN0aXZlbHkKCiAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSBjb25zdGFudHMgKGFsc28gdXNlcyBfYW1hc2s1XzNfMCk6CiAgICB1bGwgX0xCQ2FycnlNYXNrLCBfSEJDbGVhck1hc2s7CiAgICB1bGwgX2FtYXNrMF84XzAsIF9hbWFzazZfMl8wOyAgLy8gd2FzIEFjdGl2ZU1hc2sgZm9yIGJwcCA0LzYgYW5kIDIgY2FzZXMKCiAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpIGNvbnN0YW50cyAoYWxzbyB1c2VzIF9hbWFzazVfM18wKToKICAgIHVsbCBfYW1hc2s0XzRfMCwgX2FtYXNrMF8yXzY7ICAvLyB3YXMgQWN0aXZlTWFza3ssRW5kfSBmb3IgYnBwIDYvNC84IGFuZCAzCgogICAgLy8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkgY29uc3RhbnRzOgogICAgdWxsIF9hbWFzazJfM18zLCBfYW1hc2s0XzJfMjsgIC8vIHdhcyBBY3RpdmVNYXNrIGZvciBicHAgMyBhbmQgMiBjYXNlcwoKfSBfYzY0IF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IHsKCiAgICAvLyBwbmdfY29tYmluZV9yb3coKSBjb25zdGFudHM6CiAgICAweDAxMDIwNDA4MTAyMDQwODBMTCwgLy8gX21hc2s4XzAgICAgICBvZmZzZXQgMAoKICAgIDB4MTAxMDIwMjA0MDQwODA4MExMLCAvLyBfbWFzazE2XzAgICAgIG9mZnNldCA4CiAgICAweDAxMDEwMjAyMDQwNDA4MDhMTCwgLy8gX21hc2sxNl8xICAgICBvZmZzZXQgMTYKCiAgICAweDIwMjA0MDQwNDA4MDgwODBMTCwgLy8gX21hc2syNF8wICAgICBvZmZzZXQgMjQKICAgIDB4MDQwODA4MDgxMDEwMTAyMExMLCAvLyBfbWFzazI0XzEgICAgIG9mZnNldCAzMgogICAgMHgwMTAxMDEwMjAyMDIwNDA0TEwsIC8vIF9tYXNrMjRfMiAgICAgb2Zmc2V0IDQwCgogICAgMHg0MDQwNDA0MDgwODA4MDgwTEwsIC8vIF9tYXNrMzJfMCAgICAgb2Zmc2V0IDQ4CiAgICAweDEwMTAxMDEwMjAyMDIwMjBMTCwgLy8gX21hc2szMl8xICAgICBvZmZzZXQgNTYKICAgIDB4MDQwNDA0MDQwODA4MDgwOExMLCAvLyBfbWFzazMyXzIgICAgIG9mZnNldCA2NAogICAgMHgwMTAxMDEwMTAyMDIwMjAyTEwsIC8vIF9tYXNrMzJfMyAgICAgb2Zmc2V0IDcyCgogICAgMHg0MDQwODA4MDgwODA4MDgwTEwsIC8vIF9tYXNrNDhfMCAgICAgb2Zmc2V0IDgwCiAgICAweDIwMjAyMDIwNDA0MDQwNDBMTCwgLy8gX21hc2s0OF8xICAgICBvZmZzZXQgODgKICAgIDB4MTAxMDEwMTAxMDEwMjAyMExMLCAvLyBfbWFzazQ4XzIgICAgIG9mZnNldCA5NgogICAgMHgwNDA0MDgwODA4MDgwODA4TEwsIC8vIF9tYXNrNDhfMyAgICAgb2Zmc2V0IDEwNAogICAgMHgwMjAyMDIwMjA0MDQwNDA0TEwsIC8vIF9tYXNrNDhfNCAgICAgb2Zmc2V0IDExMgogICAgMHgwMTAxMDEwMTAxMDEwMjAyTEwsIC8vIF9tYXNrNDhfNSAgICAgb2Zmc2V0IDEyMAoKICAgIC8vIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIGNvbnN0YW50czoKICAgIDB4MDAwMDAwMDAwMEZGRkZGRkxMLCAvLyBfYW1hc2s1XzNfMCAgIG9mZnNldCAxMjggIChicHAgMywgYXZnL3BhZXRoKSBjb25zdDQKICAgIDB4MDAwMDAwMDAwMDAwMDBGRkxMLCAvLyBfYW1hc2s3XzFfMCAgIG9mZnNldCAxMzYgICAgICAgICAgICAgICAgICAgICBjb25zdDYKCiAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSBjb25zdGFudHM6CiAgICAweDAxMDEwMTAxMDEwMTAxMDFMTCwgLy8gX0xCQ2FycnlNYXNrICBvZmZzZXQgMTQ0CiAgICAweDdGN0Y3RjdGN0Y3RjdGN0ZMTCwgLy8gX0hCQ2xlYXJNYXNrICBvZmZzZXQgMTUyCiAgICAweEZGRkZGRkZGRkZGRkZGRkZMTCwgLy8gX2FtYXNrMF84XzAgICBvZmZzZXQgMTYwICAoYnBwIDQvNiwgYXZnKQogICAgMHgwMDAwMDAwMDAwMDBGRkZGTEwsIC8vIF9hbWFzazZfMl8wICAgb2Zmc2V0IDE2OCAgKGJwcCAyLCAgIGF2ZykKCiAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpIGNvbnN0YW50czoKICAgIDB4MDAwMDAwMDBGRkZGRkZGRkxMLCAvLyBfYW1hc2s0XzRfMCAgIG9mZnNldCAxNzYgIChicHAgNi80LzgsIHBhZXRoKQogICAgMHhGRkZGMDAwMDAwMDAwMDAwTEwsIC8vIF9hbWFzazBfMl82ICAgb2Zmc2V0IDE4NCAgKGJwcCAzLCBwYWV0aCkgICBBLk0uRW5kCgogICAgLy8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkgY29uc3RhbnRzOgogICAgMHgwMDAwRkZGRkZGMDAwMDAwTEwsIC8vIF9hbWFzazJfM18zICAgb2Zmc2V0IDE5MiAgKGJwcCAzLCBzdWIpCiAgICAweDAwMDAwMDAwRkZGRjAwMDBMTCwgLy8gX2FtYXNrNF8yXzIgICBvZmZzZXQgMjAwICAoYnBwIDIsIHN1YikKCn07CgojZGVmaW5lIE1BU0s4XzAgICAgICAgICIoJSVyYnApIgojZGVmaW5lIE1BU0sxNl8wICAgICAgICI4KCUlcmJwKSIKI2RlZmluZSBNQVNLMTZfMSAgICAgICAiMTYoJSVyYnApIgojZGVmaW5lIE1BU0syNF8wICAgICAgICIyNCglJXJicCkiCiNkZWZpbmUgTUFTSzI0XzEgICAgICAgIjMyKCUlcmJwKSIKI2RlZmluZSBNQVNLMjRfMiAgICAgICAiNDAoJSVyYnApIgojZGVmaW5lIE1BU0szMl8wICAgICAgICI0OCglJXJicCkiCiNkZWZpbmUgTUFTSzMyXzEgICAgICAgIjU2KCUlcmJwKSIKI2RlZmluZSBNQVNLMzJfMiAgICAgICAiNjQoJSVyYnApIgojZGVmaW5lIE1BU0szMl8zICAgICAgICI3MiglJXJicCkiCiNkZWZpbmUgTUFTSzQ4XzAgICAgICAgIjgwKCUlcmJwKSIKI2RlZmluZSBNQVNLNDhfMSAgICAgICAiODgoJSVyYnApIgojZGVmaW5lIE1BU0s0OF8yICAgICAgICI5NiglJXJicCkiCiNkZWZpbmUgTUFTSzQ4XzMgICAgICAgIjEwNCglJXJicCkiCiNkZWZpbmUgTUFTSzQ4XzQgICAgICAgIjExMiglJXJicCkiCiNkZWZpbmUgTUFTSzQ4XzUgICAgICAgIjEyMCglJXJicCkiCiNkZWZpbmUgQU1BU0s1XzNfMCAgICAgIjEyOCglJXJicCkiCiNkZWZpbmUgQU1BU0s3XzFfMCAgICAgIjEzNiglJXJicCkiCiNkZWZpbmUgTEJfQ0FSUllfTUFTSyAgIjE0NCglJXJicCkiCiNkZWZpbmUgSEJfQ0xFQVJfTUFTSyAgIjE1MiglJXJicCkiCiNkZWZpbmUgQU1BU0swXzhfMCAgICAgIjE2MCglJXJicCkiCiNkZWZpbmUgQU1BU0s2XzJfMCAgICAgIjE2OCglJXJicCkiCiNkZWZpbmUgQU1BU0s0XzRfMCAgICAgIjE3NiglJXJicCkiCiNkZWZpbmUgQU1BU0swXzJfNiAgICAgIjE4NCglJXJicCkiCiNkZWZpbmUgQU1BU0syXzNfMyAgICAgIjE5MiglJXJicCkiCiNkZWZpbmUgQU1BU0s0XzJfMiAgICAgIjIwMCglJXJicCkiCgojZWxzZSAvLyAhUE5HX3g4Nl82NF9VU0VfR09UUENSRUwKCnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrOF8wICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDIwNDA4MTAyMDQwODBMTDsKCnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMTZfMSBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMjAyMDQwNDA4MDhMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2sxNl8wIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MTAxMDIwMjA0MDQwODA4MExMOwoKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2syNF8yIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMTAxMDIwMjAyMDQwNExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazI0XzEgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwNDA4MDgwODEwMTAxMDIwTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMjRfMCBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDIwMjA0MDQwNDA4MDgwODBMTDsKCnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMzJfMyBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMTAxMDIwMjAyMDJMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2szMl8yIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDQwNDA0MDQwODA4MDgwOExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazMyXzEgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgxMDEwMTAxMDIwMjAyMDIwTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMzJfMCBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDQwNDA0MDQwODA4MDgwODBMTDsKCnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrNDhfNSBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMTAxMDEwMTAyMDJMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF80IF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDIwMjAyMDIwNDA0MDQwNExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzMgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwNDA0MDgwODA4MDgwODA4TEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrNDhfMiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDEwMTAxMDEwMTAxMDIwMjBMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF8xIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MjAyMDIwMjA0MDQwNDA0MExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHg0MDQwODA4MDgwODA4MDgwTEw7CgovLyBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSBjb25zdGFudHM6CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazVfM18wICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgPSAweDAwMDAwMDAwMDBGRkZGRkZMTDsgIC8vIHdhcyBfY29uc3Q0CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazdfMV8wICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgPSAweDAwMDAwMDAwMDAwMDAwRkZMTDsgIC8vIHdhcyBfY29uc3Q2CgovLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSBjb25zdGFudHM6CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9MQkNhcnJ5TWFzayBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMTAxMDEwMTAxMDFMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX0hCQ2xlYXJNYXNrIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4N2Y3ZjdmN2Y3ZjdmN2Y3ZkxMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2swXzhfMCAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHhGRkZGRkZGRkZGRkZGRkZGTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazZfMl8wICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAwMDAwMDAwMDAwMEZGRkZMTDsKCi8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgY29uc3RhbnRzOgpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s0XzRfMCAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMEZGRkZGRkZGTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazBfMl82ICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweEZGRkYwMDAwMDAwMDAwMDBMTDsKCi8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpIGNvbnN0YW50czoKc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrMl8zXzMgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDAwMEZGRkZGRjAwMDAwMExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s0XzJfMiAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMEZGRkYwMDAwTEw7CgojZGVmaW5lIE1BU0s4XzAgICAgICAgICJfbWFzazhfMCIKI2RlZmluZSBNQVNLMTZfMCAgICAgICAiX21hc2sxNl8wIgojZGVmaW5lIE1BU0sxNl8xICAgICAgICJfbWFzazE2XzEiCiNkZWZpbmUgTUFTSzI0XzAgICAgICAgIl9tYXNrMjRfMCIKI2RlZmluZSBNQVNLMjRfMSAgICAgICAiX21hc2syNF8xIgojZGVmaW5lIE1BU0syNF8yICAgICAgICJfbWFzazI0XzIiCiNkZWZpbmUgTUFTSzMyXzAgICAgICAgIl9tYXNrMzJfMCIKI2RlZmluZSBNQVNLMzJfMSAgICAgICAiX21hc2szMl8xIgojZGVmaW5lIE1BU0szMl8yICAgICAgICJfbWFzazMyXzIiCiNkZWZpbmUgTUFTSzMyXzMgICAgICAgIl9tYXNrMzJfMyIKI2RlZmluZSBNQVNLNDhfMCAgICAgICAiX21hc2s0OF8wIgojZGVmaW5lIE1BU0s0OF8xICAgICAgICJfbWFzazQ4XzEiCiNkZWZpbmUgTUFTSzQ4XzIgICAgICAgIl9tYXNrNDhfMiIKI2RlZmluZSBNQVNLNDhfMyAgICAgICAiX21hc2s0OF8zIgojZGVmaW5lIE1BU0s0OF80ICAgICAgICJfbWFzazQ4XzQiCiNkZWZpbmUgTUFTSzQ4XzUgICAgICAgIl9tYXNrNDhfNSIKI2RlZmluZSBBTUFTSzVfM18wICAgICAiX2FtYXNrNV8zXzAiCiNkZWZpbmUgQU1BU0s3XzFfMCAgICAgIl9hbWFzazdfMV8wIgojZGVmaW5lIExCX0NBUlJZX01BU0sgICJfTEJDYXJyeU1hc2siCiNkZWZpbmUgSEJfQ0xFQVJfTUFTSyAgIl9IQkNsZWFyTWFzayIKI2RlZmluZSBBTUFTSzBfOF8wICAgICAiX2FtYXNrMF84XzAiCiNkZWZpbmUgQU1BU0s2XzJfMCAgICAgIl9hbWFzazZfMl8wIgojZGVmaW5lIEFNQVNLNF80XzAgICAgICJfYW1hc2s0XzRfMCIKI2RlZmluZSBBTUFTSzBfMl82ICAgICAiX2FtYXNrMF8yXzYiCiNkZWZpbmUgQU1BU0syXzNfMyAgICAgIl9hbWFzazJfM18zIgojZGVmaW5lIEFNQVNLNF8yXzIgICAgICJfYW1hc2s0XzJfMiIKCiNlbmRpZiAvLyA/UE5HX3g4Nl82NF9VU0VfR09UUENSRUwKCgojaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XKSB8fCBkZWZpbmVkKFBOR19IQVZFX01NWF9DT01CSU5FX1JPVykKCi8vIHRoaXMgYmxvY2sgaXMgc3BlY2lmaWMgdG8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKSBleGNlcHQgZm9yCi8vIExPQURfR09UX3JicCBhbmQgUkVTVE9SRV9yYnAsIHdoaWNoIGFyZSBhbHNvIHVzZWQgaW4gcG5nX2NvbWJpbmVfcm93KCkKI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpCiMgIGRlZmluZSBwYV9URU1QICAgICAgICAgICAgICAgICIlJXIxMWQiCiMgIGRlZmluZSBwYl9URU1QICAgICAgICAgICAgICAgICIlJXIxMmQiCiMgIGRlZmluZSBwY19URU1QICAgICAgICAgICAgICAgICIlJXIxM2QiCiMgIGlmIGRlZmluZWQoUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVEKSAgLy8gd29ya3MgYXMgb2YgZ2NjIDMuNC4zIC4uLgojICAgIGRlZmluZSBTQVZFX3IxMV9yMTJfcjEzCiMgICAgZGVmaW5lIFJFU1RPUkVfcjExX3IxMl9yMTMKIyAgICBkZWZpbmUgX0NMT0JCRVJfcjExX3IxMl9yMTMgLCIlcjExIiwgIiVyMTIiLCAiJXIxMyIKIyAgICBkZWZpbmUgQ0xPQkJFUl9yMTFfcjEyX3IxMyAgIiVyMTEiLCAiJXIxMiIsICIlcjEzIgojICBlbHNlIC8vICFQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQKIyAgICBkZWZpbmUgU0FWRV9yMTFfcjEyX3IxMyAgICAgInB1c2hxICUlcjExICBcblx0IiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNocSAlJXIxMiAgXG5cdCIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaHEgJSVyMTMgIFxuXHQiICAvLyAibm9ybWFsbHkgMC1leHRlbmRlZCIKIyAgICBkZWZpbmUgUkVTVE9SRV9yMTFfcjEyX3IxMyAgInBvcHEgICUlcjEzICBcblx0IiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3BxICAlJXIxMiAgXG5cdCIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wcSAgJSVyMTEgIFxuXHQiCiMgICAgZGVmaW5lIF9DTE9CQkVSX3IxMV9yMTJfcjEzCiMgICAgZGVmaW5lIENMT0JCRVJfcjExX3IxMl9yMTMKIyAgZW5kaWYKIyAgZGVmaW5lIExPQURfR09UX3JicCAgICAgICAgICAgInB1c2hxICUlcmJwICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAgX2M2NEBHT1RQQ1JFTCglJXJpcCksICUlcmJwICBcblx0IgojICBkZWZpbmUgUkVTVE9SRV9yYnAgICAgICAgICAgICAicG9wcSAgJSVyYnAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgojZWxzZSAvLyAzMi1iaXQgYW5kL29yIG5vbi1QSUMKIyAgaWYgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKICAgICAvLyBUaGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKSBhbmQgd291bGQgYmUKICAgICAvLyAgIGxvY2FsIHZhcmlhYmxlcyBpZiBub3QgZm9yIGdjYy1pbmxpbmUtYXNzZW1ibHkgYWRkcmVzc2luZyBsaW1pdGF0aW9ucwogICAgIC8vICAgKHNvbWUgYXBwYXJlbnRseSByZWxhdGVkIHRvIEVMRiBmb3JtYXQsIG90aGVycyB0byBDUFUgdHlwZSkuCiAgICAgLy8KICAgICAvLyBXQVJOSU5HOiBUaGVpciBwcmVzZW5jZSBkZWZlYXRzIHRoZSB0aHJlYWQtc2FmZXR5IG9mIGxpYnBuZy4KICAgICBzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgX3BhdGVtcCAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwogICAgIHN0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICBfcGJ0ZW1wICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSk7CiAgICAgc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgIF9wY3RlbXAgIF9fYXR0cmlidXRlX18oKHVzZWQpKTsKIyAgICBkZWZpbmUgcGFfVEVNUCAgICAgICAgICAgICAgICAiX3BhdGVtcCIKIyAgICBkZWZpbmUgcGJfVEVNUCAgICAgICAgICAgICAgICAiX3BidGVtcCIgIC8vIHRlbXAgdmFyaWFibGVzIGZvcgojICAgIGRlZmluZSBwY19URU1QICAgICAgICAgICAgICAgICJfcGN0ZW1wIiAgLy8gIFBhZXRoIHJvdXRpbmUKIyAgICBkZWZpbmUgU0FWRV9yMTFfcjEyX3IxMwojICAgIGRlZmluZSBSRVNUT1JFX3IxMV9yMTJfcjEzCiMgICAgZGVmaW5lIF9DTE9CQkVSX3IxMV9yMTJfcjEzICAgLy8gbm90IHVzaW5nIHJlZ3MgPT4gbm90IGNsb2JiZXJpbmcKIyAgICBkZWZpbmUgQ0xPQkJFUl9yMTFfcjEyX3IxMwojICBlbmRpZiAvLyBQTkdfVEhSRUFEX1VOU0FGRV9PSwojICBkZWZpbmUgTE9BRF9HT1RfcmJwCiMgIGRlZmluZSBSRVNUT1JFX3JicAojZW5kaWYKCiNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiMgIGRlZmluZSBTQVZFX2VicAojICBkZWZpbmUgUkVTVE9SRV9lYnAKIyAgZGVmaW5lIF9DTE9CQkVSX2VicCAgICAgICAgICwiJWVicCIKIyAgZGVmaW5lIENMT0JCRVJfZWJwICAgICAgICAgICIlZWJwIgojICBkZWZpbmUgU0FWRV9GdWxsTGVuZ3RoICAgICAgIm1vdmwgJSVlYXgsICUlcjE1ZCAgXG5cdCIKIyAgZGVmaW5lIFJFU1RPUkVfRnVsbExlbmd0aCAgICJtb3ZsICUlcjE1ZCwgIiAgICAgLy8gbWF5IGdvIGludG8gZWF4IG9yIGVjeAojICBpZiBkZWZpbmVkKFBOR19DTE9CQkVSX3g4Nl82NF9SRUdTX1NVUFBPUlRFRCkgICAvLyB3b3JrcyBhcyBvZiBnY2MgMy40LjMgLi4uCiMgICAgZGVmaW5lIFNBVkVfcjE1CiMgICAgZGVmaW5lIFJFU1RPUkVfcjE1CiMgICAgZGVmaW5lIF9DTE9CQkVSX3IxNSAgICAgICAsIiVyMTUiCiMgIGVsc2UKIyAgICBkZWZpbmUgU0FWRV9yMTUgICAgICAgICAgICJwdXNocSAlJXIxNSAgXG5cdCIKIyAgICBkZWZpbmUgUkVTVE9SRV9yMTUgICAgICAgICJwb3BxICAlJXIxNSAgXG5cdCIKIyAgICBkZWZpbmUgX0NMT0JCRVJfcjE1CiMgIGVuZGlmCiMgIGRlZmluZSBQQlAgICAgICAgICAgICAgICAgICAiJSVyYnAiICAgICAgICAgICAgIC8vIHJlZ3MgdXNlZCBmb3IgNjQtYml0CiMgIGRlZmluZSBQQVggICAgICAgICAgICAgICAgICAiJSVyYXgiICAgICAgICAgICAgIC8vICBwb2ludGVycyBvciBpbgojICBkZWZpbmUgUEJYICAgICAgICAgICAgICAgICAgIiUlcmJ4IiAgICAgICAgICAgICAvLyAgY29tYmluYXRpb24gd2l0aAojICBkZWZpbmUgUENYICAgICAgICAgICAgICAgICAgIiUlcmN4IiAgICAgICAgICAgICAvLyAgNjQtYml0IHBvaW50ZXItcmVncwojICBkZWZpbmUgUERYICAgICAgICAgICAgICAgICAgIiUlcmR4IiAgICAgICAgICAgICAvLyAgKGJhc2UvaW5kZXggcGFpcnMsCiMgIGRlZmluZSBQU0kgICAgICAgICAgICAgICAgICAiJSVyc2kiICAgICAgICAgICAgIC8vICBhZGQvc3ViL21vdiBwYWlycykKIyAgZGVmaW5lIENMRUFSX0JPVFRPTV8zX0JJVFMgICJhbmQgICQweGZmZmZmZmZmZmZmZmZmZjgsICIKI2Vsc2UKIyAgZGVmaW5lIFNBVkVfZWJwICAgICAgICAgICAgICJwdXNobCAlJWVicCBcblx0IiAgLy8gY2xvYmJlciBsaXN0IGRvZXNuJ3Qgd29yawojICBkZWZpbmUgUkVTVE9SRV9lYnAgICAgICAgICAgInBvcGwgICUlZWJwIFxuXHQiICAvLyAgZm9yICVlYnAgb24gMzItYml0OyBub3QKIyAgZGVmaW5lIF9DTE9CQkVSX2VicCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGNsZWFyIHdoeSBub3QKIyAgZGVmaW5lIENMT0JCRVJfZWJwCiMgIGRlZmluZSBTQVZFX0Z1bGxMZW5ndGggICAgICAicHVzaGwgJSVlYXggXG5cdCIKIyAgZGVmaW5lIFJFU1RPUkVfRnVsbExlbmd0aCAgICJwb3BsICIgICAgICAgICAgICAgLy8gZWF4IChhdmcpIG9yIGVjeCAocGFldGgpCiMgIGRlZmluZSBTQVZFX3IxNQojICBkZWZpbmUgUkVTVE9SRV9yMTUKIyAgZGVmaW5lIF9DTE9CQkVSX3IxNQojICBkZWZpbmUgUEJQICAgICAgICAgICAgICAgICAgIiUlZWJwIiAgICAgICAgICAgICAvLyByZWdzIHVzZWQgZm9yIG9yIGluCiMgIGRlZmluZSBQQVggICAgICAgICAgICAgICAgICAiJSVlYXgiICAgICAgICAgICAgIC8vICBjb21iaW5hdGlvbiB3aXRoCiMgIGRlZmluZSBQQlggICAgICAgICAgICAgICAgICAiJSVlYngiICAgICAgICAgICAgIC8vICAibm9ybWFsLCIgMzItYml0CiMgIGRlZmluZSBQQ1ggICAgICAgICAgICAgICAgICAiJSVlY3giICAgICAgICAgICAgIC8vICBwb2ludGVycwojICBkZWZpbmUgUERYICAgICAgICAgICAgICAgICAgIiUlZWR4IgojICBkZWZpbmUgUFNJICAgICAgICAgICAgICAgICAgIiUlZXNpIgojICBkZWZpbmUgQ0xFQVJfQk9UVE9NXzNfQklUUyAgImFuZCAgJDB4ZmZmZmZmZjgsICIKI2VuZGlmCgovLyBDTE9CX0NPTU1BX2VieF9lYnA6ICBuZWVkIGNvbW1hIE9OTFkgaWYgYm90aCBDTE9CQkVSX2VicCBhbmQgQ0xPQkJFUl9HT1RfZWJ4Ci8vICAgICAgICAgICAgICAgICAgICAgIGhhdmUgdmFsdWVzLCBpLmUuLCBvbmx5IGlmIF9feDg2XzY0X18gQU5EICFfX1BJQ19fCiNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKF9fUElDX18pCiMgIGRlZmluZSBDTE9CX0NPTU1BX2VieF9lYnAgICAgLCAvLyBjbG9iYmVyaW5nIGJvdGggZWJwIGFuZCBlYnggPT4gbmVlZCBjb21tYQojZWxzZQojICBkZWZpbmUgQ0xPQl9DT01NQV9lYnhfZWJwCiNlbmRpZgoKLy8gQ0xPQl9DT01NQV9lYlhfcjFYOiAgbmVlZCBjb21tYSBVTkxFU1MgYm90aCBDTE9CQkVSX2VicCBhbmQgQ0xPQkJFUl9HT1RfZWJ4Ci8vICAgICAgICAgICAgICAgICAgIGFyZSBlbXB0eSBPUiBDTE9CQkVSX3IxMV9yMTJfcjEzIGlzIGVtcHR5LS1pLmUuLCBOTyBjb21tYQovLyAgICAgICAgICAgICAgICAgICBpZiAoIV9feDg2XzY0X18gQU5EIF9fUElDX18pIE9SICEoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwKLy8gICAgICAgICAgICAgICAgICAgQU5EIFBOR19DTE9CQkVSX3g4Nl82NF9SRUdTX1NVUFBPUlRFRCkgICAoZG91YmxlIHNpZ2guLi4pCiNpZiAoIWRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChfX1BJQ19fKSkgfHwgXAogICAgIWRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpIHx8IFwKICAgICFkZWZpbmVkKFBOR19DTE9CQkVSX3g4Nl82NF9SRUdTX1NVUFBPUlRFRCkKIyAgZGVmaW5lIENMT0JfQ09NTUFfZWJYX3IxWAojZWxzZQojICBkZWZpbmUgQ0xPQl9DT01NQV9lYlhfcjFYICAgICwgLy8gY2xvYmJlcmluZyAoZWJwIE9SIGVieCkgQU5EIHIxMV9yMTJfcjEzCiNlbmRpZgoKLy8gQ0xPQl9DT0xPTl9lYnhfZWJwOiAgbmVlZCBjb2xvbiB1bmxlc3MgQ0xPQkJFUl9lYnAgYW5kIENMT0JCRVJfR09UX2VieCBhcmUKLy8gICAgICAgICAgICAgICAgICAgICAgQk9USCBlbXB0eS0taS5lLiwgTk8gY29sb24gaWYgKCFfX3g4Nl82NF9fIEFORCBfX1BJQ19fKQovLyBDTE9CX0NPTE9OX2VieF9lYnBfcjFYOiAgaWYsIGluIGFkZGl0aW9uLCBDTE9CQkVSX3IxMV9yMTJfcjEzIGlzIGVtcHR5LCB0aGVuCi8vICAgICAgICAgICAgICAgICAgICAgICAgICBubyBjb2xvbiBmb3IgUGFldGggYmxvY2tzLCBlaXRoZXItLWkuZS4sIE5PIGNvbG9uCi8vICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIEFORAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpCiNpZiAoIWRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChfX1BJQ19fKSkKIyAgZGVmaW5lIENMT0JfQ09MT05fZWJ4X2VicAojICBpZiAhKGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpICYmIFwKICAgICAgICBkZWZpbmVkKFBOR19DTE9CQkVSX3g4Nl82NF9SRUdTX1NVUFBPUlRFRCkpCiMgICAgZGVmaW5lIENMT0JfQ09MT05fZWJ4X2VicF9yMVgKIyAgZWxzZQojICAgIGRlZmluZSBDTE9CX0NPTE9OX2VieF9lYnBfcjFYICA6IC8vIGNsb2JiZXJpbmcgZWJwIE9SIGVieCBPUiByMTFfcjEyX3IxMwojICBlbmRpZgojZWxzZQojICBkZWZpbmUgQ0xPQl9DT0xPTl9lYnhfZWJwICAgICAgICA6IC8vIGNsb2JiZXJpbmcgZWJwIE9SIGVieAojICBkZWZpbmUgQ0xPQl9DT0xPTl9lYnhfZWJwX3IxWCAgICA6IC8vIGNsb2JiZXJpbmcgZWJwIE9SIGVieCBPUiByMTFfcjEyX3IxMwojZW5kaWYKCiNlbmRpZiAvLyBQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XCgojaWYgZGVmaW5lZChfX1BJQ19fKSAgLy8gbWFjcm9zIHRvIHNhdmUsIHJlc3RvcmUgaW5kZXggdG8gR2xvYmFsIE9mZnNldCBUYWJsZQojICBpZiBkZWZpbmVkKF9feDg2XzY0X18pCiMgICAgZGVmaW5lIFNBVkVfR09UX2VieCAgICAgInB1c2hxICUlcmJ4IFxuXHQiCiMgICAgZGVmaW5lIFJFU1RPUkVfR09UX2VieCAgInBvcHEgICUlcmJ4IFxuXHQiCiMgIGVsc2UKIyAgICBkZWZpbmUgU0FWRV9HT1RfZWJ4ICAgICAicHVzaGwgJSVlYnggXG5cdCIKIyAgICBkZWZpbmUgUkVTVE9SRV9HT1RfZWJ4ICAicG9wbCAgJSVlYnggXG5cdCIKIyAgZW5kaWYKIyAgZGVmaW5lIF9DTE9CQkVSX0dPVF9lYnggICAvLyBleHBsaWNpdGx5IHNhdmVkLCByZXN0b3JlZCA9PiBub3QgY2xvYmJlcmVkCiMgIGRlZmluZSBDTE9CQkVSX0dPVF9lYngKI2Vsc2UKIyAgZGVmaW5lIFNBVkVfR09UX2VieAojICBkZWZpbmUgUkVTVE9SRV9HT1RfZWJ4CiMgIGRlZmluZSBfQ0xPQkJFUl9HT1RfZWJ4ICAgLCIlZWJ4IgojICBkZWZpbmUgQ0xPQkJFUl9HT1RfZWJ4ICAgICIlZWJ4IgojZW5kaWYKCiNpZiBkZWZpbmVkKFBOR19IQVZFX01NWF9DT01CSU5FX1JPVykgfHwgZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9JTlRFUkxBQ0UpCiMgIGRlZmluZSBCUFAyICAyCiMgIGRlZmluZSBCUFAzICAzICAvLyBieXRlcyBwZXIgcGl4ZWwgKGEuay5hLiBwaXhlbF9ieXRlcykKIyAgZGVmaW5lIEJQUDQgIDQgIC8vIChkZWZpbmVkIG9ubHkgdG8gaGVscCBhdm9pZCBjdXQtYW5kLXBhc3RlIGVycm9ycykKIyAgZGVmaW5lIEJQUDYgIDYKIyAgZGVmaW5lIEJQUDggIDgKI2VuZGlmCgoKCnN0YXRpYyBpbnQgX21teF9zdXBwb3J0ZWQgPSAyOyAvLyAwOiBubyBNTVg7IDE6IE1NWCBzdXBwb3J0ZWQ7IDI6IG5vdCB0ZXN0ZWQKCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICAgICBQIE4gRyBfIE0gTSBYIF8gUyBVIFAgUCBPIFIgVCAgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKLy8gR1JSIE5PVEVTOiAgKDEpIHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIDM4NiBvciBiZXR0ZXIgKHB1c2hmbC9wb3BmbCkKLy8gICAgICAgICAgICAgKDIpIGFsbCBpbnN0cnVjdGlvbnMgY29tcGlsZSB3aXRoIGdjYyAyLjcuMi4zIGFuZCBsYXRlcgovLyAgICAgICAgICAgeCAoMykgdGhlIGZ1bmN0aW9uIGlzIG1vdmVkIGRvd24gaGVyZSB0byBwcmV2ZW50IGdjYyBmcm9tCi8vICAgICAgICAgICB4ICAgICAgaW5saW5pbmcgaXQgaW4gbXVsdGlwbGUgcGxhY2VzIGFuZCB0aGVuIGJhcmZpbmcgYmUtCi8vICAgICAgICAgICB4ICAgICAgY2F1c2UgdGhlICIuTk9UX1NVUFBPUlRFRCIgbGFiZWwgaXMgbXVsdGlwbHkgZGVmaW5lZAovLyAgICAgICAgICAgICAgICAgIFtuZWVkIHRvIHJldGVzdCB3aXRoIGdjYyAyLjcuMi4zXQoKLy8gR1JSIDIwMDcwNTI0OiAgVGhpcyBkZWNsYXJhdGlvbiBhcHBhcmVudGx5IGlzIGNvbXBhdGlibGUgd2l0aCBidXQgc3VwZXJzZWRlcwovLyAgIHRoZSBvbmUgaW4gcG5nLmg7IGluIGFueSBjYXNlLCB0aGUgZ2VuZXJhdGVkIG9iamVjdCBmaWxlIGlzIHNsaWdodGx5Ci8vICAgc21hbGxlci4gIEl0IGlzIHVubmVjZXNzYXJ5IHdpdGggZ2NjIDQuMS4yLCBidXQgZ2NjIDIueCBhcHBhcmVudGx5Ci8vICAgcmVwbGljYXRlZCB0aGUgIi5OT1RfU1VQUE9SVEVEIiBsYWJlbCBpbiBlYWNoIGxvY2F0aW9uIHRoZSBmdW5jdGlvbiB3YXMKLy8gICBpbmxpbmVkLCBsZWFkaW5nIHRvIGNvbXBpbGF0aW9uIGVycm9ycyBkdWUgdG8gdGhlICJtdWx0aXBseSBkZWZpbmVkIgovLyAgIGxhYmVsLiAgT2xkIHdvcmthcm91bmQgd2FzIHRvIGxlYXZlIHRoZSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIHRoaXMKLy8gICBmaWxlOyBuZXcgb25lIChzdGlsbCB0ZXN0aW5nKSBpcyB0byB1c2UgYSBnY2Mtc3BlY2lmaWMgZnVuY3Rpb24gYXR0cmlidXRlCi8vICAgdG8gcHJldmVudCBsb2NhbCBpbmxpbmluZy4KaW50IFBOR0FQSQpwbmdfbW14X3N1cHBvcnQodm9pZCkgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKTsKCmludCBQTkdBUEkKcG5nX21teF9zdXBwb3J0KHZvaWQpCnsKI2lmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkgIC8vIHN1cGVyZmx1b3VzLCBidXQgd2hhdCB0aGUgaGVjawogICAgaW50IHJlc3VsdDsKICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKI2lmIGRlZmluZWQoX194ODZfNjRfXykKICAgICAgICAicHVzaHEgJSVyYnggICAgICAgICAgXG5cdCIgIC8vIHJieCBnZXRzIGNsb2JiZXJlZCBieSBDUFVJRCBpbnN0cnVjdGlvbgogICAgICAgICJwdXNocSAlJXJjeCAgICAgICAgICBcblx0IiAgLy8gc28gZG9lcyByY3guLi4KICAgICAgICAicHVzaHEgJSVyZHggICAgICAgICAgXG5cdCIgIC8vIC4uLmFuZCByZHggKGJ1dCByY3ggJiByZHggc2FmZSBvbiBMaW51eCkKICAgICAgICAicHVzaGZxICAgICAgICAgICAgICAgXG5cdCIgIC8vIHNhdmUgRWZsYWcgdG8gc3RhY2sKICAgICAgICAicG9wcSAlJXJheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrIGludG8gcmF4CiAgICAgICAgIm1vdnEgJSVyYXgsICUlcmN4ICAgIFxuXHQiICAvLyBtYWtlIGFub3RoZXIgY29weSBvZiBFZmxhZyBpbiByY3gKICAgICAgICAieG9ybCAkMHgyMDAwMDAsICUlZWF4IFxuXHQiIC8vIHRvZ2dsZSBJRCBiaXQgaW4gRWZsYWcgKGkuZS4sIGJpdCAyMSkKICAgICAgICAicHVzaHEgJSVyYXggICAgICAgICAgXG5cdCIgIC8vIHNhdmUgbW9kaWZpZWQgRWZsYWcgYmFjayB0byBzdGFjawogICAgICAgICJwb3BmcSAgICAgICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBtb2RpZmllZCB2YWx1ZSB0byBFZmxhZyByZWcKICAgICAgICAicHVzaGZxICAgICAgICAgICAgICAgXG5cdCIgIC8vIHNhdmUgRWZsYWcgdG8gc3RhY2sKICAgICAgICAicG9wcSAlJXJheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrCiAgICAgICAgInB1c2hxICUlcmN4ICAgICAgICAgIFxuXHQiICAvLyBzYXZlIG9yaWdpbmFsIEVmbGFnIHRvIHN0YWNrCiAgICAgICAgInBvcGZxICAgICAgICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIG9yaWdpbmFsIEVmbGFnCiNlbHNlCiAgICAgICAgInB1c2hsICUlZWJ4ICAgICAgICAgIFxuXHQiICAvLyBlYnggZ2V0cyBjbG9iYmVyZWQgYnkgQ1BVSUQgaW5zdHJ1Y3Rpb24KICAgICAgICAicHVzaGwgJSVlY3ggICAgICAgICAgXG5cdCIgIC8vIHNvIGRvZXMgZWN4Li4uCiAgICAgICAgInB1c2hsICUlZWR4ICAgICAgICAgIFxuXHQiICAvLyAuLi5hbmQgZWR4IChidXQgZWN4ICYgZWR4IHNhZmUgb24gTGludXgpCiAgICAgICAgInB1c2hmbCAgICAgICAgICAgICAgIFxuXHQiICAvLyBzYXZlIEVmbGFnIHRvIHN0YWNrCiAgICAgICAgInBvcGwgJSVlYXggICAgICAgICAgIFxuXHQiICAvLyBnZXQgRWZsYWcgZnJvbSBzdGFjayBpbnRvIGVheAogICAgICAgICJtb3ZsICUlZWF4LCAlJWVjeCAgICBcblx0IiAgLy8gbWFrZSBhbm90aGVyIGNvcHkgb2YgRWZsYWcgaW4gZWN4CiAgICAgICAgInhvcmwgJDB4MjAwMDAwLCAlJWVheCBcblx0IiAvLyB0b2dnbGUgSUQgYml0IGluIEVmbGFnIChpLmUuLCBiaXQgMjEpCiAgICAgICAgInB1c2hsICUlZWF4ICAgICAgICAgIFxuXHQiICAvLyBzYXZlIG1vZGlmaWVkIEVmbGFnIGJhY2sgdG8gc3RhY2sKICAgICAgICAicG9wZmwgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgbW9kaWZpZWQgdmFsdWUgdG8gRWZsYWcgcmVnCiAgICAgICAgInB1c2hmbCAgICAgICAgICAgICAgIFxuXHQiICAvLyBzYXZlIEVmbGFnIHRvIHN0YWNrCiAgICAgICAgInBvcGwgJSVlYXggICAgICAgICAgIFxuXHQiICAvLyBnZXQgRWZsYWcgZnJvbSBzdGFjawogICAgICAgICJwdXNobCAlJWVjeCAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBvcmlnaW5hbCBFZmxhZyB0byBzdGFjawogICAgICAgICJwb3BmbCAgICAgICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBvcmlnaW5hbCBFZmxhZwojZW5kaWYKICAgICAgICAieG9ybCAlJWVjeCwgJSVlYXggICAgXG5cdCIgIC8vIGNvbXBhcmUgbmV3IEVmbGFnIHdpdGggb3JpZ2luYWwgRWZsYWcKICAgICAgICAianogMGYgICAgICAgICAgICAgICAgXG5cdCIgIC8vIGlmIHNhbWUsIENQVUlEIGluc3RyLiBpcyBub3Qgc3VwcG9ydGVkCgogICAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICBcblx0IiAgLy8gc2V0IGVheCB0byB6ZXJvCi8vICAgICAgIi5ieXRlICAweDBmLCAweGEyICAgIFxuXHQiICAvLyBDUFVJRCBpbnN0cnVjdGlvbiAodHdvLWJ5dGUgb3Bjb2RlKQogICAgICAgICJjcHVpZCAgICAgICAgICAgICAgICBcblx0IiAgLy8gZ2V0IHRoZSBDUFUgaWRlbnRpZmljYXRpb24gaW5mbwogICAgICAgICJjbXBsICQxLCAlJWVheCAgICAgICBcblx0IiAgLy8gbWFrZSBzdXJlIGVheCByZXR1cm4gbm9uLXplcm8gdmFsdWUKICAgICAgICAiamwgMGYgICAgICAgICAgICAgICAgXG5cdCIgIC8vIGlmIGVheCBpcyB6ZXJvLCBNTVggaXMgbm90IHN1cHBvcnRlZAoKICAgICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgXG5cdCIgIC8vIHNldCBlYXggdG8gemVybyBhbmQuLi4KICAgICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgXG5cdCIgIC8vIC4uLmluY3JlbWVudCBlYXggdG8gMS4gIFRoaXMgcGFpciBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmFzdGVyIHRoYW4gdGhlIGluc3RydWN0aW9uICJtb3YgZWF4LCAxIgogICAgICAgICJjcHVpZCAgICAgICAgICAgICAgICBcblx0IiAgLy8gZ2V0IHRoZSBDUFUgaWRlbnRpZmljYXRpb24gaW5mbyBhZ2FpbgogICAgICAgICJhbmRsICQweDgwMDAwMCwgJSVlZHggXG5cdCIgLy8gbWFzayBvdXQgYWxsIGJpdHMgYnV0IE1NWCBiaXQgKDIzKQogICAgICAgICJjbXBsICQwLCAlJWVkeCAgICAgICBcblx0IiAgLy8gMCA9IE1NWCBub3Qgc3VwcG9ydGVkCiAgICAgICAgImp6IDBmICAgICAgICAgICAgICAgIFxuXHQiICAvLyBub24temVybyA9IHllcywgTU1YIElTIHN1cHBvcnRlZAoKICAgICAgICAibW92bCAkMSwgJSVlYXggICAgICAgXG5cdCIgIC8vIHNldCByZXR1cm4gdmFsdWUgdG8gMQogICAgICAgICJqbXAgIDFmICAgICAgICAgICAgICBcblx0IiAgLy8gRE9ORTogIGhhdmUgTU1YIHN1cHBvcnQKCiAgICAiMDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAvLyAuTk9UX1NVUFBPUlRFRDogdGFyZ2V0IGxhYmVsIGZvciBqdW1wIGluc3RydWN0aW9ucwogICAgICAgICJtb3ZsICQwLCAlJWVheCAgICAgICBcblx0IiAgLy8gc2V0IHJldHVybiB2YWx1ZSB0byAwCiAgICAiMTogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAvLyAuUkVUVVJOOiB0YXJnZXQgbGFiZWwgZm9yIGp1bXAgaW5zdHJ1Y3Rpb25zCiNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiAgICAgICAgInBvcHEgJSVyZHggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIHJkeAogICAgICAgICJwb3BxICUlcmN4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSByY3gKICAgICAgICAicG9wcSAlJXJieCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgcmJ4CiNlbHNlCiAgICAgICAgInBvcGwgJSVlZHggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIGVkeAogICAgICAgICJwb3BsICUlZWN4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBlY3gKICAgICAgICAicG9wbCAlJWVieCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgZWJ4CiNlbmRpZgoKLy8gICAgICAicmV0ICAgICAgICAgICAgICAgICAgXG5cdCIgIC8vIERPTkU6ICBubyBNTVggc3VwcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGZhbGwgdGhyb3VnaCB0byBzdGFuZGFyZCBDICJyZXQiKQoKICAgICAgICA6ICI9YSIgKHJlc3VsdCkgICAgICAgICAgICAgIC8vIG91dHB1dCBsaXN0CgogICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IHZhcmlhYmxlcyB1c2VkIG9uIGlucHV0IChub25lKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNsb2JiZXIgbGlzdAovLyAgICAgICwgIiVlYngiLCAiJWVjeCIsICIlZWR4IiAgICAgLy8gR1JSOiAgd2UgaGFuZGxlIHRoZXNlIG1hbnVhbGx5Ci8vICAgICAgLCAibWVtb3J5IiAgIC8vIGlmIHdyaXRlIHRvIGEgdmFyaWFibGUgZ2NjIHRob3VnaHQgd2FzIGluIGEgcmVnCi8vICAgICAgLCAiY2MiICAgICAgIC8vICJjb25kaXRpb24gY29kZXMiIChmbGFnIGJpdHMpCiAgICApOwogICAgX21teF9zdXBwb3J0ZWQgPSByZXN1bHQ7CiNlbHNlCiAgICBfbW14X3N1cHBvcnRlZCA9IDA7CiNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCgogICAgcmV0dXJuIF9tbXhfc3VwcG9ydGVkOwp9CgoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICAgICAgICBQIE4gRyBfIEMgTyBNIEIgSSBOIEUgXyBSIE8gVyAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgojaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfQ09NQklORV9ST1cpCgovKiBDb21iaW5lcyB0aGUgcm93IHJlY2VudGx5IHJlYWQgaW4gd2l0aCB0aGUgcHJldmlvdXMgcm93LgogICBUaGlzIHJvdXRpbmUgdGFrZXMgY2FyZSBvZiBhbHBoYSBhbmQgdHJhbnNwYXJlbmN5IGlmIHJlcXVlc3RlZC4KICAgVGhpcyByb3V0aW5lIGFsc28gaGFuZGxlcyB0aGUgdHdvIG1ldGhvZHMgb2YgcHJvZ3Jlc3NpdmUgZGlzcGxheQogICBvZiBpbnRlcmxhY2VkIGltYWdlcywgZGVwZW5kaW5nIG9uIHRoZSBtYXNrIHZhbHVlLgogICBUaGUgbWFzayB2YWx1ZSBkZXNjcmliZXMgd2hpY2ggcGl4ZWxzIGFyZSB0byBiZSBjb21iaW5lZCB3aXRoCiAgIHRoZSByb3cuICBUaGUgcGF0dGVybiBhbHdheXMgcmVwZWF0cyBldmVyeSA4IHBpeGVscywgc28ganVzdCA4CiAgIGJpdHMgYXJlIG5lZWRlZC4gIEEgb25lIGluZGljYXRlcyB0aGUgcGl4ZWwgaXMgdG8gYmUgY29tYmluZWQ7IGEKICAgemVybyBpbmRpY2F0ZXMgdGhlIHBpeGVsIGlzIHRvIGJlIHNraXBwZWQuICBUaGlzIGlzIGluIGFkZGl0aW9uCiAgIHRvIGFueSBhbHBoYSBvciB0cmFuc3BhcmVuY3kgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwaXhlbC4KICAgSWYgeW91IHdhbnQgYWxsIHBpeGVscyB0byBiZSBjb21iaW5lZCwgcGFzcyAweGZmICgyNTUpIGluIG1hc2suICovCgovKiBVc2UgdGhpcyByb3V0aW5lIGZvciB0aGUgeDg2IHBsYXRmb3JtIC0gaXQgdXNlcyBhIGZhc3RlciBNTVggcm91dGluZQogICBpZiB0aGUgbWFjaGluZSBzdXBwb3J0cyBNTVguICovCgp2b2lkIC8qIFBSSVZBVEUgKi8KcG5nX2NvbWJpbmVfcm93KHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19ieXRlcCByb3csIGludCBtYXNrKQp7CiAgIGludCBkdW1teV92YWx1ZV9hOyAgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJyBlcnJvcgogICBpbnQgZHVtbXlfdmFsdWVfYzsKICAgaW50IGR1bW15X3ZhbHVlX2Q7CiAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9TOwogICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfRDsKCiAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2NvbWJpbmVfcm93IChwbmdnY2NyZC5jKVxuIik7CgogICBpZiAoX21teF9zdXBwb3J0ZWQgPT0gMikgewojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiYXNtX2ZsYWdzIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7CiNlbmRpZgogICAgICAgcG5nX21teF9zdXBwb3J0KCk7CiAgIH0KCiAgIGlmIChtYXNrID09IDB4ZmYpCiAgIHsKICAgICAgcG5nX2RlYnVnKDIsIm1hc2sgPT0gMHhmZjogIGRvaW5nIHNpbmdsZSBwbmdfbWVtY3B5KClcbiIpOwogICAgICBwbmdfbWVtY3B5KHJvdywgcG5nX3B0ci0+cm93X2J1ZiArIDEsCiAgICAgICAocG5nX3NpemVfdClQTkdfUk9XQllURVMocG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGgscG5nX3B0ci0+d2lkdGgpKTsKICAgfQogICBlbHNlICAgLyogKHBuZ19jb21iaW5lX3JvdygpIGlzIG5ldmVyIGNhbGxlZCB3aXRoIG1hc2sgPT0gMCkgKi8KICAgewogICAgICBzd2l0Y2ggKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoKQogICAgICB7CiAgICAgICAgIGNhc2UgMjQ6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCiNlbHNlCiAgICAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwogICAgICAgICAgICAgICBpbnQgZGlmZjsKCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7CiAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmIH43OyAgICAgICAgICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAogICAgICAgICAgICAgICBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7ICAgLy8gYW1vdW50IGxvc3QKCiAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgPT4gdW5tYXNrCiAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgJSVlZHgsICUlbW03ICAgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKICAgICAgICAgICAgICAgICAgInBzdWJiICAgICAlJW1tNiwgJSVtbTYgICAgIFxuXHQiIC8vIHplcm8gbW02CiAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tNywgJSVtbTcgICAgIFxuXHQiIC8vIGZpbGwgcmVnIHdpdGggOCBtYXNrcwoKICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMjRfMCAiLCAlJW1tMCBcblx0IiAvLyBfbWFzazI0XzAgLT4gbW0wCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMjRfMSAiLCAlJW1tMSBcblx0IiAvLyBfbWFzazI0XzEgLT4gbW0xCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMjRfMiAiLCAlJW1tMiBcblx0IiAvLyBfbWFzazI0XzIgLT4gbW0yCiAgICAgICAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTEgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0yICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0xICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMiAgICAgXG5cdCIKCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgc3JjcHRyLCAlMyAgICAgICBcblx0IiAvLyBsb2FkIHNvdXJjZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRzdHB0ciwgJTQgICAgICAgXG5cdCIgLy8gbG9hZCBkZXN0CgogICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBtYWlubG9vcDI0ZW5kICAgIFxuXHQiCgogICAgICAgICAgICAgICAgIm1haW5sb29wMjQ6ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJTMpLCAlJW1tNCAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTAsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0wLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJTQpLCAlJW1tNyAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTcsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgKCU0KSAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTMpLCAlJW1tNSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMSwgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTEsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTQpLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNiwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTcsICUlbW01ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW01LCA4KCU0KSAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMTYoJTMpLCAlJW1tNiAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0yLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMiwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMTYoJTQpLCAlJW1tNyAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW03LCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNCwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTYsIDE2KCU0KSAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMjQsICUzICAgICAgICAgIFxuXHQiIC8vIGluYyBieSAyNCBieXRlcyBwcm9jZXNzZWQKICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMjQsICU0ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCgogICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wMjQgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3AyNGVuZDogICAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQogICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kMjQgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAkMjQsICUlZWR4ICAgICAgIFxuXHQiIC8vIG1ha2UgbG93IGJ5dGUsIGhpZ2ggYnl0ZQoKICAgICAgICAgICAgICAgICJzZWNvbmRsb29wMjQ6ICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGhpZ2ggYml0IHRvIENGCiAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDI0ICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKICAgICAgICAgICAgICAgICAgIm1vdncgICAgICAoJTMpLCAlJWF4ICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgJSVheCwgKCU0KSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAieG9ybCAgICAgICUlZWF4LCAlJWVheCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdmIgICAgICAyKCUzKSwgJSVhbCAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZiICAgICAgJSVhbCwgMiglNCkgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJza2lwMjQ6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDMsICUzICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQzLCAlNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqbnogICAgICAgc2Vjb25kbG9vcDI0ICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJlbmQyNDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAogICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICA6ICIwIiAoZGlmZiksICAgICAgICAvLyBlYXggICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICIxIiAobWFzayksICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAgICAgICAiMiIgKGxlbiksICAgICAgICAgLy8gZWN4Ci8vIHdhcyAodW5tYXNrKSAgICAgImIiICAgIFJFU0VSVkVEICAgIC8vIGVieCAgICAgICAvLyBHbG9iYWwgT2Zmc2V0IFRhYmxlIGlkeAogICAgICAgICAgICAgICAgICAgICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIC8qIG5vdCBfbW14X3N1cHBvcnRlZCAtIHVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KICAgICAgICAgICAgewogICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOwogICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDMgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFAzICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBCUFAzICogcG5nX3Bhc3Nfd2lkdGhbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLwogICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwogICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLwogICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBCUFAzICogbGVuOyAgIC8qIEdSUiBidWdmaXggKi8KCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwoKICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDM7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQogICAgICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9ICAgICAgIC8qIGVuZCAyNCBicHAgKi8KCiAgICAgICAgIC8vIGZvcm1lcmx5IGNsYWltZWQgdG8gYmUgbW9zdCBjb21tb24gY2FzZSAoY29tYmluaW5nIDMyLWJpdCBSR0JBKSwKICAgICAgICAgLy8gYnV0IGFsbW9zdCBjZXJ0YWlubHkgbGVzcyBjb21tb24gdGhhbiAyNC1iaXQgUkdCIGNhc2UKICAgICAgICAgY2FzZSAzMjogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwoKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgICAgaWYgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKI2Vsc2UKICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgICAgewogICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47CiAgICAgICAgICAgICAgIGludCBkaWZmOwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKICAgICAgICAgICAgICAgbGVuICA9IHBuZ19wdHItPndpZHRoICYgfjc7ICAgICAgICAgIC8vIHJlZHVjZSB0byBtdWx0aXBsZSBvZiA4CiAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAoKICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayA9PiB1bm1hc2sKICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIHVubWFzayA9PiBtYXNrIGZvciBsYXRlcgogICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCgogICAgICAgICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0szMl8wICIsICUlbW0wIFxuXHQiIC8vIF9tYXNrMzJfMAogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzMyXzEgIiwgJSVtbTEgXG5cdCIgLy8gX21hc2szMl8xCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMzJfMiAiLCAlJW1tMiBcblx0IiAvLyBfbWFzazMyXzIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0szMl8zICIsICUlbW0zIFxuXHQiIC8vIF9tYXNrMzJfMwogICAgICAgICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0xICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTMgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTEgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0yICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMyAgICAgXG5cdCIKCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgc3JjcHRyLCAlMyAgICAgICBcblx0IiAvLyBsb2FkIHNvdXJjZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRzdHB0ciwgJTQgICAgICAgXG5cdCIgLy8gbG9hZCBkZXN0CgogICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIgLy8gbGNyCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgbWFpbmxvb3AzMmVuZCAgICBcblx0IgoKICAgICAgICAgICAgICAgICJtYWlubG9vcDMyOiAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUzKSwgJSVtbTQgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0wLCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMCwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCU0KSwgJSVtbTcgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNiwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTQsICglNCkgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCUzKSwgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTEsICUlbW01ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0xLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCU0KSwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNSwgOCglNCkgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDE2KCUzKSwgJSVtbTYgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMiwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTIsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDE2KCU0KSwgJSVtbTcgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNywgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTQsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCAxNiglNCkgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMjQoJTMpLCAlJW1tNyAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0zLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMywgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMjQoJTQpLCAlJW1tNCAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW00LCAlJW1tNSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNSwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTcsIDI0KCU0KSAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMzIsICUzICAgICAgICAgIFxuXHQiIC8vIGluYyBieSAzMiBieXRlcyBwcm9jZXNzZWQKICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMzIsICU0ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICJqYSAgICAgICAgbWFpbmxvb3AzMiAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJtYWlubG9vcDMyZW5kOiAgICAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZGlmZiwgJSVlY3ggICAgICBcblx0IiAvLyAoZGlmZiBpcyBpbiBlYXgpCiAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgJSVlYXgsICUlZWN4ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBlbmQzMiAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbWFzaywgJSVlZHggICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic2FsbCAgICAgICQyNCwgJSVlZHggICAgICAgXG5cdCIgLy8gbG93IGJ5dGUgPT4gaGlnaCBieXRlCgogICAgICAgICAgICAgICAgInNlY29uZGxvb3AzMjogICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgaGlnaCBiaXQgdG8gQ0YKICAgICAgICAgICAgICAgICAgImpuYyAgICAgICBza2lwMzIgICAgICAgICAgIFxuXHQiIC8vIGlmIENGID0gMAogICAgICAgICAgICAgICAgICAibW92bCAgICAgICglMyksICUlZWF4ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgKCU0KSAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgInNraXAzMjogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkNCwgJTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDQsICU0ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiZGVjbCAgICAgICUlZWN4ICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wMzIgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgImVuZDMyOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksCiAgICAgICAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgIDogIjAiIChkaWZmKSwgICAgICAgIC8vIGVheCAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgIjEiIChtYXNrKSwgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICAgICAgICIyIiAobGVuKSwgICAgICAgICAvLyBlY3gKLy8gd2FzICh1bm1hc2spICAgICAiYiIgICAgUkVTRVJWRUQgICAgLy8gZWJ4ICAgICAgIC8vIEdsb2JhbCBPZmZzZXQgVGFibGUgaWR4CiAgICAgICAgICAgICAgICAgICAgIjMiIChzcmNwdHIpLCAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAiNCIgKGRzdHB0cikgICAgICAgLy8gZWRpL3JkaQoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgLyogbm90IF9tbXhfc3VwcG9ydGVkIC0gdXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gQlBQNCAqIHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDQgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDQgKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8qIHJlZHVjZSB0byBtdWx0LiBvZiA4ICovCiAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDQgKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7CgogICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQNDsKICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKF9tbXhfc3VwcG9ydGVkKSAqLwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAgICAgLyogZW5kIDMyIGJwcCAqLwoKICAgICAgICAgY2FzZSA4OiAgICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwoKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgICAgaWYgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKI2Vsc2UKICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgICAgewogICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47CiAgICAgICAgICAgICAgIGludCBkaWZmOwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKICAgICAgICAgICAgICAgbGVuICA9IHBuZ19wdHItPndpZHRoICYgfjc7ICAgICAgICAgIC8vIHJlZHVjZSB0byBtdWx0aXBsZSBvZiA4CiAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAoKICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayA9PiB1bm1hc2sKICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIHVubWFzayA9PiBtYXNrIGZvciBsYXRlcgogICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCgogICAgICAgICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s4XzAgIiwgJSVtbTAgIFxuXHQiIC8vIF9tYXNrOF8wIC0+IG1tMAogICAgICAgICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTAgICAgIFxuXHQiIC8vIG5vbnplcm8gaWYga2VlcCBieXRlCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0wICAgICBcblx0IiAvLyB6ZXJvcy0+MXMsIHYgdmVyc2EKCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgc3JjcHRyLCAlMyAgICAgICBcblx0IiAvLyBsb2FkIHNvdXJjZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRzdHB0ciwgJTQgICAgICAgXG5cdCIgLy8gbG9hZCBkZXN0CgogICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIgLy8gbGVuID09IDAgPwogICAgICAgICAgICAgICAgICAiamUgICAgICAgIG1haW5sb29wOGVuZCAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3A4OiAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICglMyksICUlbW00ICAgICAgXG5cdCIgLy8gKnNyY3B0cgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0wLCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMCwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgKCU0KSwgJSVtbTYgICAgICBcblx0IiAvLyAqZHN0cHRyCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW00LCAoJTQpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkOCwgJTMgICAgICAgICAgIFxuXHQiIC8vIGluYyBieSA4IGJ5dGVzIHByb2Nlc3NlZAogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ4LCAlNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInN1YmwgICAgICAkOCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGRlYyBieSA4IHBpeGVscyBwcm9jZXNzZWQKICAgICAgICAgICAgICAgICAgImphICAgICAgICBtYWlubG9vcDggICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgIm1haW5sb29wOGVuZDogICAgICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkaWZmLCAlJWVjeCAgICAgIFxuXHQiIC8vIChkaWZmIGlzIGluIGVheCkKICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgJSVlY3ggICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAianogICAgICAgIGVuZDggICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBtYXNrLCAlJWVkeCAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJDI0LCAlJWVkeCAgICAgICBcblx0IiAvLyBtYWtlIGxvdyBieXRlLCBoaWdoIGJ5dGUKCiAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDg6ICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic2FsbCAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBoaWdoIGJpdCB0byBDRgogICAgICAgICAgICAgICAgICAiam5jICAgICAgIHNraXA4ICAgICAgICAgICAgXG5cdCIgLy8gaWYgQ0YgPSAwCiAgICAgICAgICAgICAgICAgICJtb3ZiICAgICAgKCUzKSwgJSVhbCAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92YiAgICAgICUlYWwsICglNCkgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAic2tpcDg6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiaW5jICAgICAgICUzICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImluYyAgICAgICAlNCAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJkZWNsICAgICAgJSVlY3ggICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiam56ICAgICAgIHNlY29uZGxvb3A4ICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAiZW5kODogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwKICAgICAgICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgOiAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4ICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAiMSIgKG1hc2spLCAgICAgICAgLy8gZWR4CiAgICAgICAgICAgICAgICAgICAgIjIiIChsZW4pLCAgICAgICAgIC8vIGVjeAovLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKICAgICAgICAgICAgICAgICAgICAiMyIgKHNyY3B0ciksICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICI0IiAoZHN0cHRyKSAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tNCIsICIlbW02IiwgIiVtbTciICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSAvKiBub3QgX21teF9zdXBwb3J0ZWQgLSB1c2UgbW9kaWZpZWQgQyByb3V0aW5lICovCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsgKi8KICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLyogcmVkdWNlIHRvIG11bHQuIG9mIDggKi8KICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gbGVuOyAgLyogR1JSIGJ1Z2ZpeCAqLwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7CgogICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYgLyogKkJQUDEgKi8gOwogICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKF9tbXhfc3VwcG9ydGVkKSAqLwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAgICAgLyogZW5kIDggYnBwICovCgogICAgICAgICBjYXNlIDE6ICAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcDsKICAgICAgICAgICAgcG5nX2J5dGVwIGRwOwogICAgICAgICAgICBpbnQgc19pbmMsIHNfc3RhcnQsIHNfZW5kOwogICAgICAgICAgICBpbnQgbTsKICAgICAgICAgICAgaW50IHNoaWZ0OwogICAgICAgICAgICBwbmdfdWludF8zMiBpOwoKICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKICAgICAgICAgICAgZHAgPSByb3c7CiAgICAgICAgICAgIG0gPSAweDgwOwojaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCiAgICAgICAgICAgIGlmIChwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc19zdGFydCA9IDA7CiAgICAgICAgICAgICAgIHNfZW5kID0gNzsKICAgICAgICAgICAgICAgc19pbmMgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc19zdGFydCA9IDc7CiAgICAgICAgICAgICAgIHNfZW5kID0gMDsKICAgICAgICAgICAgICAgc19pbmMgPSAtMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwoKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBuZ19wdHItPndpZHRoOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYgKG0gJiBtYXNrKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGludCB2YWx1ZTsKCiAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweDE7CiAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweDdmN2YgPj4gKDcgLSBzaGlmdCkpICYgMHhmZik7CiAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHZhbHVlIDw8IHNoaWZ0KTsKICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgaWYgKHNoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKICAgICAgICAgICAgICAgICAgc3ArKzsKICAgICAgICAgICAgICAgICAgZHArKzsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IHNfaW5jOwoKICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAvKiBlbmQgMSBicHAgKi8KCiAgICAgICAgIGNhc2UgMjogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNwOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHA7CiAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7CiAgICAgICAgICAgIGludCBtOwogICAgICAgICAgICBpbnQgc2hpZnQ7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIGludCB2YWx1ZTsKCiAgICAgICAgICAgIHNwID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgIGRwID0gcm93OwogICAgICAgICAgICBtID0gMHg4MDsKI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQogICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwogICAgICAgICAgICAgICBzX2VuZCA9IDY7CiAgICAgICAgICAgICAgIHNfaW5jID0gMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSA2OwogICAgICAgICAgICAgICBzX2VuZCA9IDA7CiAgICAgICAgICAgICAgIHNfaW5jID0gLTI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwbmdfcHRyLT53aWR0aDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqc3AgPj4gc2hpZnQpICYgMHgzOwogICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHgzZjNmID4+ICg2IC0gc2hpZnQpKSAmIDB4ZmYpOwogICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7CiAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgIHNwKys7CiAgICAgICAgICAgICAgICAgIGRwKys7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBzaGlmdCArPSBzX2luYzsKICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAvKiBlbmQgMiBicHAgKi8KCiAgICAgICAgIGNhc2UgNDogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNwOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHA7CiAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7CiAgICAgICAgICAgIGludCBtOwogICAgICAgICAgICBpbnQgc2hpZnQ7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIGludCB2YWx1ZTsKCiAgICAgICAgICAgIHNwID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgIGRwID0gcm93OwogICAgICAgICAgICBtID0gMHg4MDsKI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQogICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwogICAgICAgICAgICAgICBzX2VuZCA9IDQ7CiAgICAgICAgICAgICAgIHNfaW5jID0gNDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSA0OwogICAgICAgICAgICAgICBzX2VuZCA9IDA7CiAgICAgICAgICAgICAgIHNfaW5jID0gLTQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwbmdfcHRyLT53aWR0aDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqc3AgPj4gc2hpZnQpICYgMHhmOwogICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHhmMGYgPj4gKDQgLSBzaGlmdCkpICYgMHhmZik7CiAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHZhbHVlIDw8IHNoaWZ0KTsKICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgaWYgKHNoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKICAgICAgICAgICAgICAgICAgc3ArKzsKICAgICAgICAgICAgICAgICAgZHArKzsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IHNfaW5jOwogICAgICAgICAgICAgICBpZiAobSA9PSAxKQogICAgICAgICAgICAgICAgICBtID0gMHg4MDsKICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBtID4+PSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9ICAgICAgIC8qIGVuZCA0IGJwcCAqLwoKICAgICAgICAgY2FzZSAxNjogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwoKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgICAgaWYgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKI2Vsc2UKICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgICAgewogICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47CiAgICAgICAgICAgICAgIGludCBkaWZmOwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKICAgICAgICAgICAgICAgbGVuICA9IHBuZ19wdHItPndpZHRoICYgfjc7ICAgICAgICAgIC8vIHJlZHVjZSB0byBtdWx0aXBsZSBvZiA4CiAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAoKICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayA9PiB1bm1hc2sKICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIHVubWFzayA9PiBtYXNrIGZvciBsYXRlcgogICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCgogICAgICAgICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0sxNl8wICIsICUlbW0wIFxuXHQiIC8vIF9tYXNrMTZfMCAtPiBtbTAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0sxNl8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrMTZfMSAtPiBtbTEKICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMSAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMSAgICAgXG5cdCIKCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgc3JjcHRyLCAlMyAgICAgICBcblx0IiAvLyBsb2FkIHNvdXJjZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRzdHB0ciwgJTQgICAgICAgXG5cdCIgLy8gbG9hZCBkZXN0CgogICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBtYWlubG9vcDE2ZW5kICAgIFxuXHQiCgogICAgICAgICAgICAgICAgIm1haW5sb29wMTY6ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJTMpLCAlJW1tNCAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTAsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0wLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJTQpLCAlJW1tNyAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTcsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgKCU0KSAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTMpLCAlJW1tNSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMSwgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTEsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTQpLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNiwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTcsICUlbW01ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW01LCA4KCU0KSAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDE2LCAlMyAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgMTYgYnl0ZXMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDE2LCAlNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic3VibCAgICAgICQ4LCAlJWVjeCAgICAgICAgXG5cdCIgLy8gZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAogICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wMTYgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3AxNmVuZDogICAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQogICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kMTYgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAkMjQsICUlZWR4ICAgICAgIFxuXHQiIC8vIG1ha2UgbG93IGJ5dGUsIGhpZ2ggYnl0ZQoKICAgICAgICAgICAgICAgICJzZWNvbmRsb29wMTY6ICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGhpZ2ggYml0IHRvIENGCiAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDE2ICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKICAgICAgICAgICAgICAgICAgIm1vdncgICAgICAoJTMpLCAlJWF4ICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgJSVheCwgKCU0KSAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJza2lwMTY6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDIsICUzICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQyLCAlNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqbnogICAgICAgc2Vjb25kbG9vcDE2ICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJlbmQxNjogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAogICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICA6ICIwIiAoZGlmZiksICAgICAgICAvLyBlYXggICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICIxIiAobWFzayksICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAgICAgICAiMiIgKGxlbiksICAgICAgICAgLy8gZWN4Ci8vIHdhcyAodW5tYXNrKSAgICAgImIiICAgIFJFU0VSVkVEICAgIC8vIGVieCAgICAgICAvLyBHbG9iYWwgT2Zmc2V0IFRhYmxlIGlkeAogICAgICAgICAgICAgICAgICAgICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTQiICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSAvKiBub3QgX21teF9zdXBwb3J0ZWQgLSB1c2UgbW9kaWZpZWQgQyByb3V0aW5lICovCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFAyICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwogICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gQlBQMiAqIHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLwogICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQMiAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsgKi8KICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLyogcmVkdWNlIHRvIG11bHQuIG9mIDggKi8KICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQMiAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCgogICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOwogICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKCiAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZipCUFAyOwogICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCgogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAvKiBlbmQgMTYgYnBwICovCgogICAgICAgICBjYXNlIDQ4OiAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CiAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7CgojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICBpZiAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQojZWxzZQogICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKICAgICAgICAgICAgICAgaW50IGRpZmY7CgogICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OwogICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJiB+NzsgICAgICAgICAgLy8gcmVkdWNlIHRvIG11bHRpcGxlIG9mIDgKICAgICAgICAgICAgICAgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAgIC8vIGFtb3VudCBsb3N0CgogICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtYXNrID0+IHVubWFzawogICAgICAgICAgICAgICAgICAibW92ZCAgICAgICUlZWR4LCAlJW1tNyAgICAgXG5cdCIgLy8gbG9hZCBiaXQgcGF0dGVybgogICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gdW5tYXNrID0+IG1hc2sgZm9yIGxhdGVyCiAgICAgICAgICAgICAgICAgICJwc3ViYiAgICAgJSVtbTYsICUlbW02ICAgICBcblx0IiAvLyB6ZXJvIG1tNgogICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tNywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTcsICUlbW03ICAgICBcblx0IiAvLyBmaWxsIHJlZyB3aXRoIDggbWFza3MKCiAgICAgICAgICAgICAgICAgIExPQURfR09UX3JicAogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzQ4XzAgIiwgJSVtbTAgXG5cdCIgLy8gX21hc2s0OF8wIC0+IG1tMAogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzQ4XzEgIiwgJSVtbTEgXG5cdCIgLy8gX21hc2s0OF8xIC0+IG1tMQogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzQ4XzIgIiwgJSVtbTIgXG5cdCIgLy8gX21hc2s0OF8yIC0+IG1tMgogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzQ4XzMgIiwgJSVtbTMgXG5cdCIgLy8gX21hc2s0OF8zIC0+IG1tMwogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzQ4XzQgIiwgJSVtbTQgXG5cdCIgLy8gX21hc2s0OF80IC0+IG1tNAogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzQ4XzUgIiwgJSVtbTUgXG5cdCIgLy8gX21hc2s0OF81IC0+IG1tNQogICAgICAgICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0xICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTMgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tNSAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTIgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0zICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTUgICAgIFxuXHQiCgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGxlbiwgJSVlY3ggICAgICAgXG5cdCIgLy8gbG9hZCBsZW5ndGggb2YgbGluZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkc3RwdHIsICU0ICAgICAgIFxuXHQiIC8vIGxvYWQgZGVzdAoKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgbWFpbmxvb3A0OGVuZCAgICBcblx0IgoKICAgICAgICAgICAgICAgICJtYWlubG9vcDQ4OiAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUzKSwgJSVtbTcgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0wLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMCwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgKCU0KSwgJSVtbTYgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNywgKCU0KSAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTMpLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMSwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTEsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgIDgoJTQpLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTYsIDgoJTQpICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglMyksICUlbW02ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTIsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0yLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAxNiglNCksICUlbW03ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTcsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCAxNiglNCkgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMjQoJTMpLCAlJW1tNyAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0zLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMywgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgMjQoJTQpLCAlJW1tNiAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNywgMjQoJTQpICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDMyKCUzKSwgJSVtbTYgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNCwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTQsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgIDMyKCU0KSwgJSVtbTcgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTYsIDMyKCU0KSAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA0MCglMyksICUlbW03ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTUsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW01LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICA0MCglNCksICUlbW02ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW03LCA0MCglNCkgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDQ4LCAlMyAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgNDggYnl0ZXMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDQ4LCAlNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic3VibCAgICAgICQ4LCAlJWVjeCAgICAgICAgXG5cdCIgLy8gZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAoKICAgICAgICAgICAgICAgICAgImphICAgICAgICBtYWlubG9vcDQ4ICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgIm1haW5sb29wNDhlbmQ6ICAgICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkaWZmLCAlJWVjeCAgICAgIFxuXHQiIC8vIChkaWZmIGlzIGluIGVheCkKICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgJSVlY3ggICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAianogICAgICAgIGVuZDQ4ICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBtYXNrLCAlJWVkeCAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJDI0LCAlJWVkeCAgICAgICBcblx0IiAvLyBtYWtlIGxvdyBieXRlLCBoaWdoIGJ5dGUKCiAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDQ4OiAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic2FsbCAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBoaWdoIGJpdCB0byBDRgogICAgICAgICAgICAgICAgICAiam5jICAgICAgIHNraXA0OCAgICAgICAgICAgXG5cdCIgLy8gaWYgQ0YgPSAwCiAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgKCUzKSwgJSVlYXggICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAoJTQpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdncgICAgICA0KCUzKSwgJSVheCAgICAgIFxuXHQiIC8vIEdSLVAgYnVnZml4IDIwMDcwNzE3CiAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgJSVheCwgNCglNCkgICAgICBcblx0IiAvLyBHUi1QIGJ1Z2ZpeCAyMDA3MDcxNwoKICAgICAgICAgICAgICAgICJza2lwNDg6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDYsICUzICAgICAgICAgICBcblx0IiAvLyBHUi1QIGJ1Z2ZpeCAyMDA3MDcxNwogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ2LCAlNCAgICAgICAgICAgXG5cdCIgLy8gR1ItUCBidWdmaXggMjAwNzA3MTcKICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqbnogICAgICAgc2Vjb25kbG9vcDQ4ICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJlbmQ0ODogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAogICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICA6ICIwIiAoZGlmZiksICAgICAgICAvLyBlYXggICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICIxIiAobWFzayksICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAgICAgICAiMiIgKGxlbiksICAgICAgICAgLy8gZWN4Ci8vIHdhcyAodW5tYXNrKSAgICAgImIiICAgIFJFU0VSVkVEICAgIC8vIGVieCAgICAgICAvLyBHbG9iYWwgT2Zmc2V0IFRhYmxlIGlkeAogICAgICAgICAgICAgICAgICAgICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIC8qIG5vdCBfbW14X3N1cHBvcnRlZCAtIHVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KICAgICAgICAgICAgewogICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOwogICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDYgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFA2ICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBCUFA2ICogcG5nX3Bhc3Nfd2lkdGhbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLwogICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwogICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLwogICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBCUFA2ICogbGVuOyAgIC8qIEdSUiBidWdmaXggKi8KCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwoKICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDY7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQogICAgICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9ICAgICAgIC8qIGVuZCA0OCBicHAgKi8KCiAgICAgICAgIGNhc2UgNjQ6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFA4ICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwogICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gQlBQOCAqIHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLwogICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQOCAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsgKi8KICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLyogcmVkdWNlIHRvIG11bHQuIG9mIDggKi8KICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQOCAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCgogICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOwogICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKCiAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KICAgICAgICAgICAgewogICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZipCUFA4OwogICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwogICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9ICAgICAgIC8qIGVuZCA2NCBicHAgKi8KCiAgICAgICAgIGRlZmF1bHQ6IC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICE9IDEsMiw0LDgsMTYsMjQsMzIsNDgsNjQgKi8KICAgICAgICAgewogICAgICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECiNpZiBkZWZpbmVkKFBOR19ERUJVRykKICAgICAgICAgICAgcG5nX2RlYnVnKDEsICJJbnRlcm5hbCBsaWJwbmcgbG9naWMgZXJyb3IgKEdDQyAiCiAgICAgICAgICAgICAgInBuZ19jb21iaW5lX3JvdygpIHBpeGVsX2RlcHRoKVxuIik7CiNlbmRpZgogICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICB9IC8qIGVuZCBzd2l0Y2ggKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoKSAqLwoKICAgfSAvKiBlbmQgaWYgKG5vbi10cml2aWFsIG1hc2spICovCgp9IC8qIGVuZCBwbmdfY29tYmluZV9yb3coKSAqLwoKI2VuZGlmIC8qIFBOR19IQVZFX01NWF9DT01CSU5FX1JPVyAqLwoKCgoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICBQIE4gRyBfIEQgTyBfIFIgRSBBIEQgXyBJIE4gVCBFIFIgTCBBIEMgRSAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgojaWYgZGVmaW5lZChQTkdfUkVBRF9JTlRFUkxBQ0lOR19TVVBQT1JURUQpCiNpZiBkZWZpbmVkKFBOR19IQVZFX01NWF9SRUFEX0lOVEVSTEFDRSkKCi8qIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIGlzIGNhbGxlZCBhZnRlciBhbnkgMTYtYml0IHRvIDgtYml0IGNvbnZlcnNpb24KICogaGFzIHRha2VuIHBsYWNlLiAgW0dSUjogd2hhdCBvdGhlciBzdGVwcyBjb21lIGJlZm9yZSBhbmQvb3IgYWZ0ZXI/XQogKi8KCnZvaWQgLyogUFJJVkFURSAqLwpwbmdfZG9fcmVhZF9pbnRlcmxhY2UocG5nX3N0cnVjdHAgcG5nX3B0cikKewogICBwbmdfcm93X2luZm9wIHJvd19pbmZvID0gJihwbmdfcHRyLT5yb3dfaW5mbyk7CiAgIHBuZ19ieXRlcCByb3cgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKICAgaW50IHBhc3MgPSBwbmdfcHRyLT5wYXNzOwojaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCiAgIHBuZ191aW50XzMyIHRyYW5zZm9ybWF0aW9ucyA9IHBuZ19wdHItPnRyYW5zZm9ybWF0aW9uczsKI2VuZGlmCgogICBwbmdfZGVidWcoMSwgImluIHBuZ19kb19yZWFkX2ludGVybGFjZSAocG5nZ2NjcmQuYylcbiIpOwoKICAgaWYgKF9tbXhfc3VwcG9ydGVkID09IDIpIHsKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgIC8qIHRoaXMgc2hvdWxkIGhhdmUgaGFwcGVuZWQgaW4gcG5nX2luaXRfbW14X2ZsYWdzKCkgYWxyZWFkeSAqLwogICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgImFzbV9mbGFncyBtYXkgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCIpOwojZW5kaWYKICAgICAgIHBuZ19tbXhfc3VwcG9ydCgpOwogICB9CgogICBpZiAocm93ICE9IE5VTEwgJiYgcm93X2luZm8gIT0gTlVMTCkKICAgewogICAgICBwbmdfdWludF8zMiBmaW5hbF93aWR0aDsKCiAgICAgIGZpbmFsX3dpZHRoID0gcm93X2luZm8tPndpZHRoICogcG5nX3Bhc3NfaW5jW3Bhc3NdOwoKICAgICAgc3dpdGNoIChyb3dfaW5mby0+cGl4ZWxfZGVwdGgpCiAgICAgIHsKICAgICAgICAgY2FzZSAxOgogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcCwgZHA7CiAgICAgICAgICAgIGludCBzc2hpZnQsIGRzaGlmdDsKICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKICAgICAgICAgICAgcG5nX2J5dGUgdjsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgaW50IGo7CgogICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X2luZm8tPndpZHRoIC0gMSkgPj4gMyk7CiAgICAgICAgICAgIGRwID0gcm93ICsgKHBuZ19zaXplX3QpKChmaW5hbF93aWR0aCAtIDEpID4+IDMpOwojaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc3NoaWZ0ID0gKGludCkoKHJvd19pbmZvLT53aWR0aCArIDcpICYgNyk7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IChpbnQpKChmaW5hbF93aWR0aCArIDcpICYgNyk7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSA3OwogICAgICAgICAgICAgICBzX2VuZCA9IDA7CiAgICAgICAgICAgICAgIHNfaW5jID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQojZW5kaWYKICAgICAgICAgICAgewogICAgICAgICAgICAgICBzc2hpZnQgPSA3IC0gKGludCkoKHJvd19pbmZvLT53aWR0aCArIDcpICYgNyk7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IDcgLSAoaW50KSgoZmluYWxfd2lkdGggKyA3KSAmIDcpOwogICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKICAgICAgICAgICAgICAgc19lbmQgPSA3OwogICAgICAgICAgICAgICBzX2luYyA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaSA9IHJvd19pbmZvLT53aWR0aDsgaTsgaS0tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4MSk7CiAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHg3ZjdmID4+ICg3IC0gZHNoaWZ0KSkgJiAweGZmKTsKICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodiA8PCBkc2hpZnQpOwogICAgICAgICAgICAgICAgICBpZiAoZHNoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIGRwLS07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBkc2hpZnQgKz0gc19pbmM7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKHNzaGlmdCA9PSBzX2VuZCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzc2hpZnQgPSBzX3N0YXJ0OwogICAgICAgICAgICAgICAgICBzcC0tOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgc3NoaWZ0ICs9IHNfaW5jOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CgogICAgICAgICBjYXNlIDI6CiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNwLCBkcDsKICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OwogICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwogICAgICAgICAgICBwbmdfdWludF8zMiBpOwoKICAgICAgICAgICAgc3AgPSByb3cgKyAocG5nX3NpemVfdCkoKHJvd19pbmZvLT53aWR0aCAtIDEpID4+IDIpOwogICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KSgoZmluYWxfd2lkdGggLSAxKSA+PiAyKTsKI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQogICAgICAgICAgICBpZiAodHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoKHJvd19pbmZvLT53aWR0aCArIDMpICYgMykgPDwgMSk7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IChwbmdfc2l6ZV90KSgoKGZpbmFsX3dpZHRoICsgMykgJiAzKSA8PCAxKTsKICAgICAgICAgICAgICAgc19zdGFydCA9IDY7CiAgICAgICAgICAgICAgIHNfZW5kID0gMDsKICAgICAgICAgICAgICAgc19pbmMgPSAtMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoMyAtICgocm93X2luZm8tPndpZHRoICsgMykgJiAzKSkgPDwgMSk7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IChwbmdfc2l6ZV90KSgoMyAtICgoZmluYWxfd2lkdGggKyAzKSAmIDMpKSA8PCAxKTsKICAgICAgICAgICAgICAgc19zdGFydCA9IDA7CiAgICAgICAgICAgICAgIHNfZW5kID0gNjsKICAgICAgICAgICAgICAgc19pbmMgPSAyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGkgPSByb3dfaW5mby0+d2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBwbmdfYnl0ZSB2OwogICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4Myk7CiAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHgzZjNmID4+ICg2IC0gZHNoaWZ0KSkgJiAweGZmKTsKICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodiA8PCBkc2hpZnQpOwogICAgICAgICAgICAgICAgICBpZiAoZHNoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIGRwLS07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBkc2hpZnQgKz0gc19pbmM7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKHNzaGlmdCA9PSBzX2VuZCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzc2hpZnQgPSBzX3N0YXJ0OwogICAgICAgICAgICAgICAgICBzcC0tOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgc3NoaWZ0ICs9IHNfaW5jOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CgogICAgICAgICBjYXNlIDQ6CiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNwLCBkcDsKICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OwogICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwogICAgICAgICAgICBwbmdfdWludF8zMiBpOwoKICAgICAgICAgICAgc3AgPSByb3cgKyAocG5nX3NpemVfdCkoKHJvd19pbmZvLT53aWR0aCAtIDEpID4+IDEpOwogICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KSgoZmluYWxfd2lkdGggLSAxKSA+PiAxKTsKI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQogICAgICAgICAgICBpZiAodHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoKHJvd19pbmZvLT53aWR0aCArIDEpICYgMSkgPDwgMik7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IChwbmdfc2l6ZV90KSgoKGZpbmFsX3dpZHRoICsgMSkgJiAxKSA8PCAyKTsKICAgICAgICAgICAgICAgc19zdGFydCA9IDQ7CiAgICAgICAgICAgICAgIHNfZW5kID0gMDsKICAgICAgICAgICAgICAgc19pbmMgPSAtNDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoMSAtICgocm93X2luZm8tPndpZHRoICsgMSkgJiAxKSkgPDwgMik7CiAgICAgICAgICAgICAgIGRzaGlmdCA9IChwbmdfc2l6ZV90KSgoMSAtICgoZmluYWxfd2lkdGggKyAxKSAmIDEpKSA8PCAyKTsKICAgICAgICAgICAgICAgc19zdGFydCA9IDA7CiAgICAgICAgICAgICAgIHNfZW5kID0gNDsKICAgICAgICAgICAgICAgc19pbmMgPSA0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGkgPSByb3dfaW5mby0+d2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBwbmdfYnl0ZSB2OwogICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4Zik7CiAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHhmMGYgPj4gKDQgLSBkc2hpZnQpKSAmIDB4ZmYpOwogICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2IDw8IGRzaGlmdCk7CiAgICAgICAgICAgICAgICAgIGlmIChkc2hpZnQgPT0gc19lbmQpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ID0gc19zdGFydDsKICAgICAgICAgICAgICAgICAgICAgZHAtLTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCArPSBzX2luYzsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoc3NoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHNzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgIHNwLS07CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBzc2hpZnQgKz0gc19pbmM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KCiAgICAgICAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCiAgICAgICAgIGRlZmF1bHQ6IC8qIDgtYml0IG9yIGxhcmdlciAodGhpcyBpcyB3aGVyZSB0aGUgcm91dGluZSBpcyBtb2RpZmllZCkgKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3B0ciwgZHA7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIHBuZ19zaXplX3QgcGl4ZWxfYnl0ZXM7CiAgICAgICAgICAgIGludCB3aWR0aCA9IChpbnQpcm93X2luZm8tPndpZHRoOwoKICAgICAgICAgICAgcGl4ZWxfYnl0ZXMgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoID4+IDMpOwoKICAgICAgICAgICAgLyogcG9pbnQgc3B0ciBhdCB0aGUgbGFzdCBwaXhlbCBpbiB0aGUgcHJlLWV4cGFuZGVkIHJvdzogKi8KICAgICAgICAgICAgc3B0ciA9IHJvdyArICh3aWR0aCAtIDEpICogcGl4ZWxfYnl0ZXM7CgogICAgICAgICAgICAvKiBwb2ludCBkcCBhdCB0aGUgbGFzdCBwaXhlbCBwb3NpdGlvbiBpbiB0aGUgZXhwYW5kZWQgcm93OiAqLwogICAgICAgICAgICBkcCA9IHJvdyArIChmaW5hbF93aWR0aCAtIDEpICogcGl4ZWxfYnl0ZXM7CgogICAgICAgICAgICAvKiBOZXcgY29kZSBieSBOaXJhdiBDaGhhdHJhcGF0aSAtIEludGVsIENvcnBvcmF0aW9uICovCgojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICBpZiAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0lOVEVSTEFDRSkKI2Vsc2UKICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgICAgewogICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgICAgICAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCiAgICAgICAgICAgICAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9TOwogICAgICAgICAgICAgICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfRDsKICAgICAgICAgICAgICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX2E7CiAgICAgICAgICAgICAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9kOwoKICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQMykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDQpIHx8IChwYXNzID09IDUpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSAtIDg7ICAgLy8gR1JSOiAgaHVoPwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoX21teCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDggb3IgOSBwaXgsIDI0IG9yIDI3IGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwdHIgcG9pbnRzIGF0IGxhc3QgcGl4ZWwgaW4gcHJlLWV4cGFuZGVkIHJvdwogICAgICAgICAgICAgICAgICAgICAgICAvLyBkcCBwb2ludHMgYXQgbGFzdCBwaXhlbCBwb3NpdGlvbiBpbiBleHBhbmRlZCByb3cKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMywgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDksICUyICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAocG5nX3Bhc3NfaW5jW3Bhc3NdICsgMSkqcGl4ZWxfYnl0ZXMKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDNfcGFzczQ6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyB4IHggNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgIFxuXHQiIC8vIHggeCA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNCAzIDIgMSAwIHogeiB6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYW5kICglMyksICUlbW0xICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQyNCwgJSVtbTIgICAgICAgIFxuXHQiIC8vIHogeiB6IHggeCA1IDQgMwogICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yICUlbW0xLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNCAzIDIgMSAwIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tMyAgICAgICBcblx0IiAvLyB6IHogeiB4IHggNSA0IDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQ4LCAlJW1tMiAgICAgICAgIFxuXHQiIC8vIHogeiB4IHggNSA0IDMgegogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTMgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiB4IHggNQogICAgICAgICAgICAgICAgICAgICAgICAgICAicGFuZCAoJTQpLCAlJW1tMyAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IHogeiA1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTMsICUlbW0yICAgICAgICBcblx0IiAvLyB6IHogeCB4IDUgNCAzIDUKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDYsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICUlbW0yLCA4KCUyKSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTIsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AzX3Bhc3M0ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAgICAgLy8gZWRpL3JkaQojaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgICAgIC8vIGZvcm1lcmx5IF9jb25zdDQgYW5kIF9jb25zdDY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiICgmX2M2NC5fYW1hc2s1XzNfMCksIC8vICgweDAwMDAwMDAwMDBGRkZGRkZMTCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgKCZfYzY0Ll9hbWFzazdfMV8wKSAgLy8gKDB4MDAwMDAwMDAwMDAwMDBGRkxMKQojZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9hbWFzazVfM18wKSwgIC8vIGVheCAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiICgmX2FtYXNrN18xXzApICAgLy8gZWR4ICgweDAwMDAwMDAwMDAwMDAwRkZMTCkKI2VuZGlmCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAiJW1tMiIsICIlbW0zIgojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSB3aWR0aF9tbXgqQlBQMzsKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjIqQlBQMzsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgQlBQMyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBCUFAzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQMzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDM7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKHBhc3MgPT0gMikgfHwgKHBhc3MgPT0gMykpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDksICUyICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAocG5nX3Bhc3NfaW5jW3Bhc3NdIC0gMSkqcGl4ZWxfYnl0ZXMKCiAgICAgICAgICAgICAgICAgICAgICIubG9vcDNfcGFzczI6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCB4IDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJwYW5kICglMyksICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IHogMiAxIDAgeiB6CiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICBcblx0IiAvLyB6IHogeiAyIDEgMCB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIHogeiB6IHogegogICAgICAgICAgICAgICAgICAgICAgICAicHNybHEgJDgsICUlbW0xICAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IHogMiAxCiAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTIsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCAyIDEgMCB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIDIgMSAwIDIgMQogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgNCglMikgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHogeiAyIDEgMCAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMywgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxMiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDNfcGFzczIgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGgpLCAgICAgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgICAgICAvLyBlZGkvcmRpCiNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSAgICAgICAgICAgLy8gZm9ybWVybHkgX2NvbnN0NDoKICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYzY0Ll9hbWFzazVfM18wKSAgLy8gKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQojZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9hbWFzazVfM18wKSAgIC8vIGVheCAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCiNlbmRpZgoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpICAvLyAmJiAoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMjEsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChwbmdfcGFzc19pbmNbcGFzc10gLSAxKSpwaXhlbF9ieXRlcwoKICAgICAgICAgICAgICAgICAgICAgIi5sb29wM19wYXNzMDogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggeCB4IHggMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgInBhbmQgKCUzKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiAyIDEgMCB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgIFxuXHQiIC8vIHogeiB6IDIgMSAwIHogegogICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMiAxIDAgeiB6IHogeiB6CiAgICAgICAgICAgICAgICAgICAgICAgICJwc3JscSAkOCwgJSVtbTEgICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogeiAyIDEKICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIDIgMSAwIHogegogICAgICAgICAgICAgICAgICAgICAgICAicG9yICUlbW0xLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMiAxIDAgMiAxIDAgMiAxCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMyAgICAgICBcblx0IiAvLyAyIDEgMCAyIDEgMCAyIDEKICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDAgMiAxIDAgMiAxIHogegogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTQgICAgICAgXG5cdCIgLy8gMiAxIDAgMiAxIDAgMiAxCiAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTAsICUlbW0zICBcblx0IiAvLyAwIDIgMSAwIDIgMSAwIDIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTQsIDE2KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJwc3JscSAkMzIsICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiB6IDAgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTMsIDgoJTIpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTQsICUlbW0wICBcblx0IiAvLyAxIDAgMiAxIDAgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMjQsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgImRlY2wgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AzX3Bhc3MwICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoKSwgICAgICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAgICAgLy8gZWRpL3JkaQojaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgICAgICAgICAgIC8vIGZvcm1lcmx5IF9jb25zdDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiICgmX2M2NC5fYW1hc2s1XzNfMCkgIC8vICgweDAwMDAwMDAwMDBGRkZGRkZMTCkKI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYW1hc2s1XzNfMCkgICAvLyBlYXggKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQojZW5kaWYKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAsICIlbW0zIiwgIiVtbTQiCiNlbmRpZgogICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDMgKi8KCiAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQNCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDQpIHx8IChwYXNzID09IDUpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSA7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCw0IGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDEyLCAlMiAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3A0X3Bhc3M0OiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMSAwIDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDcgNiA1IDQgNyA2IDUgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA4KCUyKSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTYsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A0X3Bhc3M0ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCpCUFA0IC0gQlBQNCk7IC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoyKkJQUDQgLSBCUFA0KTsgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgQlBQNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBCUFA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKTsKICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDQgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ0LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMjgsICUyICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDRfcGFzczI6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMiAxIDAgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gNyA2IDUgNCA3IDYgNSA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglMikgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDE2KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCAyNCglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMyLCAlMiAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVjeCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wNF9wYXNzMiAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqNCAtIDQpOyAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqMTYgLSA0KTsgIC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA0OwogICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDQpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAgLy8gJiYgKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsNCBieXRlcwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDQsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ2MCwgJTIgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wNF9wYXNzMDogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDEgMCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTEsICUlbW0xICBcblx0IiAvLyA3IDYgNSA0IDcgNiA1IDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUyKSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMTYoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDI0KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCAzMiglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgNDAoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDQ4KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgNTYoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDY0LCAlMiAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVjeCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wNF9wYXNzMCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjQgLSA0KTsgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjMyIC0gNCk7ICAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSA0ICovCgogICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDEpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSA0KSB8fCAocGFzcyA9PSA1KSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMykgPDwgMyk7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAtMyBwaXhlbHMgPT4gMC0zIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNywgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDE1LCAlMiAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3AxX3Bhc3M0OiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDMgMiAyIDEgMSAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDcgNyA2IDYgNSA1IDQgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgOCglMikgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTYsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDgsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AxX3Bhc3M0ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teDsKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjI7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRwLS0gPSAqc3B0cjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAtLXNwdHI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKHBhc3MgPT0gMikgfHwgKHBhc3MgPT0gMykpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDIpIDw8IDIpOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLTMgcGl4ZWxzID0+IDAtMyBieXRlcwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxNSwgJTIgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMV9wYXNzMjogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMyAyIDIgMSAxIDAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTAsICUlbW0wICBcblx0IiAvLyAxIDEgMSAxIDAgMCAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2h3ZCAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDMgMyAzIDMgMiAyIDIgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDQsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA4KCUyKSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTYsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDQsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AxX3Bhc3MyICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teDsKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjQ7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRwLS0gPSAqc3B0cjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAtLXNwdHI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8vICYmICgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAyKSA8PCAyKTsKICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMC0zIHBpeGVscyA9PiAwLTMgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzLCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMzEsICUyICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDFfcGFzczA6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMyAyIDIgMSAxIDAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTAsICUlbW0wICBcblx0IiAvLyAxIDEgMSAxIDAgMCAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0zICAgICAgIFxuXHQiIC8vIDEgMSAxIDEgMCAwIDAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMCAwIDAgMCAwIDAgMCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTMsICUlbW0zICBcblx0IiAvLyAxIDEgMSAxIDEgMSAxIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tod2QgJSVtbTIsICUlbW0yICBcblx0IiAvLyAzIDMgMyAzIDIgMiAyIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTMsIDgoJTIpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICBcblx0IiAvLyAzIDMgMyAzIDIgMiAyIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMiwgJSVtbTIgIFxuXHQiIC8vIDIgMiAyIDIgMiAyIDIgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW00LCAlJW1tNCAgXG5cdCIgLy8gMyAzIDMgMyAzIDMgMyAzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0yLCAxNiglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTQsIDI0KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzMiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDFfcGFzczAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAiJW1tMyIsICIlbW00IgojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSB3aWR0aF9tbXg7CiAgICAgICAgICAgICAgICAgICAgIGRwIC09IHdpZHRoX21teCo4OwogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwoKICAgICAgICAgICAgICAgICAgICAgICAvKiBJIHNpbXBsaWZpZWQgdGhpcyBwYXJ0IGluIHZlcnNpb24gMS4wLjRlCiAgICAgICAgICAgICAgICAgICAgICAgICogaGVyZSBhbmQgaW4gc2V2ZXJhbCBvdGhlciBpbnN0YW5jZXMgd2hlcmUKICAgICAgICAgICAgICAgICAgICAgICAgKiBwaXhlbF9ieXRlcyA9PSAxICAtLSBHUi1QCiAgICAgICAgICAgICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgKiBPcmlnaW5hbCBjb2RlOgogICAgICAgICAgICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICAgICAgICogcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgICAgKiBwbmdfbWVtY3B5KHYsIHNwdHIsIHBpeGVsX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgKiBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgICogewogICAgICAgICAgICAgICAgICAgICAgICAqICAgIHBuZ19tZW1jcHkoZHAsIHYsIHBpeGVsX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgKiAgICBkcCAtPSBwaXhlbF9ieXRlczsKICAgICAgICAgICAgICAgICAgICAgICAgKiB9CiAgICAgICAgICAgICAgICAgICAgICAgICogc3B0ciAtPSBwaXhlbF9ieXRlczsKICAgICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAqIFJlcGxhY2VtZW50IGNvZGUgaXMgaW4gdGhlIG5leHQgdGhyZWUgbGluZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICovCgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRwLS0gPSAqc3B0cjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAtLXNwdHI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSAxICovCgogICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDIpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSA0KSB8fCAocGFzcyA9PSA1KSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsMiBieXRlcwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDIsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ2LCAlMiAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMl9wYXNzNDogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMiAzIDIgMSAwIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMiAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDJfcGFzczQgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCpCUFAyIC0gQlBQMik7IC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoyKkJQUDIgLSBCUFAyKTsgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgQlBQMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBCUFAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSA7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCwyIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMiwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDE0LCAlMiAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3AyX3Bhc3MyOiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHggeCB4IHggMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyAzIDIgMyAyIDEgMCAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDEgMCAxIDAgMSAwIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gMyAyIDMgMiAzIDIgMyAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJTIpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxNiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDJfcGFzczIgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjIgLSAyKTsgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjggLSAyKTsgICAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8vICYmICgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKTsKICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDIgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQyLCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMzAsICUyICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDJfcGFzczA6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMyAyIDEgMCAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDMgMiAzIDIgMSAwIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMSAwIDEgMCAxIDAgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTEsICUlbW0xICBcblx0IiAvLyAzIDIgMyAyIDMgMiAzIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUyKSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgMTYoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDQsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCAyNCglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMzIsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AyX3Bhc3MwICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCoyIC0gMik7IC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoxNiAtIDIpOyAgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSAvKiBlbmQgb2YgcGl4ZWxfYnl0ZXMgPT0gMiAqLwoKICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSBCUFA4KQogICAgICAgICAgICAgICB7Ci8vIEdSUiBURVNUOiAgc2hvdWxkIHdvcmssIGJ1dCBuZWVkcyB0ZXN0aW5nIChzcGVjaWFsIDY0LWJpdCB2ZXJzaW9uIG9mIHJwbmcyPykKICAgICAgICAgICAgICAgICAgLy8gR1JSIE5PVEU6ICBubyBuZWVkIHRvIGNvbWJpbmUgcGFzc2VzIGhlcmUhCiAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBpcyA4LWJ5dGUgUlJHR0JCQUEKICAgICAgICAgICAgICAgICAgICAgLy8gZGVzdCBpcyAxNi1ieXRlIFJSR0dCQkFBIFJSR0dCQkFBCiAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUyICAgICAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKCiAgICAgICAgICAgICAgICAgICAgICIubG9vcDhfcGFzczQ6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJTIpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxNiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDhfcGFzczQgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGgpLCAgICAgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKHBhc3MgPT0gMikgfHwgKHBhc3MgPT0gMykpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBpcyA4LWJ5dGUgUlJHR0JCQUEKICAgICAgICAgICAgICAgICAgICAgLy8gZGVzdCBpcyAzMi1ieXRlIFJSR0dCQkFBIFJSR0dCQkFBIFJSR0dCQkFBIFJSR0dCQkFBCiAgICAgICAgICAgICAgICAgICAgIC8vIChyZWNhbGwgdGhhdCBleHBhbnNpb24gaXMgX2luIHBsYWNlXzogIHNwdHIgYW5kIGRwCiAgICAgICAgICAgICAgICAgICAgIC8vICBib3RoIHBvaW50IGF0IGxvY2F0aW9ucyB3aXRoaW4gc2FtZSByb3cgYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQyNCwgJTIgICAgICAgICAgICBcblx0IiAvLyBzdGFydCBvZiBsYXN0IGJsb2NrCgogICAgICAgICAgICAgICAgICAgICAiLmxvb3A4X3Bhc3MyOiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJTIpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAxNiglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDI0KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzMiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDhfcGFzczIgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGgpLCAgICAgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpICAvLyAmJiAoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gc291cmNlIGlzIDgtYnl0ZSBSUkdHQkJBQQogICAgICAgICAgICAgICAgICAgICAvLyBkZXN0IGlzIDY0LWJ5dGUgUlJHR0JCQUEgUlJHR0JCQUEgUlJHR0JCQUEgUlJHR0JCQUEgLi4uCiAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDU2LCAlMiAgICAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKCiAgICAgICAgICAgICAgICAgICAgICIubG9vcDhfcGFzczA6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglMikgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDE2KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAyNCglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMzIoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDQwKCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA0OCglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDU2KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ2NCwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDhfcGFzczAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGgpLCAgICAgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSAvKiBlbmQgb2YgcGl4ZWxfYnl0ZXMgPT0gOCAqLwoKICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSBCUFA2KSAgIC8vIHdoeSBubyBNTVggZm9yIHRoaXMgY2FzZT8KICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDYpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQNik7CiAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDY7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFA2OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDYgKi8KCiAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC8vIEVSUk9SOiAgU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQKI2lmIGRlZmluZWQoUE5HX0RFQlVHKQogICAgICAgICAgICAgICAgICBwbmdfZGVidWcoMSwgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDICIKICAgICAgICAgICAgICAgICAgICAicG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgX21teF9zdXBwb3J0ZWQpXG4iKTsKI2VuZGlmCiAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0gLy8gZW5kIG9mIF9tbXhfc3VwcG9ydGVkID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgIGVsc2UgLyogTU1YIG5vdCBzdXBwb3J0ZWQ6ICB1c2UgbW9kaWZpZWQgQyBjb2RlIC0gdGFrZXMgYWR2YW50YWdlCiAgICAgICAgICAgICAgICAgICogICBvZiBpbmxpbmluZyBvZiBwbmdfbWVtY3B5IGZvciBhIGNvbnN0YW50ICovCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYgKHBpeGVsX2J5dGVzID09IEJQUDMpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFAzKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDMpOwogICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFAzOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQMzsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDQpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFA0KTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICB7CiNpZiBkZWZpbmVkKFBOR19ERUJVRykgJiYgZGVmaW5lZChQTkdfMV8wX1gpICAvLyByb3dfYnVmX3NpemUgZ29uZSBpbiAxLjIueAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHAgPCByb3cgfHwgZHArMyA+IHJvdytwbmdfcHRyLT5yb3dfYnVmX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJkcCBvdXQgb2YgYm91bmRzOiByb3c9JTEwcCwgZHA9JTEwcCwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJycD0lMTBwXG4iLCByb3csIGRwLCByb3crcG5nX3B0ci0+cm93X2J1Zl9zaXplKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJyb3dfYnVmX3NpemU9JWx1XG4iLCBwbmdfcHRyLT5yb3dfYnVmX3NpemUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBCUFA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQNDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSAxKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDIpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFAyKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDIpOwogICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFAyOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQMjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDYpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFA2KTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDYpOwogICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFA2OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQNjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDgpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFA4KTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDgpOwogICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFA4OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECiNpZiBkZWZpbmVkKFBOR19ERUJVRykKICAgICAgICAgICAgICAgICAgcG5nX2RlYnVnKDEsICJJbnRlcm5hbCBsaWJwbmcgbG9naWMgZXJyb3IgKEdDQyAiCiAgICAgICAgICAgICAgICAgICAgInBuZ19kb19yZWFkX2ludGVybGFjZSgpICFfbW14X3N1cHBvcnRlZClcbiIpOwojZW5kaWYKICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSAvKiBlbmQgaWYgKE1NWCBub3Qgc3VwcG9ydGVkKSAqLwogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAvKiBlbmQgZGVmYXVsdCAoOC1iaXQgb3IgbGFyZ2VyKSAqLwogICAgICB9IC8qIGVuZCBzd2l0Y2ggKHJvd19pbmZvLT5waXhlbF9kZXB0aCkgKi8KCiAgICAgIHJvd19pbmZvLT53aWR0aCA9IGZpbmFsX3dpZHRoOwoKICAgICAgcm93X2luZm8tPnJvd2J5dGVzID0gUE5HX1JPV0JZVEVTKHJvd19pbmZvLT5waXhlbF9kZXB0aCxmaW5hbF93aWR0aCk7CiAgIH0KCn0gLyogZW5kIHBuZ19kb19yZWFkX2ludGVybGFjZSgpICovCgojZW5kaWYgLyogUE5HX0hBVkVfTU1YX1JFQURfSU5URVJMQUNFICovCiNlbmRpZiAvKiBQTkdfUkVBRF9JTlRFUkxBQ0lOR19TVVBQT1JURUQgKi8KCgoKI2lmIGRlZmluZWQoUE5HX0hBVkVfTU1YX1JFQURfRklMVEVSX1JPVykKI2lmIGRlZmluZWQoUE5HX01NWF9SRUFEX0ZJTFRFUl9BVkdfU1VQUE9SVEVEKQoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi8vICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXIF8gTSBNIFggXyBBIFYgRyAgICAgICAgICAgLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCgovLyBPcHRpbWl6ZWQgY29kZSBmb3IgUE5HIEF2ZXJhZ2UgZmlsdGVyIGRlY29kZXIKCnN0YXRpYyB2b2lkIC8qIFBSSVZBVEUgKi8KcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKHBuZ19yb3dfaW5mb3Agcm93X2luZm8sIHBuZ19ieXRlcCByb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcHJldl9yb3cpCnsKICAgdW5zaWduZWQgRnVsbExlbmd0aCwgTU1YTGVuZ3RoOyAgLy8gcG5nX3VpbnRfMzIgaXMgYWN0dWFsbHkgNjQtYml0IG9uIHg4Ni02NAogICBpbnQgYnBwOwogICBpbnQgZHVtbXlfdmFsdWVfYTsKICAgaW50IGR1bW15X3ZhbHVlX2M7ICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgMiAoY3gpIHdhcyBzcGlsbGVkJyBlcnJvcgogICBpbnQgZHVtbXlfdmFsdWVfZDsKICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX1M7CiAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9EOwogICBpbnQgZGlmZjsgLy8gICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKTsKCiAgIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOyAgLy8gY2FsYyBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsCiAgIEZ1bGxMZW5ndGggPSByb3dfaW5mby0+cm93Ynl0ZXM7ICAgICAgICAgLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIGZpbHRlcgoKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAiYXZnX3RvcDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIFNBVkVfR09UX2VieAogICAgICBTQVZFX3IxNQogICAgICBTQVZFX2VicAogICAgICAvLyBpbml0aWFsaXplIGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAovL3ByZSAibW92bCByb3csICU1ICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGk6ICBwdHIgdG8gQXZnKHgpCiAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gZWJ4OiAgeAovL3ByZSAibW92bCBwcmV2X3JvdywgJTQgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2k6ICBwdHIgdG8gUHJpb3IoeCkKICAgICAgIm1vdiAgJTUsICIgUERYICIgICAgICAgICAgICBcblx0IiAvLyBjb3B5IG9mIHJvdyBwdHIuLi4KLy9wcmUgInN1YmwgYnBwLCAiIFBEWCAiICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKICAgICAgInN1YiAgIiBQQ1ggIiwiIFBEWCAiICAgICAgICBcblx0IiAvLyBlZHgvcmR4OiAgcHRyIHRvIFJhdyh4LWJwcCkKLy9wcmUgIm1vdmwgRnVsbExlbmd0aCwgJSVlYXggICAgICBcblx0IiAvLyBicmluZyBpbiB2aWEgZWF4Li4uCiAgICAgIFNBVkVfRnVsbExlbmd0aCAgICAgICAgICAgICAgICAgICAgLy8gLi4uYnV0IHN0b3JlIGZvciBsYXRlciB1c2UKICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgoKICAgICAgLy8gQ29tcHV0ZSB0aGUgUmF3IHZhbHVlIGZvciB0aGUgZmlyc3QgYnBwIGJ5dGVzCiAgICAgIC8vICAgIFJhdyh4KSA9IEF2Zyh4KSArIChQcmlvcih4KS8yKQogICAiYXZnX3JscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZiICglNCwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIgLy8gbG9hZCBhbCB3aXRoIFByaW9yKHgpCiAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgInNocmIgJSVhbCAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgYnkgMgogICAgICAiYWRkYiAtMSglNSwiIFBCWCAiLCksICUlYWwgIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci8vcHJlICJjbXBsIGJwcCwgJSVlYnggICAgICAgICAgICAgXG5cdCIgLy8gKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCiAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgJSVhbCwgLTEoJTUsIiBQQlggIiwpICBcblx0IiAvLyB3cml0ZSBSYXcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CiAgICAgICJqYiBhdmdfcmxwICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFncwoKICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50ICgzMi1iaXQgbWFzayBfd291bGRfIGJlIGdvb2QgZW5vdWdoCiAgICAgIC8vIFtjb21wdXRpbmcgZGVsdGFdLCBidXQgMzItYml0IG9wcyBhcmUgemVyby1leHRlbmRlZCBvbiA2NC1iaXQsIGFyZ2gpCiAgICAgIC8vIChpZiBzd2FwcGVkIGVkeCBhbmQgZWJwLCBjb3VsZCBkbyA4LWJpdCBvciAxNi1iaXQgbWFzay4uLkZJWE1FPykKICAgICAgIm1vdiAgJTUsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyB0YWtlIHN0YXJ0IG9mIHJvdwogICAgICAiYWRkICAiIFBCWCAiLCIgUEJQICIgICAgICAgIFxuXHQiIC8vIGFkZCBicHAKICAgICAgImFkZCAgJDB4ZiwgIiBQQlAgIiAgICAgICAgICBcblx0IiAvLyBhZGQgNys4IHRvIGluY3IgcGFzdCBhbGlnbm1lbnQgYmRyeQovLyAgICAiYW5kbCAkMHhmZmZmZmZmOCwgJSVlYnAgICAgIFxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5ICgzMi1iaXQhKQogICAgICBDTEVBUl9CT1RUT01fM19CSVRTICBQQlAgICAgIlxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICJzdWIgICU1LCAiIFBCUCAiICAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3Qgcm93IHB0ciBhZ2FpbiA9PiBlYnAgPQogICAgICAianogYXZnX2dvICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICB0YXJnZXQgdmFsdWUgb2YgZWJ4IGF0IGFsaWdubWVudAoKICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICBcblx0IgoKICAgICAgLy8gZml4IGFsaWdubWVudAogICAgICAvLyBDb21wdXRlIHRoZSBSYXcgdmFsdWUgZm9yIHRoZSBieXRlcyB1cCB0byB0aGUgYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgIC8vICAgIFJhdyh4KSA9IEF2Zyh4KSArICgoUmF3KHgtYnBwKSArIFByaW9yKHgpKS8yKQogICAiYXZnX2xwMTogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgKCU0LCIgUEJYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIGNsIHdpdGggUHJpb3IoeCkKICAgICAgIm1vdmIgKCIgUERYICIsIiBQQlggIiwpLCAlJWFsIFxuXHQiIC8vIGxvYWQgYWwgd2l0aCBSYXcoeC1icHApCiAgICAgICJhZGR3ICUlY3gsICUlYXggICAgICAgICAgICAgXG5cdCIKICAgICAgImluY2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAic2hydyAlJWF4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBieSAyCiAgICAgICJhZGRiIC0xKCU1LCIgUEJYICIsKSwgJSVhbCAgXG5cdCIgLy8gYWRkIEF2Zyh4KTsgLTEgdG8gb2Zmc2V0IGluYyBlYngKICAgICAgImNtcGwgJSVlYnAsICUlZWJ4ICAgICAgICAgICBcblx0IiAvLyBjaGVjayBpZiBhdCBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgIm1vdmIgJSVhbCwgLTEoJTUsIiBQQlggIiwpICBcblx0IiAvLyB3cml0ZSBSYXcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CiAgICAgICJqYiBhdmdfbHAxICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmVwZWF0IHVudGlsIGF0IGFsaWdubWVudCBib3VuZGFyeQoKICAgImF2Z19nbzogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICBSRVNUT1JFX0Z1bGxMZW5ndGggIiUlZWF4ICAgIFxuXHQiIC8vIEZ1bGxMZW5ndGggLT4gZWF4CiAgICAgICJtb3ZsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gY29weSAtPiBlY3gKICAgICAgInN1YmwgJSVlYngsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4CiAgICAgICJhbmRsICQweDAwMDAwMDA3LCAlJWVheCAgICAgXG5cdCIgLy8gY2FsYyBieXRlcyBvdmVyIG11bHQgb2YgOAogICAgICAic3VibCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHN1YiBvdmVyLWJ5dGVzIGZyb20gb3JpZ2luYWwgbGVuZ3RoCi8vb3V0ICJtb3ZsICUlZWN4LCBNTVhMZW5ndGggICAgICAgXG5cdCIKICAgICAgIm1vdmwgJSVlYnAsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBkaWZmLCBidXQgbm8gcmVnIGNvbnN0cmFpbnQoPykKICAgICAgUkVTVE9SRV9lYnAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgKGNvdWxkIHN3YXAgZWJwIGFuZCBlZHggZnVuY3Rpb25zKQogICAgICBSRVNUT1JFX3IxNQogICAgICBSRVNUT1JFX0dPVF9lYngKCi8vICJUaGVyZSBpcyBubyB3YXkgZm9yIHlvdSB0byBzcGVjaWZ5IHRoYXQgYW4gaW5wdXQgb3BlcmFuZCBpcyBtb2RpZmllZAovLyB3aXRob3V0IGFsc28gc3BlY2lmeWluZyBpdCBhcyBhbiBvdXRwdXQgb3BlcmFuZC4iICBbbWFrZXMgc2Vuc2VdCgovLyAiVW5sZXNzIGFuIG91dHB1dCBvcGVyYW5kIGhhcyB0aGUgYCYnIGNvbnN0cmFpbnQgbW9kaWZpZXIsIEdDQyBtYXkKLy8gYWxsb2NhdGUgaXQgaW4gdGhlIHNhbWUgcmVnaXN0ZXIgYXMgYW4gdW5yZWxhdGVkIGlucHV0IG9wZXJhbmQsIG9uIHRoZQovLyBhc3N1bXB0aW9uIHRoZSBpbnB1dHMgYXJlIGNvbnN1bWVkIGJlZm9yZSB0aGUgb3V0cHV0cyBhcmUgcHJvZHVjZWQuIgovLyBbdHJ5aW5nIHRvIF9mb3JjZV8gdGhpc10KCi8vICJgPScgICBNZWFucyB0aGF0IHRoaXMgb3BlcmFuZCBpcyB3cml0ZS1vbmx5IGZvciB0aGlzIGluc3RydWN0aW9uOgovLyAgICAgICAgdGhlIHByZXZpb3VzIHZhbHVlIGlzIGRpc2NhcmRlZCBhbmQgcmVwbGFjZWQgYnkgb3V0cHV0IGRhdGEuIgovLyAgICAgICAgW29wZXJhbmQgPT0gdmFyaWFibGUgbmFtZSwgcHJlc3VtYWJseV0KCiAgICAgIC8vIG91dHB1dCByZWdzCiAgICAgIC8vIHRoZXNlIGFyZSBvcGVyYW5kcyAwLTEgKG9yaWdpbmFsbHkgMC0zKToKICAgICAgOiAiPWMiIChNTVhMZW5ndGgpLCAgICAgIC8vICUwIC0+ICUwCiAgICAgICAgIj1hIiAoZGlmZikgICAgICAgICAgICAvLyAlMyAtPiAlMQovLyAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgLy8gJTEgLT4gR09ORQovLyAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgLy8gJTIgLT4gR09ORQoKICAgICAgLy8gaW5wdXQgcmVncwogICAgICAvLyB0aGVzZSBhcmUgb3BlcmFuZHMgMi01IChvcmlnaW5hbGx5IDQtNyk7IHR3byBvZiB0aGVpciBjb25zdHJhaW50cyBzYXkKICAgICAgLy8gdGhleSBtdXN0IGdvIGluIHNhbWUgcGxhY2VzIGFzIG9wZXJhbmRzIDAtMSAob3JpZ2luYWxseSAwLTMpIGFib3ZlOgogICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAvLyAlNCAtPiAlMiBlY3gKICAgICAgICAiMSIgKEZ1bGxMZW5ndGgpLCAgLy8gJTcgLT4gJTMgZWF4CiAgICAgICAgIlMiIChwcmV2X3JvdyksICAgIC8vICU1IC0+ICU0IGVzaS9yc2kKICAgICAgICAiRCIgKHJvdykgICAgICAgICAgLy8gJTYgLT4gJTUgZWRpL3JkaQoKICAgICAgOiAiJWVkeCIgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICBfQ0xPQkJFUl9yMTUKICAgICAgICBfQ0xPQkJFUl9lYnAKICAgICAgICBfQ0xPQkJFUl9HT1RfZWJ4CiAgICk7CgogICAvLyBub3cgZG8gdGhlIG1hdGggZm9yIHRoZSByZXN0IG9mIHRoZSByb3cKICAgc3dpdGNoIChicHApCiAgIHsKICAgICAgY2FzZSAzOgogICAgICB7Ci8vICAgICAgIF9TaGlmdEJwcCA9IDI0OyAgICAvLyA9PSAzICogOAovLyAgICAgICBfU2hpZnRSZW0gPSA0MDsgICAgLy8gPT0gNjQgLSAyNAoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAvLyByZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgIm1vdnEgIiBBTUFTSzVfM18wICIsICUlbW03ICAgIFxuXHQiIC8vIF9hbWFzazVfM18wIC0+IG1tNwovLyBwcmVsb2FkICAibW92bCAgZGlmZiwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiAgeCA9IG9mZnNldCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGFsaWdubWVudCBib3VuZGFyeQogICAgICAgICAgICAibW92cSAiIExCX0NBUlJZX01BU0sgIiwgJSVtbTUgXG5cdCIgLy8gW2ludGVybGVhdmUgZm9yIHBhcmFsbGVsLj9dCi8vIHByZWxvYWQgICJtb3ZsICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGk6ICBBdmcoeCkKICAgICAgICAgICAgIm1vdnEgIiBIQl9DTEVBUl9NQVNLICIsICUlbW00IFxuXHQiIC8vIF9IQkNsZWFyTWFzayAtPiBtbTQKLy8gcHJlbG9hZCAgIm1vdmwgIHByZXZfcm93LCAlMCAgICAgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgIC04KCUxLCIgUENYICIsKSwgJSVtbTIgXG5cdCIvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChjb3JyZWN0IHBvcy4gaW4gbG9vcCBiZWxvdykKICAgICAgICAgImF2Z18zbHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgICglMSwiIFBDWCAiLCksICUlbW0wICAgXG5cdCIgLy8gbG9hZCBtbTAgd2l0aCBBdmcoeCkKICAgICAgICAgICAgIm1vdnEgICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzcmxxICQ0MCwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gY29ycmVjdCBwb3NpdGlvbiBSYXcoeC1icHApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEKICAgICAgICAgICAgIm1vdnEgICglMCwiIFBDWCAiLCksICUlbW0xICAgXG5cdCIgLy8gbG9hZCBtbTEgd2l0aCBQcmlvcih4KQogICAgICAgICAgICAibW92cSAgJSVtbTcsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZyb3cgYnl0ZQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0xICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcHJldl9yb3cgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBhZGQgKFByZXZfcm93LzIpIHRvIEF2ZyBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCBieXRlCiAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBMQkNhcnJ5CiAgICAgICAgICAgICJtb3ZxICAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGggbHNiJ3Mgd2VyZSA9PSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh2YWxpZCBvbmx5IGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gUmF3KHgtYnBwKS8yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCiAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgMy01CiAgICAgICAgICAgICJtb3ZxICAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCiAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgIm1vdnEgICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgInBhbmQgICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aCBsc2IncyB3ZXJlID09IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHZhbGlkIG9ubHkgZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byBSYXcoeC1icHApLzIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKCiAgICAgICAgICAgIC8vIGFkZCAzcmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBtbTYgbWFzayB0byBjb3ZlciBsYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR3byBieXRlcwogICAgICAgICAgICAibW92cSAgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgbmVlZCBiZSBzaGlmdGVkIG9ubHkgb25jZSBoZXJlIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgY29ycmVjdCB4LWJwcCBvZmZzZXQuCiAgICAgICAgICAgICJtb3ZxICAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gUmF3KHgtYnBwKS8yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJhZGRsICAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCiAgICAgICAgICAgIC8vIG5vdyByZWFkeSB0byB3cml0ZSBiYWNrIHRvIG1lbW9yeQogICAgICAgICAgICAibW92cSAgJSVtbTAsIC04KCUxLCIgUENYICIsKSBcblx0IgogICAgICAgICAgICAvLyBtb3ZlIHVwZGF0ZWQgUmF3KHgpIHRvIHVzZSBhcyBSYXcoeC1icHApIGZvciBuZXh0IGxvb3AKICAgICAgICAgICAgImNtcGwgICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJtb3ZxICAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhdyh4KSB0byBtbTIKICAgICAgICAgICAgImpiIGF2Z18zbHAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgLy8gZWRpL3JkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAvLyBlY3gKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgLy8gZWF4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgMyBicHAKCiAgICAgIGNhc2UgNDogICAvLyBmb3JtZXJseSBzaGFyZWQgd2l0aCA2IGJwcCBjYXNlIHZpYSBfU2hpZnRCcHAgYW5kIF9TaGlmdFJlbSwKICAgICAgeyAgICAgICAgIC8vIGJ1dCBsb29wIHVzZXMgYWxsIDggTU1YIHJlZ3MsIGFuZCBwc3JscS9wc2xscSByZXF1aXJlIDY0LWJpdAogICAgICAgICAgICAgICAgLy8gbWVtIChQSUMvLnNvIHByb2JsZW1zKSwgTU1YIHJlZyAobm9uZSBsZWZ0KSwgb3IgaW1tZWRpYXRlCi8vICAgICAgIF9TaGlmdEJwcCA9IGJwcCA8PCAzOyAgICAgICAgLy8gMzIgKHBzbGxxKQovLyAgICAgICBfU2hpZnRSZW0gPSA2NCAtIF9TaGlmdEJwcDsgIC8vIDMyIChwc3JscSkKCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICJtb3ZxICIgSEJfQ0xFQVJfTUFTSyAiLCAlJW1tNCBcblx0IiAvLyBfSEJDbGVhck1hc2sgLT4gbW00CiAgICAgICAgICAgICJtb3ZxICIgTEJfQ0FSUllfTUFTSyAiLCAlJW1tNSBcblx0IiAvLyBfTEJDYXJyeU1hc2sgLT4gbW01CiAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci8vIHByZWxvYWQgICJtb3ZsICBkaWZmLCAlJWVjeCAgICAgICAgICAgICBcblx0IiAvLyBlY3g6ICB4ID0gb2Zmc2V0IHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgICAgICAgIm1vdnEgIiBBTUFTSzBfOF8wICIsICUlbW03ICAgIFxuXHQiIC8vIF9hbWFzazBfOF8wIC0+IG1tNwogICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgLy8gLi4uIGFuZCBjbGVhciBhbGwgYnl0ZXMgZXhjZXB0IGZvciAxc3QgYWN0aXZlIGdyb3VwCi8vIHByZWxvYWQgICJtb3ZsICByb3csICUxICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCiAgICAgICAgICAgICJwc3JscSAkMzIsICUlbW03ICAgICAgICAgICAgXG5cdCIgLy8gd2FzIF9TaGlmdFJlbQovLyBwcmVsb2FkICAibW92bCAgcHJldl9yb3csICUwICAgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCiAgICAgICAgICAgICJtb3ZxICAlJW1tNywgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzbGxxICQzMiwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBtYXNrIGZvciAybmQgYWN0aXZlIGdyb3VwCgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAod2UgY29ycmVjdCBwb3MuIGluIGxvb3AgYmVsb3cpCiAgICAgICAgICJhdmdfNGxwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUxLCIgUENYICIsKSwgJSVtbTAgICBcblx0IgogICAgICAgICAgICAicHNybHEgJDMyLCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTEgICBcblx0IgogICAgICAgICAgICAvLyBhZGQgKFByZXZfcm93LzIpIHRvIGF2ZXJhZ2UKICAgICAgICAgICAgIm1vdnEgJSVtbTUsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tMSwgJSVtbTMgICAgICAgICAgIFxuXHQiIC8vIGdldCBsc2IgZm9yIGVhY2ggcHJldl9yb3cgYnl0ZQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBwcmV2X3JvdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTEgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhY2ggYnl0ZQogICAgICAgICAgICAvLyBhZGQgMXN0IGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gKFJhdyh4LWJwcCkvMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvIEF2ZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIEFjdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCiAgICAgICAgICAgICJwc2xscSAkMzIsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAvLyBub3cgcmVhZHkgdG8gd3JpdGUgYmFjayB0byBtZW1vcnkKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUENYICIsKSBcblx0IgogICAgICAgICAgICAvLyBwcmVwIFJhdyh4LWJwcCkgZm9yIG5leHQgbG9vcAogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCiAgICAgICAgICAgICJqYiBhdmdfNGxwICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgLy8gZWRpL3JkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAvLyBlY3gKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgLy8gZWF4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgNCBicHAKCiAgICAgIGNhc2UgMToKICAgICAgewogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWN4ICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiB4ID0gb2Zmc2V0IHRvIGFsaWduLiBiZHJ5Ci8vIHByZWxvYWQgICJtb3ZsIHJvdywgJTEgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaTogIEF2Zyh4KQovLyBwcmVsb2FkICAibW92bCBGdWxsTGVuZ3RoLCAlJWVheCAgICAgIFxuXHQiCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gdGVzdCBpZiBvZmZzZXQgYXQgZW5kIG9mIGFycmF5CiAgICAgICAgICAgICJqbmIgYXZnXzFlbmQgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIFNBVkVfZWJwCgogICAgICAgICAgICAvLyBkbyBBdmcgZGVjb2RlIGZvciByZW1haW5pbmcgYnl0ZXMKLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUwICAgICAgICAgICBcblx0IiAvLyBlc2kvcnNpOiAgUHJpb3IoeCkKICAgICAgICAgICAgIm1vdiAgJTEsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyBjb3B5IG9mIHJvdyBwb2ludGVyLi4uCiAgICAgICAgICAgICJkZWMgICIgUEJQICIgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWJwL3JicDogIFJhdyh4LWJwcCkKICAgICAgICAgICAgInhvcmwgJSVlZHgsICUlZWR4ICAgICAgICAgICBcblx0IiAvLyB6ZXJvIGVkeCBiZWZvcmUgdXNpbmcgZGwgJiBkeAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBpbiBsb29wIGJlbG93CiAgICAgICAgICAgIFNBVkVfR09UX2VieAoKICAgICAgICAgImF2Z18xbHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBSYXcoeCkgPSBBdmcoeCkgKyAoKFJhdyh4LWJwcCkgKyBQcmlvcih4KSkvMikKICAgICAgICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92YiAoJTAsIiBQQ1ggIiwpLCAlJWRsICAgIFxuXHQiIC8vIGxvYWQgZGwgd2l0aCBQcmlvcih4KQogICAgICAgICAgICAibW92YiAoIiBQQlAgIiwiIFBDWCAiLCksICUlYmwgXG5cdCIgLy8gbG9hZCBibCB3aXRoIFJhdyh4LWJwcCkKICAgICAgICAgICAgImFkZHcgJSVkeCwgJSVieCAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiaW5jbCAlJWVjeCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJzaHJ3ICUlYnggICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIGJ5IDIKICAgICAgICAgICAgImFkZGIgLTEoJTEsIiBQQ1ggIiwpLCAlJWJsICBcblx0IiAvLyBhZGQgQXZnKHgpOyAtMSB0byBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmMgZWN4CiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gY2hlY2sgaWYgYXQgZW5kIG9mIGFycmF5CiAgICAgICAgICAgICJtb3ZiICUlYmwsIC0xKCUxLCIgUENYICIsKSAgXG5cdCIgLy8gd3JpdGUgYmFjayBSYXcoeCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3YgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtMSB0byBvZmZzZXQgaW5jIGVjeAogICAgICAgICAgICAiamIgYXZnXzFscCAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICBSRVNUT1JFX0dPVF9lYngKICAgICAgICAgICAgUkVTVE9SRV9lYnAKCiAgICAgICAgICJhdmdfMWVuZDogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgLy8gZWRpL3JkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAvLyBlY3gKICAgICAgICAgICAgICAiMyIgKEZ1bGxMZW5ndGgpICAgLy8gZWF4CgogICAgICAgICAgICA6ICIlZWR4IiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgIF9DTE9CQkVSX0dPVF9lYngKICAgICAgICAgICAgICBfQ0xPQkJFUl9lYnAKICAgICAgICAgKTsKICAgICAgfQogICAgICByZXR1cm47ICAvLyBlbmQgMSBicHAKCiAgICAgIGNhc2UgMjoKICAgICAgewovLyAgICAgICBfU2hpZnRCcHAgPSAxNjsgICAvLyA9PSAyICogOAovLyAgICAgICBfU2hpZnRSZW0gPSA0ODsgICAvLyA9PSA2NCAtIF9TaGlmdEJwcAoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgLy8gbG9hZCAoZm9ybWVyKSBfQWN0aXZlTWFzawogICAgICAgICAgICAibW92cSAiIEFNQVNLNl8yXzAgIiwgJSVtbTcgICAgXG5cdCIgLy8gX2FtYXNrNl8yXzAgLT4gbW03CiAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci8vIHByZWxvYWQgICJtb3ZsICBkaWZmLCAlJWVjeCAgICAgICAgICAgICBcblx0IiAvLyBlY3g6ICB4ID0gb2Zmc2V0IHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgICAgICAgIm1vdnEgIiBMQl9DQVJSWV9NQVNLICIsICUlbW01IFxuXHQiIC8vIF9MQkNhcnJ5TWFzayAtPiBtbTUKLy8gcHJlbG9hZCAgIm1vdmwgIHJvdywgJTEgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQogICAgICAgICAgICAibW92cSAiIEhCX0NMRUFSX01BU0sgIiwgJSVtbTQgXG5cdCIgLy8gX0hCQ2xlYXJNYXNrIC0+IG1tNAovLyBwcmVsb2FkICAibW92bCAgcHJldl9yb3csICUwICAgICAgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglMSwiIFBDWCAiLCksICUlbW0yIFxuXHQiIC8vIGxvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh3ZSBjb3JyZWN0IHBvcy4gaW4gbG9vcCBiZWxvdykKICAgICAgICAgImF2Z18ybHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAoJTEsIiBQQ1ggIiwpLCAlJW1tMCAgIFxuXHQiCiAgICAgICAgICAgICJwc3JscSAkNDgsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMSAgIFxuXHQiIC8vICAoR1JSIEJVR0ZJWDogIHdhcyBwc2xscSkKICAgICAgICAgICAgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBhdmVyYWdlCiAgICAgICAgICAgICJtb3ZxICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZfcm93IGJ5dGUKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcHJldl9yb3cgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhY2ggYnl0ZQoKICAgICAgICAgICAgLy8gYWRkIDFzdCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5CiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8gQXZnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggQWN0aXZlIGJ5dGUKCiAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tNiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IHRoZSBtbTYgbWFzayB0byBjb3ZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIDIgJiAzCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKCiAgICAgICAgICAgIC8vIGFkZCAzcmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tNiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IHRoZSBtbTYgbWFzayB0byBjb3ZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIDQgJiA1CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aCBsc2IncyB3ZXJlID09IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gKFJhdyh4LWJwcCkvMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCgogICAgICAgICAgICAvLyBhZGQgNHRoIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyA2ICYgNwogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgLy8gbm93IHJlYWR5IHRvIHdyaXRlIGJhY2sgdG8gbWVtb3J5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIKICAgICAgICAgICAgLy8gcHJlcCBSYXcoeC1icHApIGZvciBuZXh0IGxvb3AKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAiamIgYXZnXzJscCAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaSAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDIgYnBwCgogICAgICBjYXNlIDY6ICAgLy8gZm9ybWVybHkgc2hhcmVkIHdpdGggNCBicHAgY2FzZSAoc2VlIGNvbW1lbnRzIHRoZXJlKQogICAgICB7Ci8vICAgICAgIF9TaGlmdEJwcCA9IGJwcCA8PCAzOyAgICAgICAgLy8gNDggKHBzbGxxKQovLyAgICAgICBfU2hpZnRSZW0gPSA2NCAtIF9TaGlmdEJwcDsgIC8vIDE2IChwc3JscSkKCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICJtb3ZxICIgSEJfQ0xFQVJfTUFTSyAiLCAlJW1tNCBcblx0IiAvLyBfSEJDbGVhck1hc2sgLT4gbW00CiAgICAgICAgICAgICJtb3ZxICIgTEJfQ0FSUllfTUFTSyAiLCAlJW1tNSBcblx0IiAvLyBfTEJDYXJyeU1hc2sgLT4gbW01CiAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci8vIHByZWxvYWQgICJtb3ZsICBkaWZmLCAlJWVjeCAgICAgICAgICAgICBcblx0IiAvLyBlY3g6ICB4ID0gb2Zmc2V0IHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgICAgICAgIm1vdnEgIiBBTUFTSzBfOF8wICIsICUlbW03ICAgIFxuXHQiIC8vIF9hbWFzazBfOF8wIC0+IG1tNwogICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgLy8gLi4uIGFuZCBjbGVhciBhbGwgYnl0ZXMgZXhjZXB0IGZvciAxc3QgYWN0aXZlIGdyb3VwCi8vIHByZWxvYWQgICJtb3ZsICByb3csICUxICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCiAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW03ICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgIm1vdmwgIHByZXZfcm93LCAlMCAgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQogICAgICAgICAgICAibW92cSAgJSVtbTcsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc2xscSAkNDgsICUlbW02ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayBmb3IgMm5kIGFjdGl2ZSBncm91cAoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTIgXG5cdCIgLy8gbG9hZCBwcmV2aW91cyBhbGlnbmVkIDggYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQogICAgICAgICAiYXZnXzZscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICglMSwiIFBDWCAiLCksICUlbW0wICAgXG5cdCIKICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0xICAgXG5cdCIKICAgICAgICAgICAgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBhdmVyYWdlCiAgICAgICAgICAgICJtb3ZxICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZfcm93IGJ5dGUKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcHJldl9yb3cgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFByZXZfcm93LzIpIHRvIEF2ZyBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIGJ5dGUKICAgICAgICAgICAgLy8gYWRkIDFzdCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5CiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0byBBdmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBBY3RpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAicHNsbHEgJDQ4LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgLy8gbm93IHJlYWR5IHRvIHdyaXRlIGJhY2sgdG8gbWVtb3J5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIKICAgICAgICAgICAgLy8gcHJlcCBSYXcoeC1icHApIGZvciBuZXh0IGxvb3AKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAiamIgYXZnXzZscCAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaSAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDYgYnBwCgogICAgICBjYXNlIDg6CiAgICAgIHsKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAvLyByZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAovLyBwcmVsb2FkICAibW92bCAgZGlmZiwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiAgeCA9IG9mZnNldCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICAgICAgIExPQURfR09UX3JicAogICAgICAgICAgICAibW92cSAiIExCX0NBUlJZX01BU0sgIiwgJSVtbTUgXG5cdCIgLy8gW2ludGVybGVhdmUgZm9yIHBhcmFsbGVsLj9dCi8vIHByZWxvYWQgICJtb3ZsICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGk6ICBBdmcoeCkKICAgICAgICAgICAgIm1vdnEgIiBIQl9DTEVBUl9NQVNLICIsICUlbW00IFxuXHQiIC8vIF9IQkNsZWFyTWFzayAtPiBtbTQKLy8gcHJlbG9hZCAgIm1vdmwgIHByZXZfcm93LCAlMCAgICAgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChOTyBORUVEIHRvIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQoKICAgICAgICAgImF2Z184bHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAoJTEsIiBQQ1ggIiwpLCAlJW1tMCAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTEgICBcblx0IgogICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW0xLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gZ2V0IGxzYiBmb3IgZWFjaCBwcmV2X3JvdyBieXRlCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHByZXZfcm93IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB3aGVyZSBib3RoIGxzYidzIHdlcmUgPT0gMQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcsIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTMsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byBBdmcsIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcsIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnLCBlYWNoCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgdG8gQXZnIGZvciBlYWNoCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyByZXVzZSBhcyBSYXcoeC1icHApCiAgICAgICAgICAgICJqYiBhdmdfOGxwICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgLy8gZWRpL3JkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAvLyBlY3gKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgLy8gZWF4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgLCAiJW1tMyIsICIlbW00IiwgIiVtbTUiCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDggYnBwCgogICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvLyBicHAgIT0gMSwyLDMsNCw2LDg6ICBkb2Vzbid0IGV4aXN0CiAgICAgIHsKICAgICAgICAgLy8gRVJST1I6ICBTSE9VTEQgTkVWRVIgQkUgUkVBQ0hFRAojaWYgZGVmaW5lZChQTkdfREVCVUcpCiAgICAgICAgIHBuZ19kZWJ1ZygxLCAiSW50ZXJuYWwgbGlicG5nIGxvZ2ljIGVycm9yIChHQ0MgIgogICAgICAgICAgICJwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSlcbiIpOwojZW5kaWYKICAgICAgfQogICAgICBicmVhazsKCiAgIH0gLy8gZW5kIHN3aXRjaCAoYnBwKQoKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAvLyBNTVggYWNjZWxlcmF0aW9uIGNvbXBsZXRlOyBub3cgZG8gY2xlYW4tdXAKICAgICAgLy8gY2hlY2sgaWYgYW55IHJlbWFpbmluZyBieXRlcyBsZWZ0IHRvIGRlY29kZQovL3ByZSAibW92bCBGdWxsTGVuZ3RoLCAlJWVkeCAgICAgIFxuXHQiCi8vcHJlICJtb3ZsIE1NWExlbmd0aCwgJSVlYXggICAgICAgXG5cdCIgLy8gZWF4OiAgeCA9PSBvZmZzZXQgYnl0ZXMgYWZ0ZXIgTU1YCi8vcHJlICJtb3ZsIHJvdywgJTIgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCiAgICAgICJjbXBsICUlZWR4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gdGVzdCBpZiBvZmZzZXQgYXQgZW5kIG9mIGFycmF5CiAgICAgICJqbmIgYXZnX2VuZCAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgIFNBVkVfZWJwCgogICAgICAvLyBkbyBBdmcgZGVjb2RlIGZvciByZW1haW5pbmcgYnl0ZXMKLy9wcmUgIm1vdmwgcHJldl9yb3csICUxICAgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQogICAgICAibW92ICAlMiwgIiBQQlAgIiAgICAgICAgICAgIFxuXHQiIC8vIGNvcHkgb2Ygcm93IHBvaW50ZXIuLi4KLy9wcmUgInN1YmwgYnBwLCAiIFBCUCAiICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKICAgICAgInN1YiAgIiBQQ1ggIiwiIFBCUCAiICAgICAgICBcblx0IiAvLyBlYnA6ICBSYXcoeC1icHApCiAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gemVybyBlY3ggYmVmb3JlIHVzaW5nIGNsICYgY3ggYmVsb3cKCiAgICAgIFNBVkVfR09UX2VieAoKICAgImF2Z19scDI6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBSYXcoeCkgPSBBdmcoeCkgKyAoKFJhdyh4LWJwcCkgKyBQcmlvcih4KSkvMikKICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAibW92YiAoJTEsIiBQQVggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgY2wgd2l0aCBQcmlvcih4KQogICAgICAibW92YiAoIiBQQlAgIiwiIFBBWCAiLCksICUlYmwgXG5cdCIgLy8gbG9hZCBibCB3aXRoIFJhdyh4LWJwcCkKICAgICAgImFkZHcgJSVjeCwgJSVieCAgICAgICAgICAgICBcblx0IgogICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJzaHJ3ICUlYnggICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIGJ5IDIKICAgICAgImFkZGIgLTEoJTIsIiBQQVggIiwpLCAlJWJsICBcblx0IiAvLyBhZGQgQXZnKHgpOyAtMSB0byBvZmZzZXQgaW5jIGVheAogICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIGNoZWNrIGlmIGF0IGVuZCBvZiBhcnJheQogICAgICAibW92YiAlJWJsLCAtMSglMiwiIFBBWCAiLCkgIFxuXHQiIC8vIHdyaXRlIGJhY2sgUmF3KHgpIFttb3YgZG9lcyBub3QKICAgICAgImpiIGF2Z19scDIgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgYWZmZWN0IGZsYWdzOyAtMSB0byBvZmZzZXQgaW5jIGVheF0KCiAgICAgIFJFU1RPUkVfR09UX2VieAogICAgICBSRVNUT1JFX2VicAoKICAgImF2Z19lbmQ6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVuZCBNTVg7IHByZXAgZm9yIHBvc3MuIEZQIGluc3Rycy4KCiAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpLAogICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpCgogICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAvLyBlY3ggICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAiMSIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaQogICAgICAgICIyIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCiAgICAgICAgIjMiIChNTVhMZW5ndGgpLCAgIC8vIGVheAogICAgICAgICI0IiAoRnVsbExlbmd0aCkgICAvLyBlZHgKCiAgICAgIENMT0JfQ09MT05fZWJ4X2VicCAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgQ0xPQkJFUl9HT1RfZWJ4CiAgICAgICAgQ0xPQl9DT01NQV9lYnhfZWJwCiAgICAgICAgQ0xPQkJFUl9lYnAKICAgKTsKCn0gLyogZW5kIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpICovCgojZW5kaWYgLyogUE5HX01NWF9SRUFEX0ZJTFRFUl9BVkdfU1VQUE9SVEVEICovCgoKCiNpZiBkZWZpbmVkKFBOR19NTVhfUkVBRF9GSUxURVJfUEFFVEhfU1VQUE9SVEVEKQojaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgfHwgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLyAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgXyBNIE0gWCBfIFAgQSBFIFQgSCAgICAgICAgIC8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwoKLy8gT3B0aW1pemVkIGNvZGUgZm9yIFBORyBQYWV0aCBmaWx0ZXIgZGVjb2RlcgoKc3RhdGljIHZvaWQgLyogUFJJVkFURSAqLwpwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aChwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcHJldl9yb3cpCnsKICAgdW5zaWduZWQgRnVsbExlbmd0aCwgTU1YTGVuZ3RoOyAgLy8gcG5nX3VpbnRfMzIgaXMgYWN0dWFsbHkgNjQtYml0IG9uIHg4Ni02NAogICBpbnQgYnBwOwogICBpbnQgZHVtbXlfdmFsdWVfYTsKICAgaW50IGR1bW15X3ZhbHVlX2M7ICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgMiAoY3gpIHdhcyBzcGlsbGVkJyBlcnJvcgogICBpbnQgZHVtbXlfdmFsdWVfZDsKICAgcG5nX2NoYXJwIGR1bW15X3ZhbHVlX1M7CiAgIHBuZ19jaGFycCBkdW1teV92YWx1ZV9EOwogICBpbnQgZGlmZjsgLy8gICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKTsKCiAgIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOyAgLy8gY2FsYyBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsCiAgIEZ1bGxMZW5ndGggPSByb3dfaW5mby0+cm93Ynl0ZXM7ICAgICAgICAgLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIGZpbHRlcgoKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICBTQVZFX0dPVF9lYngKICAgICAgU0FWRV9yMTUKICAgICAgU0FWRV9lYnAKLy9wcmUgIm1vdmwgcm93LCAlMiAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCiAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gZWJ4OiAgeCBvZmZzZXQKLy9wcmUgIm1vdmwgcHJldl9yb3csICUxICAgICAgICAgICBcblx0IiAvLyBlc2kvcnNpCiAgICAgICJ4b3JsICUlZWR4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gZWR4OiAgeC1icHAgb2Zmc2V0Ci8vcHJlICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWF4ICAgICAgXG5cdCIgLy8gYnJpbmcgaW4gdmlhIGVheC4uLgogICAgICBTQVZFX0Z1bGxMZW5ndGggICAgICAgICAgICAgICAgICAgIC8vIC4uLmJ1dCBzdG9yZSBmb3IgbGF0ZXIgdXNlCiAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKCiAgICAgIC8vIENvbXB1dGUgdGhlIFJhdyB2YWx1ZSBmb3IgdGhlIGZpcnN0IGJwcCBieXRlcwogICAgICAvLyBOb3RlOiB0aGUgZm9ybXVsYSB3b3JrcyBvdXQgdG8gYmUgYWx3YXlzCiAgICAgIC8vICAgUGFldGgoeCkgPSBSYXcoeCkgKyBQcmlvcih4KSAgICAgIHdoZXJlIHggPCBicHAKICAgInBhZXRoX3JscDogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAibW92YiAoJTIsIiBQQlggIiwpLCAlJWFsICAgIFxuXHQiCiAgICAgICJhZGRiICglMSwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKICAgICAgImluY2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IgovL3ByZSAiY21wbCBicHAsICUlZWJ4ICAgICAgICAgICAgIFxuXHQiIChicHAgaXMgcHJlbG9hZGVkIGludG8gZWN4KQogICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZiICUlYWwsIC0xKCUyLCIgUEJYICIsKSAgXG5cdCIKICAgICAgImpiIHBhZXRoX3JscCAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50IChub3RlOiAgY29tcHV0aW5nIF9kZWx0YV8gb2YgdHdvIHBvaW50ZXJzLAogICAgICAvLyBzbyBoZXJlYWZ0ZXIgJSVlYnAgaXMgc3VmZmljaWVudCBldmVuIG9uIDY0LWJpdCkKICAgICAgIm1vdiAgJTIsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyB0YWtlIHN0YXJ0IG9mIHJvdwogICAgICAiYWRkICAiIFBCWCAiLCIgUEJQICIgICAgICAgIFxuXHQiIC8vIGFkZCBicHAKICAgICAgImFkZCAgJDB4ZiwgIiBQQlAgIiAgICAgICAgICBcblx0IiAvLyBhZGQgNys4IHRvIGluY3IgcGFzdCBhbGlnbm1lbnQgYmRyeQovLyAgICAiYW5kbCAkMHhmZmZmZmZmOCwgJSVlYnAgICAgIFxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5ICgzMi1iaXQhKQogICAgICBDTEVBUl9CT1RUT01fM19CSVRTICBQQlAgICAgIlxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICJzdWIgICUyLCAiIFBCUCAiICAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3Qgcm93IHB0ciBhZ2FpbiA9PiBlYnAgPQogICAgICAianogcGFldGhfZ28gICAgICAgICAgICAgICAgIFxuXHQiIC8vICB0YXJnZXQgdmFsdWUgb2YgZWJ4IGF0IGFsaWdubWVudAoKICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICBcblx0IgoKICAgICAgU0FWRV9yMTFfcjEyX3IxMwoKICAgICAgLy8gZml4IGFsaWdubWVudAogICAicGFldGhfbHAxOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwogICAgICAibW92YiAoJTEsIiBQQlggIiwpLCAlJWFsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBhbAogICAgICAibW92YiAoJTEsIiBQRFggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKICAgICAgInN1YmwgJSVlY3gsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKICAgICAgIm1vdmwgJSVlYXgsICIgcGFfVEVNUCAiICAgICBcblx0IiAvLyBTYXZlIHBhdiBmb3IgbGF0ZXIgdXNlCiAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwogICAgICAibW92YiAoJTIsIiBQRFggIiwpLCAlJWFsICAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGFsCiAgICAgICJzdWJsICUlZWN4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCiAgICAgICJtb3ZsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtIGMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgogICAgICAiYWRkbCAiIHBhX1RFTVAgIiwgJSVlYXggICAgIFxuXHQiIC8vIHBjdiA9IHBhdiArIHBidgogICAgICAvLyBwYyA9IGFicyhwY3YpCiAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYXggICAgXG5cdCIKICAgICAgImp6IHBhZXRoX3BjYSAgICAgICAgICAgICAgICBcblx0IgogICAgICAibmVnbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAicGFldGhfcGNhOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZsICUlZWF4LCAiIHBjX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYyBmb3IgbGF0ZXIgdXNlCiAgICAgIC8vIHBiID0gYWJzKHBidikKICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVjeCAgICBcblx0IgogICAgICAianogcGFldGhfcGJhICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJuZWdsICUlZWN4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKCiAgICJwYWV0aF9wYmE6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmwgJSVlY3gsICIgcGJfVEVNUCAiICAgICBcblx0IiAvLyBzYXZlIHBiIGZvciBsYXRlciB1c2UKICAgICAgLy8gcGEgPSBhYnMocGF2KQogICAgICAibW92bCAiIHBhX1RFTVAgIiwgJSVlYXggICAgIFxuXHQiCiAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYXggICAgXG5cdCIKICAgICAgImp6IHBhZXRoX3BhYSAgICAgICAgICAgICAgICBcblx0IgogICAgICAibmVnbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAicGFldGhfcGFhOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZsICUlZWF4LCAiIHBhX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYSBmb3IgbGF0ZXIgdXNlCiAgICAgIC8vIHRlc3QgaWYgcGEgPD0gcGIKICAgICAgImNtcGwgJSVlY3gsICUlZWF4ICAgICAgICAgICBcblx0IgogICAgICAiam5hIHBhZXRoX2FiYiAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhID4gcGI7IG5vdyB0ZXN0IGlmIHBiIDw9IHBjCiAgICAgICJjbXBsICIgcGNfVEVNUCAiLCAlJWVjeCAgICAgXG5cdCIKICAgICAgImpuYSBwYWV0aF9iYmMgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYiA+IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgtYnBwKQogICAgICAibW92YiAoJTEsIiBQRFggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKICAgICAgImptcCBwYWV0aF9wYWV0aCAgICAgICAgICAgICBcblx0IgoKICAgInBhZXRoX2JiYzogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYiA8PSBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4KQogICAgICAibW92YiAoJTEsIiBQQlggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBjbAogICAgICAiam1wIHBhZXRoX3BhZXRoICAgICAgICAgICAgIFxuXHQiCgogICAicGFldGhfYWJiOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhIDw9IHBiOyBub3cgdGVzdCBpZiBwYSA8PSBwYwogICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlYXggICAgIFxuXHQiCiAgICAgICJqbmEgcGFldGhfYWJjICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGEgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKICAgICAgIm1vdmIgKCUxLCIgUERYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICJqbXAgcGFldGhfcGFldGggICAgICAgICAgICAgXG5cdCIKCiAgICJwYWV0aF9hYmM6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGEgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUmF3KHgtYnBwKQogICAgICAibW92YiAoJTIsIiBQRFggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGNsCgogICAicGFldGhfcGFldGg6ICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgImluY2wgJSVlZHggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBSYXcoeCkgPSAoUGFldGgoeCkgKyBQYWV0aF9QcmVkaWN0b3IoIGEsIGIsIGMgKSkgbW9kIDI1NgogICAgICAiYWRkYiAlJWNsLCAtMSglMiwiIFBCWCAiLCkgIFxuXHQiCiAgICAgICJjbXBsICUlZWJwLCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgImpiIHBhZXRoX2xwMSAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgUkVTVE9SRV9yMTFfcjEyX3IxMwoKICAgInBhZXRoX2dvOiAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICBSRVNUT1JFX0Z1bGxMZW5ndGggIiUlZWN4ICAgIFxuXHQiIC8vIEZ1bGxMZW5ndGggLT4gZWN4CiAgICAgICJtb3ZsICUlZWN4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgInN1YmwgJSVlYngsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4CiAgICAgICJhbmRsICQweDAwMDAwMDA3LCAlJWVheCAgICAgXG5cdCIgLy8gY2FsYyBieXRlcyBvdmVyIG11bHQgb2YgOAogICAgICAic3VibCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIGRyb3Agb3ZlciBieXRlcyBmcm9tIG9yaWdpbmFsIGxlbmd0aAovL291dCAibW92bCAlJWVjeCwgTU1YTGVuZ3RoICAgICAgIFxuXHQiCiAgICAgICJtb3ZsICUlZWJwLCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gZWJwID0gZGlmZiwgYnV0IG5vIHJlZyBjb25zdHJhaW50KD8pCiAgICAgIFJFU1RPUkVfZWJwICAgICAgICAgICAgICAgICAgICAgICAgLy8gIChjb3VsZCBzd2FwIGVicCBhbmQgZWR4IGZ1bmN0aW9ucykKICAgICAgUkVTVE9SRV9yMTUKICAgICAgUkVTVE9SRV9HT1RfZWJ4CgogICAgICA6ICI9YyIgKE1NWExlbmd0aCksICAgICAgICAgICAgICAgIC8vIG91dHB1dCByZWdzCiAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgIj1hIiAoZGlmZikKCiAgICAgIDogIjAiIChicHApLCAgICAgICAgIC8vIGVjeCAgICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICIxIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpCiAgICAgICAgIjIiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKICAgICAgICAiMyIgKEZ1bGxMZW5ndGgpICAgLy8gZWF4CgogICAgICA6ICIlZWR4IiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgIF9DTE9CQkVSX3IxMV9yMTJfcjEzCiAgICAgICAgX0NMT0JCRVJfcjE1CiAgICAgICAgX0NMT0JCRVJfZWJwCiAgICAgICAgX0NMT0JCRVJfR09UX2VieAogICApOwoKICAgLy8gbm93IGRvIHRoZSBtYXRoIGZvciB0aGUgcmVzdCBvZiB0aGUgcm93CiAgIHN3aXRjaCAoYnBwKQogICB7CiAgICAgIGNhc2UgMzoKICAgICAgewovLyAgICAgICBfU2hpZnRCcHAgPSAyNDsgICAgLy8gPT0gYnBwICogOAovLyAgICAgICBfU2hpZnRSZW0gPSA0MDsgICAgLy8gPT0gNjQgLSBfU2hpZnRCcHAKCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCi8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWN4ICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlMSAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlMCAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IgogICAgICAgICAicGFldGhfM2xwOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3JscSAkNDAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgbGFzdCAzIGJ5dGVzIHRvIDFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgYnl0ZXMKICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTIgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBhCiAgICAgICAgICAgICJtb3ZxIC04KCUwLCIgUENYICIsKSwgJSVtbTMgXG5cdCIgLy8gcHJlcCBjPVByaW9yKHgtYnBwKSBieXRlcwogICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKICAgICAgICAgICAgInBzcmxxICQ0MCwgJSVtbTMgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBsYXN0IDMgYnl0ZXMgdG8gMXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBieXRlcwogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQogICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/CiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFja3Vzd2IgJSVtbTEsICUlbW03ICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0zICAgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQogICAgICAgICAgICAicGFuZCAiIEFNQVNLNV8zXzAgIiwgJSVtbTcgIFxuXHQiIC8vIF9hbWFzazVfM18wICh3YXMgX0FjdGl2ZU1hc2spCiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpIHN0ZXAgMQogICAgICAgICAgICAicGFkZGIgKCUxLCIgUENYICIsKSwgJSVtbTcgIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAoJTEsIiBQQ1ggIiwpICAgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IG1tMSB3aWxsIGJlIHVzZWQgYXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSYXcoeC1icHApCiAgICAgICAgICAgIC8vIG5vdyBkbyBQYWV0aCBmb3IgMm5kIHNldCBvZiBieXRlcyAoMy01KQogICAgICAgICAgICAicHNybHEgJDI0LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDIKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBhCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBiCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9CiAgICAgICAgICAgIC8vICAgICAgIHBhdiArIHBidiA9IHBidiArIHBhdgogICAgICAgICAgICAibW92cSAlJW1tNSwgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tNCwgJSVtbTYgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQogICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTIgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApIHN0ZXAgMQogICAgICAgICAgICAicGFuZCAiIEFNQVNLNV8zXzAgIiwgJSVtbTcgIFxuXHQiIC8vIF9hbWFzazVfM18wICh3YXMgX0FjdGl2ZU1hc2spCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNyAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGJ5dGVzIHRvIDJuZCBncm91cCBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgYnl0ZXMKICAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgKCUxLCIgUENYICIsKSwgJSVtbTcgIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTMgICAgICAgICAgICBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApIHN0ZXAgMgogICAgICAgICAgICAibW92cSAlJW1tNywgKCUxLCIgUENYICIsKSAgIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGJ5dGVzICh3YXMgX1NoaWZ0QnBwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3cgbW0xIHdpbGwgYmUgdXNlZCBhcyBSYXcoeC1icHApCiAgICAgICAgICAgIC8vIG5vdyBkbyBQYWV0aCBmb3IgM3JkLCBhbmQgZmluYWwsIHNldCBvZiBieXRlcyAoNi03KQogICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYQogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQogICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tNywgJSVtbTEgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gc3RlcCBlY3ggdG8gbmV4dCBzZXQgb2YgOCBieXRlcyBhbmQgcmVwZWF0IGxvb3AgdGlsIGRvbmUKICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAiIEFNQVNLMF8yXzYgIiwgJSVtbTEgIFxuXHQiIC8vIF9hbWFzazBfMl82IChfQWN0aXZlTWFza0VuZCkKICAgICAgICAgICAgInBhZGRiIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIHB4b3IgZG9lcyBub3QgYWZmZWN0IGZsYWdzCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW0zIHJlYWR5IHRvIGJlIHVzZWQgYXMgUHJpb3IoeC1icHApIG5leHQgbG9vcAogICAgICAgICAgICAiamIgcGFldGhfM2xwICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaS9yc2kgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAvLyBlZGkvcmRpCiAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAvLyBlY3gKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDMgYnBwCgogICAgICBjYXNlIDQ6CiAgICAgIHsKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsIHJvdywgJTEgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQovLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJTAgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2kKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyBvbmx5IHRpbWUgc2hvdWxkIG5lZWQgdG8gcmVhZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBhPVJhdyh4LWJwcCkgYnl0ZXMKICAgICAgICAgInBhZXRoXzRscDogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBkbyBmaXJzdCBzZXQgb2YgNCBieXRlcwogICAgICAgICAgICAibW92cSAtOCglMCwiIFBDWCAiLCksICUlbW0zIFxuXHQiIC8vIHJlYWQgYz1Qcmlvcih4LWJwcCkgYnl0ZXMKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGEKICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTIgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBiCiAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGMKICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMSwgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQogICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW00LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCiAgICAgICAgICAgICJwYW5kICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0wLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhY2t1c3diICUlbW0xLCAlJW1tNyAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMyAgIFxuXHQiIC8vIGxvYWQgYz1Qcmlvcih4LWJwcCkKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICJwYW5kICIgQU1BU0s0XzRfMCAiLCAlJW1tNyAgXG5cdCIgLy8gX2FtYXNrNF80XzAgKHdhcyBfQWN0aXZlTWFzaykKICAgICAgICAgICAgUkVTVE9SRV9yYnAKICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkgc3RlcCAxCiAgICAgICAgICAgICJwYWRkYiAoJTEsIiBQQ1ggIiwpLCAlJW1tNyAgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQogICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgbW0xIHdpbGwgYmUgdXNlZCBhcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhdyh4LWJwcCkKICAgICAgICAgICAgLy8gZG8gc2Vjb25kIHNldCBvZiA0IGJ5dGVzCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBiCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBhCiAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQogICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/CiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHN0ZXAgZWN4IHRvIG5leHQgc2V0IG9mIDggYnl0ZXMgYW5kIHJlcGVhdCBsb29wIHRpbCBkb25lCiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhY2t1c3diICUlbW03LCAlJW1tMSAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyBhZGQgcHJlZGljdG9yIHdpdGggUmF3KHgpCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKICAgICAgICAgICAgImpiIHBhZXRoXzRscCAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKCiAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kvcnNpICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgLy8gZWRpL3JkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAvLyBlYXgKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCA0IGJwcAoKICAgICAgY2FzZSAxOgogICAgICBjYXNlIDI6CiAgICAgIHsKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVheCAgICAgICAgICAgIFxuXHQiIC8vIGVheDogeCA9IG9mZnNldCB0byBhbGlnbi4gYmRyeQovLyBwcmVsb2FkICAibW92bCBGdWxsTGVuZ3RoLCAlJWVkeCAgICAgIFxuXHQiCiAgICAgICAgICAgICJjbXBsICUlZWR4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImpuYiBwYWV0aF9kZW5kICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgU0FWRV9lYnAKCi8vIHByZWxvYWQgICJtb3ZsIHJvdywgJTIgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQogICAgICAgICAgICAvLyBkbyBQYWV0aCBkZWNvZGUgZm9yIHJlbWFpbmluZyBieXRlcwovLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJTEgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2kKICAgICAgICAgICAgIm1vdmwgJSVlYXgsICUlZWJwICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAic3VibCBicHAsICUlZWJwICAgICAgICAgICAgIFxuXHQiIC8vIChicHAgaXMgcHJlbG9hZGVkIGludG8gZWN4KQogICAgICAgICAgICAic3VibCAlJWVjeCwgJSVlYnAgICAgICAgICAgIFxuXHQiIC8vIGVicCA9IGVheCAtIGJwcAogICAgICAgICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHplcm8gZWN4IGJlZm9yZSB1c2luZyBjbCAmIGN4CgogICAgICAgICAgICBTQVZFX0dPVF9lYngKICAgICAgICAgICAgU0FWRV9yMTFfcjEyX3IxMwoKICAgICAgICAgInBhZXRoX2RscDogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgIm1vdmIgKCUxLCIgUEFYICIsKSwgJSVibCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gYmwKICAgICAgICAgICAgIm1vdmIgKCUxLCIgUEJQICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICAgICAgICJzdWJsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCiAgICAgICAgICAgICJtb3ZsICUlZWJ4LCAiIHBhX1RFTVAgIiAgICAgXG5cdCIgLy8gU2F2ZSBwYXYgZm9yIGxhdGVyIHVzZQogICAgICAgICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdmIgKCUyLCIgUEJQICIsKSwgJSVibCAgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBibAogICAgICAgICAgICAic3VibCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQogICAgICAgICAgICAibW92bCAlJWVieCwgJSVlY3ggICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgogICAgICAgICAgICAiYWRkbCAiIHBhX1RFTVAgIiwgJSVlYnggICAgIFxuXHQiIC8vIHBjdiA9IHBhdiArIHBidgogICAgICAgICAgICAvLyBwYyA9IGFicyhwY3YpCiAgICAgICAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYnggICAgXG5cdCIKICAgICAgICAgICAgImp6IHBhZXRoX2RwY2EgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibmVnbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAgICAgICAicGFldGhfZHBjYTogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZsICUlZWJ4LCAiIHBjX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYyBmb3IgbGF0ZXIgdXNlCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHBidikKICAgICAgICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVjeCAgICBcblx0IgogICAgICAgICAgICAianogcGFldGhfZHBiYSAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJuZWdsICUlZWN4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKCiAgICAgICAgICJwYWV0aF9kcGJhOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdmwgJSVlY3gsICIgcGJfVEVNUCAiICAgICBcblx0IiAvLyBzYXZlIHBiIGZvciBsYXRlciB1c2UKICAgICAgICAgICAgLy8gcGEgPSBhYnMocGF2KQogICAgICAgICAgICAibW92bCAiIHBhX1RFTVAgIiwgJSVlYnggICAgIFxuXHQiCiAgICAgICAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYnggICAgXG5cdCIKICAgICAgICAgICAgImp6IHBhZXRoX2RwYWEgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibmVnbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAgICAgICAicGFldGhfZHBhYTogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZsICUlZWJ4LCAiIHBhX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYSBmb3IgbGF0ZXIgdXNlCiAgICAgICAgICAgIC8vIHRlc3QgaWYgcGEgPD0gcGIKICAgICAgICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiam5hIHBhZXRoX2RhYmIgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhID4gcGI7IG5vdyB0ZXN0IGlmIHBiIDw9IHBjCiAgICAgICAgICAgICJjbXBsICIgcGNfVEVNUCAiLCAlJWVjeCAgICAgXG5cdCIKICAgICAgICAgICAgImpuYSBwYWV0aF9kYmJjICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYiA+IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgtYnBwKQogICAgICAgICAgICAibW92YiAoJTEsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKICAgICAgICAgICAgImptcCBwYWV0aF9kcGFldGggICAgICAgICAgICBcblx0IgoKICAgICAgICAgInBhZXRoX2RiYmM6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYiA8PSBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4KQogICAgICAgICAgICAibW92YiAoJTEsIiBQQVggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBjbAogICAgICAgICAgICAiam1wIHBhZXRoX2RwYWV0aCAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAicGFldGhfZGFiYjogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhIDw9IHBiOyBub3cgdGVzdCBpZiBwYSA8PSBwYwogICAgICAgICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlYnggICAgIFxuXHQiCiAgICAgICAgICAgICJqbmEgcGFldGhfZGFiYyAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGEgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKICAgICAgICAgICAgIm1vdmIgKCUxLCIgUEJQICIsKSwgJSVjbCAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKICAgICAgICAgICAgImptcCBwYWV0aF9kcGFldGggICAgICAgICAgICBcblx0IgoKICAgICAgICAgInBhZXRoX2RhYmM6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA8PSBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBSYXcoeC1icHApCiAgICAgICAgICAgICJtb3ZiICglMiwiIFBCUCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBSYXcoeC1icHApIGludG8gY2wKCiAgICAgICAgICJwYWV0aF9kcGFldGg6ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImluY2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiaW5jbCAlJWVicCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIFJhdyh4KSA9IChQYWV0aCh4KSArIFBhZXRoX1ByZWRpY3RvciggYSwgYiwgYyApKSBtb2QgMjU2CiAgICAgICAgICAgICJhZGRiICUlY2wsIC0xKCUyLCIgUEFYICIsKSAgXG5cdCIKICAgICAgICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBjaGVjayBhZ2FpbnN0IEZ1bGxMZW5ndGgKICAgICAgICAgICAgImpiIHBhZXRoX2RscCAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgUkVTVE9SRV9yMTFfcjEyX3IxMwogICAgICAgICAgICBSRVNUT1JFX0dPVF9lYngKICAgICAgICAgICAgUkVTVE9SRV9lYnAKCiAgICAgICAgICJwYWV0aF9kZW5kOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpLAogICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpCgogICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAvLyBlY3ggICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICIyIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCiAgICAgICAgICAgICAgIjMiIChkaWZmKSwgICAgICAgIC8vIGVheAogICAgICAgICAgICAgICI0IiAoRnVsbExlbmd0aCkgICAvLyBlZHgKCiAgICAgICAgICAgIENMT0JfQ09MT05fZWJ4X2VicF9yMVggICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICAgQ0xPQkJFUl9HT1RfZWJ4CiAgICAgICAgICAgICAgQ0xPQl9DT01NQV9lYnhfZWJwCiAgICAgICAgICAgICAgQ0xPQkJFUl9lYnAKICAgICAgICAgICAgICBDTE9CX0NPTU1BX2ViWF9yMVgKICAgICAgICAgICAgICBDTE9CQkVSX3IxMV9yMTJfcjEzCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgcmV0dXJuOyAvLyBlbmQgMSBvciAyIGJwcCAobm8gbmVlZCB0byBnbyBmdXJ0aGVyIHdpdGggdGhpcyBvbmUpCgogICAgICBjYXNlIDY6CiAgICAgIHsKLy8gICAgICAgX0FjdGl2ZU1hc2syID0gMHhmZmZmZmZmZjAwMDAwMDAwTEw7ICAvLyBOT1QgVVNFRCAoIl9hbWFza18wXzRfNCIpCi8vICAgICAgIF9TaGlmdEJwcCA9IDQ4OyAgICAgICAvLyBicHAgPDwgMyA9PSBicHAgKiA4Ci8vICAgICAgIF9TaGlmdFJlbSA9IDE2OyAgICAgICAvLyA2NCAtIF9TaGlmdEJwcAoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsIHJvdywgJTEgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQovLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJTAgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2kKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgoKICAgICAgICAgInBhZXRoXzZscDogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBtdXN0IHNoaWZ0IHRvIHBvc2l0aW9uIFJhdyh4LWJwcCkgZGF0YQogICAgICAgICAgICAicHNybHEgJDE2LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHdhcyBfU2hpZnRSZW0KICAgICAgICAgICAgLy8gZG8gZmlyc3Qgc2V0IG9mIDQgYnl0ZXMKICAgICAgICAgICAgIm1vdnEgLTgoJTAsIiBQQ1ggIiwpLCAlJW1tMyBcblx0IiAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBhCiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBiCiAgICAgICAgICAgIC8vIG11c3Qgc2hpZnQgdG8gcG9zaXRpb24gUHJpb3IoeC1icHApIGRhdGEKICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTMgICAgICAgICAgICBcblx0IiAvLyB3YXMgX1NoaWZ0UmVtCiAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYwogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQogICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/CiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFja3Vzd2IgJSVtbTEsICUlbW03ICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxIC04KCUwLCIgUENYICIsKSwgJSVtbTMgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgInBhbmQgIiBBTUFTSzRfNF8wICIsICUlbW03ICBcblx0IiAvLyBfYW1hc2s0XzRfMCAod2FzIF9BY3RpdmVNYXNrKQogICAgICAgICAgICBSRVNUT1JFX3JicAogICAgICAgICAgICAicHNybHEgJDE2LCAlJW1tMyAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpIHN0ZXAgMQogICAgICAgICAgICAicGFkZGIgKCUxLCIgUENYICIsKSwgJSVtbTcgIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAlJW1tNywgKCUxLCIgUENYICIsKSAgIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQogICAgICAgICAgICAibW92cSAtOCglMSwiIFBDWCAiLCksICUlbW0xIFxuXHQiCiAgICAgICAgICAgICJwc2xscSAkNDgsICUlbW02ICAgICAgICAgICAgXG5cdCIgLy8gYnBwICogOCA9IGJpdHMgcGVyIHBpeGVsCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyA2NCAtIChicHAgKiA4KSA9IHJlbWFpbmRlcgogICAgICAgICAgICAicG9yICUlbW02LCAlJW1tMyAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc2xscSAkNDgsICUlbW01ICAgICAgICAgICAgXG5cdCIgLy8gd2FzIF9TaGlmdEJwcAogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGMKICAgICAgICAgICAgInBvciAlJW1tNSwgJSVtbTEgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBkbyBzZWNvbmQgc2V0IG9mIDQgYnl0ZXMKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBiCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYQogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMSwgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQogICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW00LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCiAgICAgICAgICAgICJwYW5kICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0wLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBzdGVwIGVjeCB0byBuZXh0IHNldCBvZiA4IGJ5dGVzIGFuZCByZXBlYXQgbG9vcCB0aWwgZG9uZQogICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tNywgJSVtbTEgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAibW92cSAlJW1tMSwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCiAgICAgICAgICAgICJqYiBwYWV0aF82bHAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgLy8gZXNpL3JzaSAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgIC8vIGVkaS9yZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgIC8vIGVjeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgLy8gZWF4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgNiBicHAKCiAgICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJwcCA9PSA4CiAgICAgIHsKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsIHJvdywgJTEgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQovLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJTAgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2kKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyBvbmx5IHRpbWUgc2hvdWxkIG5lZWQgdG8gcmVhZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBhPVJhdyh4LWJwcCkgYnl0ZXMKICAgICAgICAgInBhZXRoXzhscDogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBkbyBmaXJzdCBzZXQgb2YgNCBieXRlcwogICAgICAgICAgICAibW92cSAtOCglMCwiIFBDWCAiLCksICUlbW0zIFxuXHQiIC8vIHJlYWQgYz1Qcmlvcih4LWJwcCkgYnl0ZXMKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGEKICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTIgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGIKICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBjCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCiAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQogICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgLTgoJTAsIiBQQ1ggIiwpLCAlJW1tMyBcblx0IiAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCiAgICAgICAgICAgIExPQURfR09UX3JicAogICAgICAgICAgICAicGFuZCAiIEFNQVNLNF80XzAgIiwgJSVtbTcgIFxuXHQiIC8vIF9hbWFzazRfNF8wICh3YXMgX0FjdGl2ZU1hc2spCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICJwYWRkYiAoJTEsIiBQQ1ggIiwpLCAlJW1tNyAgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyByZWFkIGE9UmF3KHgtYnBwKSBieXRlcwoKICAgICAgICAgICAgLy8gZG8gc2Vjb25kIHNldCBvZiA0IGJ5dGVzCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMSAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGEKICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCiAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQogICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gc3RlcCBlY3ggdG8gbmV4dCBzZXQgb2YgOCBieXRlcyBhbmQgcmVwZWF0IGxvb3AgdGlsIGRvbmUKICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFja3Vzd2IgJSVtbTcsICUlbW0xICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAtOCglMSwiIFBDWCAiLCksICUlbW0xIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTEsIC04KCUxLCIgUENYICIsKSBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW0xIHdpbGwgYmUgdXNlZCBhcyBSYXcoeC1icHApIG5leHQgbG9vcAogICAgICAgICAgICAiamIgcGFldGhfOGxwICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaS9yc2kgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAvLyBlZGkvcmRpCiAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAvLyBlY3gKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDggYnBwCgogICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvLyBicHAgIT0gMSwyLDMsNCw2LDg6ICBkb2Vzbid0IGV4aXN0CiAgICAgIHsKICAgICAgICAgLy8gRVJST1I6ICBTSE9VTEQgTkVWRVIgQkUgUkVBQ0hFRAojaWYgZGVmaW5lZChQTkdfREVCVUcpCiAgICAgICAgIHBuZ19kZWJ1ZygxLCAiSW50ZXJuYWwgbGlicG5nIGxvZ2ljIGVycm9yIChHQ0MgIgogICAgICAgICAgICJwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpKVxuIik7CiNlbmRpZgogICAgICB9CiAgICAgIGJyZWFrOwoKICAgfSAvLyBlbmQgc3dpdGNoIChicHApCgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgIC8vIE1NWCBhY2NlbGVyYXRpb24gY29tcGxldGU7IG5vdyBkbyBjbGVhbi11cAogICAgICAvLyBjaGVjayBpZiBhbnkgcmVtYWluaW5nIGJ5dGVzIGxlZnQgdG8gZGVjb2RlCi8vcHJlICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWR4ICAgICAgXG5cdCIKLy9wcmUgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICBcblx0IgogICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgICJqbmIgcGFldGhfZW5kICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgIFNBVkVfZWJwCgovL3ByZSAibW92bCByb3csICUyICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKLy9wcmUgIm1vdmwgcHJldl9yb3csICUxICAgICAgICAgICBcblx0IiAvLyBlc2kvcnNpCiAgICAgIC8vIGRvIFBhZXRoIGRlY29kZSBmb3IgcmVtYWluaW5nIGJ5dGVzCiAgICAgICJtb3ZsICUlZWF4LCAlJWVicCAgICAgICAgICAgXG5cdCIKLy9wcmUgInN1YmwgYnBwLCAlJWVicCAgICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKICAgICAgInN1YmwgJSVlY3gsICUlZWJwICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBlYXggLSBicHAKICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyB6ZXJvIGVjeCBiZWZvcmUgdXNpbmcgY2wgJiBjeCBiZWxvdwoKICAgICAgU0FWRV9HT1RfZWJ4CiAgICAgIFNBVkVfcjExX3IxMl9yMTMKCiAgICJwYWV0aF9scDI6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICJtb3ZiICglMSwiIFBBWCAiLCksICUlYmwgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4KSBpbnRvIGJsCiAgICAgICJtb3ZiICglMSwiIFBCUCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAogICAgICAic3VibCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQogICAgICAibW92bCAlJWVieCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIFNhdmUgcGF2IGZvciBsYXRlciB1c2UKICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICJtb3ZiICglMiwiIFBCUCAiLCksICUlYmwgICAgXG5cdCIgLy8gbG9hZCBSYXcoeC1icHApIGludG8gYmwKICAgICAgInN1YmwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKICAgICAgIm1vdmwgJSVlYngsICUlZWN4ICAgICAgICAgICBcblx0IgogICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC0gYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICJhZGRsICIgcGFfVEVNUCAiLCAlJWVieCAgICAgXG5cdCIgLy8gcGN2ID0gcGF2ICsgcGJ2CiAgICAgIC8vIHBjID0gYWJzKHBjdikKICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVieCAgICBcblx0IgogICAgICAianogcGFldGhfcGNhMiAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJuZWdsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKCiAgICJwYWV0aF9wY2EyOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmwgJSVlYngsICIgcGNfVEVNUCAiICAgICBcblx0IiAvLyBzYXZlIHBjIGZvciBsYXRlciB1c2UKICAgICAgLy8gcGIgPSBhYnMocGJ2KQogICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWN4ICAgIFxuXHQiCiAgICAgICJqeiBwYWV0aF9wYmEyICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm5lZ2wgJSVlY3ggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgInBhZXRoX3BiYTI6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAibW92bCAlJWVjeCwgIiBwYl9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGIgZm9yIGxhdGVyIHVzZQogICAgICAvLyBwYSA9IGFicyhwYXYpCiAgICAgICJtb3ZsICIgcGFfVEVNUCAiLCAlJWVieCAgICAgXG5cdCIKICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVieCAgICBcblx0IgogICAgICAianogcGFldGhfcGFhMiAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJuZWdsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKCiAgICJwYWV0aF9wYWEyOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmwgJSVlYngsICIgcGFfVEVNUCAiICAgICBcblx0IiAvLyBzYXZlIHBhIGZvciBsYXRlciB1c2UKICAgICAgLy8gdGVzdCBpZiBwYSA8PSBwYgogICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICJqbmEgcGFldGhfYWJiMiAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGEgPiBwYjsgbm93IHRlc3QgaWYgcGIgPD0gcGMKICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWN4ICAgICBcblx0IgogICAgICAiam5hIHBhZXRoX2JiYzIgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBiID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCiAgICAgICJtb3ZiICglMSwiIFBCUCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAogICAgICAiam1wIHBhZXRoX3BhZXRoMiAgICAgICAgICAgIFxuXHQiCgogICAicGFldGhfYmJjMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBiIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgpCiAgICAgICJtb3ZiICglMSwiIFBBWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4KSBpbnRvIGNsCiAgICAgICJqbXAgcGFldGhfcGFldGgyICAgICAgICAgICAgXG5cdCIKCiAgICJwYWV0aF9hYmIyOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGEgPD0gcGI7IG5vdyB0ZXN0IGlmIHBhIDw9IHBjCiAgICAgICJjbXBsICIgcGNfVEVNUCAiLCAlJWVieCAgICAgXG5cdCIKICAgICAgImpuYSBwYWV0aF9hYmMyICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYSA+IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgtYnBwKQogICAgICAibW92YiAoJTEsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKICAgICAgImptcCBwYWV0aF9wYWV0aDIgICAgICAgICAgICBcblx0IgoKICAgInBhZXRoX2FiYzI6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYSA8PSBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBSYXcoeC1icHApCiAgICAgICJtb3ZiICglMiwiIFBCUCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBSYXcoeC1icHApIGludG8gY2wKCiAgICJwYWV0aF9wYWV0aDI6ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgImluY2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiaW5jbCAlJWVicCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIFJhdyh4KSA9IChQYWV0aCh4KSArIFBhZXRoX1ByZWRpY3RvciggYSwgYiwgYyApKSBtb2QgMjU2CiAgICAgICJhZGRiICUlY2wsIC0xKCUyLCIgUEFYICIsKSAgXG5cdCIKICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBjaGVjayBhZ2FpbnN0IEZ1bGxMZW5ndGgKICAgICAgImpiIHBhZXRoX2xwMiAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgUkVTVE9SRV9yMTFfcjEyX3IxMwogICAgICBSRVNUT1JFX0dPVF9lYngKICAgICAgUkVTVE9SRV9lYnAKCiAgICJwYWV0aF9lbmQ6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBlbmQgTU1YOyBwcmVwIGZvciBwb3NzLiBGUCBpbnN0cnMuCgogICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKQoKICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gZWN4ICAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgIjEiIChwcmV2X3JvdyksICAgIC8vIGVzaS9yc2kKICAgICAgICAiMiIgKHJvdyksICAgICAgICAgLy8gZWRpL3JkaQogICAgICAgICIzIiAoTU1YTGVuZ3RoKSwgICAvLyBlYXgKICAgICAgICAiNCIgKEZ1bGxMZW5ndGgpICAgLy8gZWR4CgogICAgICBDTE9CX0NPTE9OX2VieF9lYnBfcjFYICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgIENMT0JCRVJfR09UX2VieAogICAgICAgIENMT0JfQ09NTUFfZWJ4X2VicAogICAgICAgIENMT0JCRVJfZWJwCiAgICAgICAgQ0xPQl9DT01NQV9lYlhfcjFYCiAgICAgICAgQ0xPQkJFUl9yMTFfcjEyX3IxMwogICApOwoKfSAvKiBlbmQgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKSAqLwoKI2VuZGlmIC8vIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIHx8IFBOR19USFJFQURfVU5TQUZFX09LCiNlbmRpZiAvKiBQTkdfTU1YX1JFQURfRklMVEVSX1BBRVRIX1NVUFBPUlRFRCAqLwoKCgoKI2lmIGRlZmluZWQoUE5HX01NWF9SRUFEX0ZJTFRFUl9TVUJfU1VQUE9SVEVEKQoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi8vICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXIF8gTSBNIFggXyBTIFUgQiAgICAgICAgICAgLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCgovLyBPcHRpbWl6ZWQgY29kZSBmb3IgUE5HIFN1YiBmaWx0ZXIgZGVjb2RlcgoKc3RhdGljIHZvaWQgLyogUFJJVkFURSAqLwpwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIocG5nX3Jvd19pbmZvcCByb3dfaW5mbywgcG5nX2J5dGVwIHJvdykKewogICB1bnNpZ25lZCBGdWxsTGVuZ3RoLCBNTVhMZW5ndGg7ICAvLyBwbmdfdWludF8zMiBpcyBhY3R1YWxseSA2NC1iaXQgb24geDg2LTY0CiAgIGludCBicHA7CiAgIGludCBkdW1teV92YWx1ZV9hOwogICBpbnQgZHVtbXlfdmFsdWVfYzsKICAgaW50IGR1bW15X3ZhbHVlX2Q7CiAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9EOwogICBpbnQgZGlmZjsgLy8gICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKTsKCiAgIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOyAgLy8gY2FsYyBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsCiAgIEZ1bGxMZW5ndGggPSByb3dfaW5mby0+cm93Ynl0ZXMgLSBicHA7ICAgLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIGZpbHRlcgogICAgIC8vICh3aHkgZG8gd2Ugc3VidHJhY3Qgb2ZmIGJwcD8gIG5vdCBzbyBpbiBhdmcgb3IgcGFldGguLi4pCgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgIFNBVkVfcjE1CiAgICAgIFNBVkVfZWJwCi8vcHJlICJtb3ZsIHJvdywgJTEgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQogICAgICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci8vcHJlICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgXG5cdCIKICAgICAgImFkZCAgIiBQQ1ggIiwgJTEgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAovL3ByZSAibW92bCBGdWxsTGVuZ3RoLCAlJWVheCAgICAgIFxuXHQiIC8vIGJyaW5nIGluIHZpYSBlYXguLi4KICAgICAgU0FWRV9GdWxsTGVuZ3RoICAgICAgICAgICAgICAgICAgICAvLyAuLi5idXQgc3RvcmUgZm9yIGxhdGVyIHVzZQoKICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgoKICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50IChub3RlOiAgY29tcHV0aW5nIF9kZWx0YV8gb2YgdHdvIHBvaW50ZXJzLAogICAgICAvLyBzbyBoZXJlYWZ0ZXIgJSVlYnAgaXMgc3VmZmljaWVudCBldmVuIG9uIDY0LWJpdCkKICAgICAgIm1vdiAgJTEsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyB0YWtlIHN0YXJ0IG9mIHJvdwogICAgICAiYWRkICAkMHhmLCAiIFBCUCAiICAgICAgICAgIFxuXHQiIC8vIGFkZCA3KzggdG8gaW5jciBwYXN0IGFsaWdubWVudCBiZHJ5Ci8vICAgICJhbmRsICQweGZmZmZmZmY4LCAlJWVicCAgICAgXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkgKDMyLWJpdCEpCiAgICAgIENMRUFSX0JPVFRPTV8zX0JJVFMgIFBCUCAgICAiXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgInN1YiAgJTEsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCByb3cgcHRyIGFnYWluID0+IGVicCA9CiAgICAgICJqeiBzdWJfZ28gICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIHRhcmdldCB2YWx1ZSBvZiBlYXggYXQgYWxpZ25tZW50CgogICAic3ViX2xwMTogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGZpeCBhbGlnbm1lbnQKICAgICAgIm1vdmIgKCIgUFNJICIsIiBQQVggIiwpLCAlJWNsIFxuXHQiCiAgICAgICJhZGRiICUlY2wsICglMSwiIFBBWCAiLCkgICAgXG5cdCIKICAgICAgImluY2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiY21wbCAlJWVicCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgICJqYiBzdWJfbHAxICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICJzdWJfZ286ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgUkVTVE9SRV9GdWxsTGVuZ3RoICIlJWVjeCAgICBcblx0IiAvLyBGdWxsTGVuZ3RoIC0+IGVjeAogICAgICAibW92bCAlJWVjeCwgJSVlZHggICAgICAgICAgIFxuXHQiCiAgICAgICJzdWJsICUlZWF4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgYWxpZ25tZW50IGZpeAogICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlZHggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKICAgICAgInN1YmwgJSVlZHgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBkcm9wIG92ZXIgYnl0ZXMgZnJvbSBsZW5ndGgKLy9vdXQgIm1vdmwgJSVlY3gsIE1NWExlbmd0aCAgICAgICBcblx0IgogICAgICAibW92bCAlJWVicCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIGVicCA9IGRpZmYsIGJ1dCBubyByZWcgY29uc3RyYWludCg/KQogICAgICBSRVNUT1JFX2VicCAgICAgICAgICAgICAgICAgICAgICAgIC8vICAoY291bGQgc3dhcCBlYnAgYW5kIGVjeCBmdW5jdGlvbnMsCiAgICAgIFJFU1RPUkVfcjE1ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGJ1dCAlJWNsIGlzc3Vlcy4uLikKCiAgICAgIDogIj1jIiAoTU1YTGVuZ3RoKSwgICAgICAgLy8gMCAgICAgLy8gb3V0cHV0IHJlZ3MKICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCiAgICAgICAgIj1hIiAoZGlmZikgICAgICAgICAgICAgLy8gMgoKICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAvLyBpbnB1dCByZWdzCiAgICAgICAgIjEiIChyb3cpLCAgICAgICAgICAgICAgLy8gZWRpCiAgICAgICAgIjIiIChGdWxsTGVuZ3RoKSAgICAgICAgLy8gZWF4CgogICAgICA6ICIlZXNpIiwgIiVlZHgiICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgIF9DTE9CQkVSX3IxNQogICAgICAgIF9DTE9CQkVSX2VicAogICApOwoKICAgLy8gbm93IGRvIHRoZSBtYXRoIGZvciB0aGUgcmVzdCBvZiB0aGUgcm93CiAgIHN3aXRjaCAoYnBwKQogICB7CiAgICAgIGNhc2UgMzoKICAgICAgewovLyAgICAgICBfU2hpZnRCcHAgPSAyNDsgICAgICAgLy8gPT0gMyAqIDgKLy8gICAgICAgX1NoaWZ0UmVtICA9IDQwOyAgICAgIC8vID09IDY0IC0gMjQKCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdiAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgLy8gbG9hZCAoZm9ybWVyKSBfQWN0aXZlTWFzayBmb3IgMm5kIGFjdGl2ZSBieXRlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICIgQU1BU0syXzNfMyAiLCAlJW1tNyAgIFxuXHQiIC8vIF9hbWFzazJfM18zCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCgovLyBub3R1c2VkICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwovLyBwcmVsb2FkICAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTYgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBtb3ZlIG1hc2sgaW4gbW02IHRvIGNvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAzcmQgYWN0aXZlIGJ5dGUgZ3JvdXAKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUERYICIsKSwgJSVtbTEgIFxuXHQiCgogICAgICAgICAic3ViXzNscDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIGZvciBhZGRpbmcgZmlyc3QKICAgICAgICAgICAgInBzcmxxICQ0MCwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gIGJwcCBieXRlcyAobm8gbmVlZCBmb3IgbWFzazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHNoaWZ0IGNsZWFycyBpbmFjdGl2ZSBieXRlcykKICAgICAgICAgICAgLy8gYWRkIDFzdCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgIm1vdnEgKCUxLCIgUERYICIsKSwgJSVtbTAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCiAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbWFzayB0byB1c2UgMm5kIGFjdGl2ZSBncm91cAogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gYWRkIDNyZCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtYXNrIHRvIHVzZSAzcmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVkeCAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAogICAgICAgICAgICAiamIgc3ViXzNscCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwoKICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW02IiwgIiVtbTciICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCAzIGJwcAoKICAgICAgY2FzZSA0OiAgIC8vIGZvcm1lcmx5IHNoYXJlZCB3aXRoIDYgYnBwIGNhc2UgdmlhIF9TaGlmdEJwcCBhbmQgX1NoaWZ0UmVtLAogICAgICB7ICAgICAgICAgLy8gYnV0IDY0LWJpdCBQSUMvLnNvIHByb2JsZW1zIChjb3VsZCBzdGlsbCBzaGFyZSwgbW92aW5nIHZhcnMKICAgICAgICAgICAgICAgIC8vIGludG8gdW51c2VkIE1NWCByZWdzIHZpYSBlY3gvZWR4LCBidXQga2x1ZGd5KQovLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDMyIChwc2xscSkKLy8gICAgICAgX1NoaWZ0UmVtID0gNjQgLSBfU2hpZnRCcHA7ICAvLyAzMiAocHNybHEpCgogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi8vIHByZWxvYWQgICJtb3YgIHJvdywgJTEgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKLy8gbm90dXNlZCAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLy8gcHJlbG9hZCAgIm1vdmwgYnBwLCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImFkZCAgIiBQQ1ggIiwgJTEgICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglMSwiIFBEWCAiLCksICUlbW0xICBcblx0IgoKICAgICAgICAgInN1Yl80bHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSBmb3IgYWRkaW5nIGZpcnN0CiAgICAgICAgICAgICJwc3JscSAkMzIsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vICBicHAgYnl0ZXMgKG5vIG5lZWQgZm9yIG1hc2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMpCiAgICAgICAgICAgICJtb3ZxICglMSwiIFBEWCAiLCksICUlbW0wICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cAogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQogICAgICAgICAgICAicHNsbHEgJDMyLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVkeCAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAogICAgICAgICAgICAiamIgc3ViXzRscCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwoKICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCA0IGJwcAoKICAgICAgY2FzZSAxOgogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3YgIHJvdywgJTEgICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi8vIHByZWxvYWQgICJjbXBsIEZ1bGxMZW5ndGgsICUlZWR4ICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImpuYiBzdWJfMWVuZCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3YgICUxLCAiIFBTSSAiICAgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwovLyBpcnJlbC4gICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gKGFjdHVhbGx5IGJ1ZyB3aXRoIHByZWxvYWQpCi8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKCiAgICAgICAgICJzdWJfMWxwOiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92YiAoIiBQU0kgIiwiIFBEWCAiLCksICUlY2wgXG5cdCIKICAgICAgICAgICAgImFkZGIgJSVjbCwgKCUxLCIgUERYICIsKSAgICAgIFxuXHQiCiAgICAgICAgICAgICJpbmNsICUlZWR4ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICAgXG5cdCIgLy8gY29tcGFyZSB3aXRoIEZ1bGxMZW5ndGgKICAgICAgICAgICAgImpiIHN1Yl8xbHAgICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAic3ViXzFlbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCiAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMgogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKCiAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAiMyIgKEZ1bGxMZW5ndGgpICAgICAgICAvLyBlYXgKCiAgICAgICAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICApOwogICAgICB9CiAgICAgIHJldHVybjsgIC8vIGVuZCAxIGJwcCAoYnlwYXNzaW5nIGNsZWFudXAgYmxvY2shKQoKICAgICAgY2FzZSAyOgogICAgICB7Ci8vICAgICAgIF9TaGlmdEJwcCA9IDE2OyAgICAgICAvLyA9PSAyICogOAovLyAgICAgICBfU2hpZnRSZW0gPSA0ODsgICAgICAgLy8gPT0gNjQgLSAxNgoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgLy8gbG9hZCAoZm9ybWVyKSBfQWN0aXZlTWFzayBmb3IgMm5kIGFjdGl2ZSBieXRlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICIgQU1BU0s0XzJfMiAiLCAlJW1tNyAgIFxuXHQiIC8vIF9hbWFzazRfMl8yCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCi8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWR4ICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tNiAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3YgIHJvdywgJTEgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTYgICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBtYXNrIGluIG1tNiB0byBjb3ZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgM3JkIGFjdGl2ZSBieXRlIGdyb3VwCi8vIG5vdHVzZWQgICJtb3YgICUxLCAiIFBTSSAiICAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93CiAgICAgICAgICAgICJtb3ZxICUlbW02LCAlJW1tNSAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJhZGQgICIgUENYICIsICUxICAgICAgICAgICAgIFxuXHQiIC8vIHJwID0gcm93ICsgYnBwCiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW01ICAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgbWFzayBpbiBtbTUgdG8gY292ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDR0aCBhY3RpdmUgYnl0ZSBncm91cAogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQRFggIiwpLCAlJW1tMSAgXG5cdCIKCiAgICAgICAgICJzdWJfMmxwOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgZm9yIGFkZGluZyBmaXJzdAogICAgICAgICAgICAicHNybHEgJDQ4LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyAgYnBwIGJ5dGVzIChubyBuZWVkIGZvciBtYXNrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgc2hpZnQgY2xlYXJzIGluYWN0aXZlIGJ5dGVzKQogICAgICAgICAgICAvLyBhZGQgMXN0IGFjdGl2ZSBncm91cAogICAgICAgICAgICAibW92cSAoJTEsIiBQRFggIiwpLCAlJW1tMCAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gYWRkIDJuZCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtYXNrIHRvIHVzZSAybmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAvLyBhZGQgM3JkIGFjdGl2ZSBncm91cAogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQogICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgdG8gdXNlIDNyZCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIGFkZCA0dGggYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbWFzayB0byB1c2UgNHRoIGFjdGl2ZSBncm91cAogICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAogICAgICAgICAgICAiamIgc3ViXzJscCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwoKICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW01IiwgIiVtbTYiICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAsICIlbW03IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCAyIGJwcAoKICAgICAgY2FzZSA2OiAgIC8vIGZvcm1lcmx5IHNoYXJlZCB3aXRoIDQgYnBwIGNhc2UgKHNlZSBjb21tZW50cyB0aGVyZSkKICAgICAgewovLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDQ4IChwc2xscSkKLy8gICAgICAgX1NoaWZ0UmVtID0gNjQgLSBfU2hpZnRCcHA7ICAvLyAxNiAocHNybHEpCgogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi8vIHByZWxvYWQgICJtb3YgIHJvdywgJTEgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKLy8gbm90dXNlZCAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLy8gcHJlbG9hZCAgIm1vdmwgYnBwLCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImFkZCAgIiBQQ1ggIiwgJTEgICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglMSwiIFBEWCAiLCksICUlbW0xICBcblx0IgoKICAgICAgICAgInN1Yl82bHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSBmb3IgYWRkaW5nIGZpcnN0CiAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vICBicHAgYnl0ZXMgKG5vIG5lZWQgZm9yIG1hc2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMpCiAgICAgICAgICAgICJtb3ZxICglMSwiIFBEWCAiLCksICUlbW0wICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cAogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQogICAgICAgICAgICAicHNsbHEgJDQ4LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVkeCAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAogICAgICAgICAgICAiamIgc3ViXzZscCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwoKICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCA2IGJwcAoKICAgICAgY2FzZSA4OgogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdiAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgovLyBub3R1c2VkICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwovLyBwcmVsb2FkICAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAovLyBwcmVsb2FkICAibW92bCBNTVhMZW5ndGgsICUlZWF4ICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUERYICIsKSwgJSVtbTcgIFxuXHQiCiAgICAgICAgICAgICJtb3ZsICUlZWF4LCAlJWVzaSAgICAgICAgICAgIFxuXHQiIC8vIGNvcHkgb2YgTU1YTGVuZ3RoIC0+IGVzaQogICAgICAgICAgICAiYW5kbCAkMHgwMDAwMDAzZiwgJSVlc2kgICAgICBcblx0IiAvLyBjYWxjIGJ5dGVzIG92ZXIgbXVsdCBvZiA2NAoKICAgICAgICAgInN1Yl84bHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUxLCIgUERYICIsKSwgJSVtbTAgICAgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDFzdCA4IGJ5dGVzCiAgICAgICAgICAgICJwYWRkYiAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxIDgoJTEsIiBQRFggIiwpLCAlJW1tMSAgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciAybmQgOCBieXRlcwogICAgICAgICAgICAibW92cSAlJW1tMCwgKCUxLCIgUERYICIsKSAgICBcblx0IiAvLyB3cml0ZSBSYXcoeCkgZm9yIDFzdCA4IGJ5dGVzCgogICAgICAgICAgICAvLyBOb3cgbW0wIHdpbGwgYmUgdXNlZCBhcyBSYXcoeC1icHApIGZvciB0aGUgMm5kIGdyb3VwIG9mIDggYnl0ZXMuCiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSByZXBlYXRlZCBmb3IgZWFjaCBncm91cCBvZiA4IGJ5dGVzIHdpdGggdGhlIDh0aAogICAgICAgICAgICAvLyBncm91cCBiZWluZyB1c2VkIGFzIHRoZSBSYXcoeC1icHApIGZvciB0aGUgMXN0IGdyb3VwIG9mIHRoZQogICAgICAgICAgICAvLyBuZXh0IGxvb3AuCgogICAgICAgICAgICAicGFkZGIgJSVtbTAsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAxNiglMSwiIFBEWCAiLCksICUlbW0yICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgM3JkIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJTEsIiBQRFggIiwpICAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciAybmQgOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAyNCglMSwiIFBEWCAiLCksICUlbW0zICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgNHRoIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsIDE2KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciAzcmQgOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAzMiglMSwiIFBEWCAiLCksICUlbW00ICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgNXRoIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTMsIDI0KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA0dGggOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTMsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSA0MCglMSwiIFBEWCAiLCksICUlbW01ICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgNnRoIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTQsIDMyKCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA1dGggOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTQsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSA0OCglMSwiIFBEWCAiLCksICUlbW02ICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgN3RoIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTUsIDQwKCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA2dGggOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTUsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSA1NiglMSwiIFBEWCAiLCksICUlbW03ICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgOHRoIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTYsIDQ4KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA3dGggOCBieXRlcwogICAgICAgICAgICAiYWRkbCAkNjQsICUlZWR4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTYsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVzaSwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBjbXAgdG8gYnl0ZXMgb3ZlciBtdWx0IG9mIDY0CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAtOCglMSwiIFBEWCAiLCkgIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgOHRoIDggYnl0ZXMKICAgICAgICAgICAgImpiIHN1Yl84bHAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIGNvbXBhcmUgdG8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJqbmIgc3ViXzhsdDggICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAic3ViXzhscEE6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAoJTEsIiBQRFggIiwpLCAlJW1tMCAgICBcblx0IgogICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBjb21wYXJlIHRvIE1NWExlbmd0aAogICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQRFggIiwpICBcblx0IiAvLyAtOCB0byBvZmZzZXQgZWFybHkgYWRkbCBlZHgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW03ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBjYWxjdWxhdGVkIFJhdyh4KSBkYXRhCiAgICAgICAgICAgICJqYiBzdWJfOGxwQSAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICB0byBtbTcgdG8gYmUgbmV3IFJhdyh4LWJwcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGZvciBuZXh0IGxvb3AKICAgICAgICAgInN1Yl84bHQ4OiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCiAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMgogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKCiAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgICAgICAvLyBlYXgKCiAgICAgICAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIKICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgOCBicHAKCiAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIC8vIGJwcCAhPSAxLDIsMyw0LDYsODogIGRvZXNuJ3QgZXhpc3QKICAgICAgewogICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECiNpZiBkZWZpbmVkKFBOR19ERUJVRykKICAgICAgICAgcG5nX2RlYnVnKDEsICJJbnRlcm5hbCBsaWJwbmcgbG9naWMgZXJyb3IgKEdDQyAiCiAgICAgICAgICAgInBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpKVxuIik7CiNlbmRpZgogICAgICB9CiAgICAgIGJyZWFrOwoKICAgfSAvLyBlbmQgc3dpdGNoIChicHApCgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi8vcHJlICJtb3ZsIE1NWExlbmd0aCwgJSVlYXggICAgICAgICBcblx0IgovL3ByZSAibW92ICByb3csICUxICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQovL3ByZSAiY21wbCBGdWxsTGVuZ3RoLCAlJWVheCAgICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICAgIFxuXHQiCiAgICAgICJqbmIgc3ViX2VuZCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci8vcHJlICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgICBcblx0IgogICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICAgIFxuXHQiCgogICAic3ViX2xwMjogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgKCIgUFNJICIsIiBQQVggIiwpLCAlJWNsIFxuXHQiCiAgICAgICJhZGRiICUlY2wsICglMSwiIFBBWCAiLCkgICAgICBcblx0IgogICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICAgIFxuXHQiIC8vIEZ1bGxMZW5ndGgKICAgICAgImpiIHN1Yl9scDIgICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAic3ViX2VuZDogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVuZCBNTVggaW5zdHJ1Y3Rpb25zCgogICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgIC8vIDAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAgLy8gMQogICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgIC8vIDIKICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSAgICAvLyAzCgogICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVjeCAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgIjEiIChyb3cpLCAgICAgICAgICAgICAgLy8gZWRpCiAgICAgICAgIjIiIChNTVhMZW5ndGgpLCAgICAgICAgLy8gZWF4CiAgICAgICAgIjMiIChGdWxsTGVuZ3RoKSAgICAgICAgLy8gZWR4CgogICAgICA6ICIlZXNpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgKTsKCn0gLy8gZW5kIG9mIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpCgojZW5kaWYgLyogUE5HX01NWF9SRUFEX0ZJTFRFUl9TVUJfU1VQUE9SVEVEICovCgoKCgojaWYgZGVmaW5lZChQTkdfTU1YX1JFQURfRklMVEVSX1VQX1NVUFBPUlRFRCkKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLyAgICAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgXyBNIE0gWCBfIFUgUCAgICAgICAgICAgIC8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwoKLy8gT3B0aW1pemVkIGNvZGUgZm9yIFBORyBVcCBmaWx0ZXIgZGVjb2RlcgoKc3RhdGljIHZvaWQgLyogUFJJVkFURSAqLwpwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cChwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcHJldl9yb3cpCnsKICAgdW5zaWduZWQgbGVuOyAgICAgICAgLy8gcG5nX3VpbnRfMzIgaXMgYWN0dWFsbHkgNjQtYml0IG9uIHg4Ni02NAogICBpbnQgZHVtbXlfdmFsdWVfZDsgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciAzIChkeCkgd2FzIHNwaWxsZWQnIGVycm9yCiAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9TOwogICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfRDsKCiAgIGxlbiA9IHJvd19pbmZvLT5yb3dieXRlczsgICAgICAgICAgICAgIC8vIG51bWJlciBvZiBieXRlcyB0byBmaWx0ZXIKCiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgU0FWRV9HT1RfZWJ4Ci8vcHJlICJtb3YgIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQovL3ByZSAibW92bCByb3csICUyICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKCiAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgoKICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50IChub3RlOiAgY29tcHV0aW5nIF9kZWx0YV8gb2YgdHdvIHBvaW50ZXJzLAogICAgICAvLyBzbyBoZXJlYWZ0ZXIgJSVlY3ggaXMgc3VmZmljaWVudCBldmVuIG9uIDY0LWJpdCkKICAgICAgIm1vdiAgJTIsICIgUENYICIgICAgICAgICAgICBcblx0IiAvLyB0YWtlIHN0YXJ0IG9mIHJvdwogICAgICAiYWRkICAkMHg3LCAiIFBDWCAiICAgICAgICAgIFxuXHQiIC8vIGFkZCA3IHRvIGluY3IgcGFzdCBhbGlnbm1lbnQgYmRyeQovLyAgICAiYW5kbCAkMHhmZmZmZmZmOCwgJSVlY3ggICAgIFxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5ICgzMi1iaXQhKQogICAgICBDTEVBUl9CT1RUT01fM19CSVRTICBQQ1ggICAgIlxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICJzdWIgICUyLCAiIFBDWCAiICAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3Qgcm93IHB0ciBhZ2FpbiA9PiBlYnAgPQogICAgICAianogdXBfZ28gICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICB0YXJnZXQgdmFsdWUgb2YgZWN4IGF0IGFsaWdubWVudAoKICAgInVwX2xwMTogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBmaXggYWxpZ25tZW50CiAgICAgICJtb3ZiICglMiwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKICAgICAgImFkZGIgKCUxLCIgUEJYICIsKSwgJSVhbCAgICBcblx0IgogICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgJSVhbCwgLTEoJTIsIiBQQlggIiwpICBcblx0IiAvLyBtb3YgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtMSB0bwogICAgICAiamIgdXBfbHAxICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBvZmZzZXQgaW5jbCBlYngKCiAgICJ1cF9nbzogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLy9wcmUgIm1vdmwgbGVuLCAlJWVkeCAgICAgICAgICAgICBcblx0IgogICAgICAibW92bCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiCiAgICAgICJzdWJsICUlZWJ4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgYWxpZ25tZW50IGZpeAogICAgICAiYW5kbCAkMHgwMDAwMDAzZiwgJSVlZHggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDY0CiAgICAgICJzdWJsICUlZWR4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gc3ViIG92ZXItYnl0ZXMgZnJvbSBvcmlnaW5hbCBsZW5ndGgKCiAgICAgIC8vIHVucm9sbGVkIGxvb3AgLSB1c2UgYWxsIE1NWCByZWdpc3RlcnMgYW5kIGludGVybGVhdmUgdG8gcmVkdWNlCiAgICAgIC8vIG51bWJlciBvZiBicmFuY2ggaW5zdHJ1Y3Rpb25zIChsb29wcykgYW5kIHJlZHVjZSBwYXJ0aWFsIHN0YWxscwogICAidXBfbG9vcDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxICglMSwiIFBCWCAiLCksICUlbW0xICAgXG5cdCIKICAgICAgIm1vdnEgKCUyLCIgUEJYICIsKSwgJSVtbTAgICBcblx0IgogICAgICAibW92cSA4KCUxLCIgUEJYICIsKSwgJSVtbTMgIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdnEgOCglMiwiIFBCWCAiLCksICUlbW0yICBcblx0IgogICAgICAibW92cSAlJW1tMCwgKCUyLCIgUEJYICIsKSAgIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tMywgJSVtbTIgICAgICAgICAgXG5cdCIKICAgICAgIm1vdnEgMTYoJTEsIiBQQlggIiwpLCAlJW1tNSBcblx0IgogICAgICAibW92cSAlJW1tMiwgOCglMiwiIFBCWCAiLCkgIFxuXHQiCiAgICAgICJtb3ZxIDE2KCUyLCIgUEJYICIsKSwgJSVtbTQgXG5cdCIKICAgICAgIm1vdnEgMjQoJTEsIiBQQlggIiwpLCAlJW1tNyBcblx0IgogICAgICAicGFkZGIgJSVtbTUsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDI0KCUyLCIgUEJYICIsKSwgJSVtbTYgXG5cdCIKICAgICAgIm1vdnEgJSVtbTQsIDE2KCUyLCIgUEJYICIsKSBcblx0IgogICAgICAicGFkZGIgJSVtbTcsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDMyKCUxLCIgUEJYICIsKSwgJSVtbTEgXG5cdCIKICAgICAgIm1vdnEgJSVtbTYsIDI0KCUyLCIgUEJYICIsKSBcblx0IgogICAgICAibW92cSAzMiglMiwiIFBCWCAiLCksICUlbW0wIFxuXHQiCiAgICAgICJtb3ZxIDQwKCUxLCIgUEJYICIsKSwgJSVtbTMgXG5cdCIKICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAibW92cSA0MCglMiwiIFBCWCAiLCksICUlbW0yIFxuXHQiCiAgICAgICJtb3ZxICUlbW0wLCAzMiglMiwiIFBCWCAiLCkgXG5cdCIKICAgICAgInBhZGRiICUlbW0zLCAlJW1tMiAgICAgICAgICBcblx0IgogICAgICAibW92cSA0OCglMSwiIFBCWCAiLCksICUlbW01IFxuXHQiCiAgICAgICJtb3ZxICUlbW0yLCA0MCglMiwiIFBCWCAiLCkgXG5cdCIKICAgICAgIm1vdnEgNDgoJTIsIiBQQlggIiwpLCAlJW1tNCBcblx0IgogICAgICAibW92cSA1NiglMSwiIFBCWCAiLCksICUlbW03IFxuXHQiCiAgICAgICJwYWRkYiAlJW1tNSwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgIm1vdnEgNTYoJTIsIiBQQlggIiwpLCAlJW1tNiBcblx0IgogICAgICAibW92cSAlJW1tNCwgNDgoJTIsIiBQQlggIiwpIFxuXHQiCiAgICAgICJhZGRsICQ2NCwgJSVlYnggICAgICAgICAgICAgXG5cdCIKICAgICAgInBhZGRiICUlbW03LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxICUlbW02LCAtOCglMiwiIFBCWCAiLCkgXG5cdCIgLy8gKCs1Niltb3ZxIGRvZXMgbm90IGFmZmVjdCBmbGFnczsKICAgICAgImpiIHVwX2xvb3AgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgLTggdG8gb2Zmc2V0IGFkZGwgZWJ4CgogICAgICAiY21wbCAkMCwgJSVlZHggICAgICAgICAgICAgIFxuXHQiIC8vIHRlc3QgZm9yIGJ5dGVzIG92ZXIgbXVsdCBvZiA2NAogICAgICAianogdXBfZW5kICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAiY21wbCAkOCwgJSVlZHggICAgICAgICAgICAgIFxuXHQiIC8vIHRlc3QgZm9yIGxlc3MgdGhhbiA4IGJ5dGVzCiAgICAgICJqYiB1cF9sdDggICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIFthZGRlZCBieSBsY3JlZXZlIGF0IG5ldGlucy5uZXRdCgogICAgICAiYWRkbCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiCiAgICAgICJhbmRsICQweDAwMDAwMDA3LCAlJWVkeCAgICAgXG5cdCIgLy8gY2FsYyBieXRlcyBvdmVyIG11bHQgb2YgOAogICAgICAic3VibCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIGRyb3Agb3Zlci1ieXRlcyBmcm9tIGxlbmd0aAogICAgICAianogdXBfbHQ4ICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAidXBfbHBBOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHVzZSBNTVggcmVncyB0byB1cGRhdGUgOCBieXRlcyBzaW0uCiAgICAgICJtb3ZxICglMSwiIFBCWCAiLCksICUlbW0xICAgXG5cdCIKICAgICAgIm1vdnEgKCUyLCIgUEJYICIsKSwgJSVtbTAgICBcblx0IgogICAgICAiYWRkbCAkOCwgJSVlYnggICAgICAgICAgICAgIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAibW92cSAlJW1tMCwgLTgoJTIsIiBQQlggIiwpIFxuXHQiIC8vIG1vdnEgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtOCB0bwogICAgICAiamIgdXBfbHBBICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBvZmZzZXQgYWRkIGVieAogICAgICAiY21wbCAkMCwgJSVlZHggICAgICAgICAgICAgIFxuXHQiIC8vIHRlc3QgZm9yIGJ5dGVzIG92ZXIgbXVsdCBvZiA4CiAgICAgICJqeiB1cF9lbmQgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICJ1cF9sdDg6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgogICAgICAiYWRkbCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIG1vdmUgb3ZlciBieXRlIGNvdW50IGludG8gY291bnRlcgoKICAgInVwX2xwMjogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyB1c2UgeDg2IHJlZ3MgZm9yIHJlbWFpbmluZyBieXRlcwogICAgICAibW92YiAoJTIsIiBQQlggIiwpLCAlJWFsICAgIFxuXHQiCiAgICAgICJhZGRiICglMSwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKICAgICAgImluY2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZiICUlYWwsIC0xKCUyLCIgUEJYICIsKSAgXG5cdCIgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFnczsgLTEgdG8KICAgICAgImpiIHVwX2xwMiAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgb2Zmc2V0IGluYyBlYngKCiAgICJ1cF9lbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBjb252ZXJzaW9uIG9mIGZpbHRlcmVkIHJvdyBjb21wbGV0ZQogICAgICBSRVNUT1JFX0dPVF9lYngKCiAgICAgIDogIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMCAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgIC8vIDEKICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSAgICAvLyAyCgogICAgICA6ICIwIiAobGVuKSwgICAgICAgICAgICAgIC8vIGVkeCAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAiMSIgKHByZXZfcm93KSwgICAgICAgICAvLyBlc2kKICAgICAgICAiMiIgKHJvdykgICAgICAgICAgICAgICAvLyBlZGkKCiAgICAgIDogIiVlYXgiLCAiJWVjeCIgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0IChubyBpbnB1dCByZWdzISkKICAgICAgICBfQ0xPQkJFUl9HT1RfZWJ4CiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIKICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICk7Cgp9IC8vIGVuZCBvZiBwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cCgpCgojZW5kaWYgLyogUE5HX01NWF9SRUFEX0ZJTFRFUl9VUF9TVVBQT1JURUQgKi8KCgoKCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKLyogT3B0aW1pemVkIHBuZ19yZWFkX2ZpbHRlcl9yb3cgcm91dGluZXMgKi8KCnZvaWQgLyogUFJJVkFURSAqLwpwbmdfcmVhZF9maWx0ZXJfcm93KHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19yb3dfaW5mb3Agcm93X2luZm8sIHBuZ19ieXRlcAogICByb3csIHBuZ19ieXRlcCBwcmV2X3JvdywgaW50IGZpbHRlcikKewojaWYgZGVmaW5lZChQTkdfREVCVUcpCiAgIGNoYXIgZmlsdG5hbWVbMTBdOwojZW5kaWYKCiAgIGlmIChfbW14X3N1cHBvcnRlZCA9PSAyKSB7CiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAvKiB0aGlzIHNob3VsZCBoYXZlIGhhcHBlbmVkIGluIHBuZ19pbml0X21teF9mbGFncygpIGFscmVhZHkgKi8KICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJhc21fZmxhZ3MgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKTsKI2VuZGlmCiAgICAgICBwbmdfbW14X3N1cHBvcnQoKTsKICAgfQoKI2lmIGRlZmluZWQoUE5HX0RFQlVHKQogICBwbmdfZGVidWcoMSwgImluIHBuZ19yZWFkX2ZpbHRlcl9yb3cgKHBuZ2djY3JkLmMpXG4iKTsKICAgc3dpdGNoIChmaWx0ZXIpCiAgIHsKICAgICAgY2FzZSAwOgogICAgICAgICBwbmdfc25wcmludGYoZmlsdG5hbWUsIDEwLCAibm9uZSIpOwogICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgMToKICAgICAgICAgcG5nX3NucHJpbnRmKGZpbHRuYW1lLCAxMCwgInN1Yi0lcyIsCiNpZmRlZiBQTkdfTU1YX1JFQURfRklMVEVSX1NVQl9TVVBQT1JURUQKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgICAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCKSAmJgogICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCiAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCiNlbHNlCiAgICAgICAgICAgX21teF9zdXBwb3J0ZWQKI2VuZGlmCiAgICAgICAgICAgPyAiTU1YIiA6CiNlbmRpZgogICAgICAgICAgICJDIik7CiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSAyOgogICAgICAgICBwbmdfc25wcmludGYoZmlsdG5hbWUsIDEwLCAidXAtJXMiLAojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9VUF9TVVBQT1JURUQKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgICAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVApICYmCiAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKI2Vsc2UKICAgICAgICAgICBfbW14X3N1cHBvcnRlZAojZW5kaWYKICAgICAgICAgICA/ICJNTVgiIDoKI2VuZGlmCiAgICAgICAgICAgIkMiKTsKICAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIDM6CiAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJhdmctJXMiLAojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9BVkdfU1VQUE9SVEVECiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgICAgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX0FWRykgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQojZWxzZQogICAgICAgICAgIF9tbXhfc3VwcG9ydGVkCiNlbmRpZgogICAgICAgICAgID8gIk1NWCIgOgojZW5kaWYKICAgICAgICAgICAiQyIpOwogICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgNDoKICAgICAgICAgcG5nX3NucHJpbnRmKGZpbHRuYW1lLCAxMCwgInBhZXRoLSVzIiwKI2lmZGVmIFBOR19NTVhfUkVBRF9GSUxURVJfUEFFVEhfU1VQUE9SVEVECiNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSB8fCBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCkgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQojZWxzZQogICAgICAgICAgIF9tbXhfc3VwcG9ydGVkCiNlbmRpZgogICAgICAgICAgID8gIk1NWCIgOgojZW5kaWYgLyogUE5HX3g4Nl82NF9VU0VfR09UUENSRUwgfHwgUE5HX1RIUkVBRF9VTlNBRkVfT0sgKi8KI2VuZGlmCiAgICAgICAgICAgIkMiKTsKICAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgICBwbmdfc25wcmludGYoZmlsdG5hbWUsIDEwLCAidW5rbm93biIpOwogICAgICAgICBicmVhazsKICAgfQogICBwbmdfZGVidWcyKDIsICJyb3dfbnVtYmVyPSVsZCwgJXMsICIsIHBuZ19wdHItPnJvd19udW1iZXIsIGZpbHRuYW1lKTsKICAgLy9wbmdfZGVidWcxKDAsICJwbmdfcHRyPSUxMHAsICIsIHBuZ19wdHIpOwogICAvL3BuZ19kZWJ1ZzEoMCwgImFzbV9mbGFncz0weCUwOGx4LCAiLCBwbmdfcHRyLT5hc21fZmxhZ3MpOwogICBwbmdfZGVidWcxKDAsICJyb3c9JTEwcCwgIiwgcm93KTsKICAgcG5nX2RlYnVnMigwLCAicGl4ZGVwdGg9JWQsIGJ5dGVzPSVkLCAiLCAoaW50KXJvd19pbmZvLT5waXhlbF9kZXB0aCwKICAgICAgKGludCkoKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDMpKTsKICAgcG5nX2RlYnVnMSgwLCAicm93Ynl0ZXM9JWxkXG4iLCByb3dfaW5mby0+cm93Ynl0ZXMpOwojZW5kaWYgLyogUE5HX0RFQlVHICovCgogICBzd2l0Y2ggKGZpbHRlcikKICAgewogICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfTk9ORToKICAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfU1VCOgojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9TVUJfU1VQUE9SVEVECiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIpICYmCiAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCiAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQojZWxzZQogICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCiNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1Yihyb3dfaW5mbywgcm93KTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGlzdG9wID0gcm93X2luZm8tPnJvd2J5dGVzOwogICAgICAgICAgICBwbmdfdWludF8zMiBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93ICsgYnBwOwogICAgICAgICAgICBwbmdfYnl0ZXAgbHAgPSByb3c7CgogICAgICAgICAgICBmb3IgKGkgPSBicHA7IGkgPCBpc3RvcDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyAoaW50KSgqbHArKykpICYgMHhmZik7CiAgICAgICAgICAgICAgIHJwKys7CiAgICAgICAgICAgIH0KICAgICAgICAgfSAgLyogZW5kICFVc2VNTVhfc3ViICovCiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1VQOgojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9VUF9TVVBQT1JURUQKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQKSAmJgogICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKI2Vsc2UKICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgewogICAgICAgICAgICBwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cChyb3dfaW5mbywgcm93LCBwcmV2X3Jvdyk7CiAgICAgICAgIH0KICAgICAgICAgIGVsc2UKI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXM7CiAgICAgICAgICAgIHBuZ19ieXRlcCBycCA9IHJvdzsKICAgICAgICAgICAgcG5nX2J5dGVwIHBwID0gcHJldl9yb3c7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7ICsraSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsgKGludCkoKnBwKyspKSAmIDB4ZmYpOwogICAgICAgICAgICAgICBycCsrOwogICAgICAgICAgICB9CiAgICAgICAgIH0gIC8qIGVuZCAhVXNlTU1YX3VwICovCiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX0FWRzoKI2lmZGVmIFBOR19NTVhfUkVBRF9GSUxURVJfQVZHX1NVUFBPUlRFRAojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHKSAmJgogICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKI2Vsc2UKICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgewogICAgICAgICAgICBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93OwogICAgICAgICAgICBwbmdfYnl0ZXAgcHAgPSBwcmV2X3JvdzsKICAgICAgICAgICAgcG5nX2J5dGVwIGxwID0gcm93OwogICAgICAgICAgICBwbmdfdWludF8zMiBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXMgLSBicHA7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnBwOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArCiAgICAgICAgICAgICAgICAgICgoaW50KSgqcHArKykgPj4gMSkpICYgMHhmZik7CiAgICAgICAgICAgICAgIHJwKys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpc3RvcDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKwogICAgICAgICAgICAgICAgICAoKGludCkoKnBwKysgKyAqbHArKykgPj4gMSkpICYgMHhmZik7CiAgICAgICAgICAgICAgIHJwKys7CiAgICAgICAgICAgIH0KICAgICAgICAgfSAgLyogZW5kICFVc2VNTVhfYXZnICovCiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1BBRVRIOgojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9QQUVUSF9TVVBQT1JURUQKI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpIHx8IGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCkgJiYKICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCiNlbHNlCiAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKI2VuZGlmIC8qIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIHx8IFBOR19USFJFQURfVU5TQUZFX09LICovCiNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIHBuZ19ieXRlcCBycCA9IHJvdzsKICAgICAgICAgICAgcG5nX2J5dGVwIHBwID0gcHJldl9yb3c7CiAgICAgICAgICAgIHBuZ19ieXRlcCBscCA9IHJvdzsKICAgICAgICAgICAgcG5nX2J5dGVwIGNwID0gcHJldl9yb3c7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOwogICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcCA9IHJvd19pbmZvLT5yb3dieXRlcyAtIGJwcDsKCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBicHA7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsgKGludCkoKnBwKyspKSAmIDB4ZmYpOwogICAgICAgICAgICAgICBycCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7IGkrKykgICAvKiB1c2UgbGVmdG92ZXIgcnAscHAgKi8KICAgICAgICAgICAgewogICAgICAgICAgICAgICBpbnQgYSwgYiwgYywgcGEsIHBiLCBwYywgcDsKCiAgICAgICAgICAgICAgIGEgPSAqbHArKzsKICAgICAgICAgICAgICAgYiA9ICpwcCsrOwogICAgICAgICAgICAgICBjID0gKmNwKys7CgogICAgICAgICAgICAgICBwID0gYiAtIGM7CiAgICAgICAgICAgICAgIHBjID0gYSAtIGM7CgojaWYgZGVmaW5lZChQTkdfVVNFX0FCUykKICAgICAgICAgICAgICAgcGEgPSBhYnMocCk7CiAgICAgICAgICAgICAgIHBiID0gYWJzKHBjKTsKICAgICAgICAgICAgICAgcGMgPSBhYnMocCArIHBjKTsKI2Vsc2UKICAgICAgICAgICAgICAgcGEgPSBwIDwgMCA/IC1wIDogcDsKICAgICAgICAgICAgICAgcGIgPSBwYyA8IDAgPyAtcGMgOiBwYzsKICAgICAgICAgICAgICAgcGMgPSAocCArIHBjKSA8IDAgPyAtKHAgKyBwYykgOiBwICsgcGM7CiNlbmRpZgoKICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgaWYgKHBhIDw9IHBiICYmIHBhIDw9IHBjKQogICAgICAgICAgICAgICAgICAgICBwID0gYTsKICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGIgPD0gcGMpCiAgICAgICAgICAgICAgICAgICAgIHAgPSBiOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHAgPSBjOwogICAgICAgICAgICAgICAgKi8KCiAgICAgICAgICAgICAgIHAgPSAocGEgPD0gcGIgJiYgcGEgPD0gcGMpID8gYSA6IChwYiA8PSBwYykgPyBiIDogYzsKCiAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyBwKSAmIDB4ZmYpOwogICAgICAgICAgICAgICBycCsrOwogICAgICAgICAgICB9CiAgICAgICAgIH0gIC8qIGVuZCAhVXNlTU1YX3BhZXRoICovCiAgICAgICAgIGJyZWFrOwoKICAgICAgZGVmYXVsdDoKICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIklnbm9yaW5nIGJhZCByb3ctZmlsdGVyIHR5cGUiKTsKICAgICAgICAgKnJvdz0wOwogICAgICAgICBicmVhazsKICAgfQp9CgojZW5kaWYgLyogUE5HX0hBVkVfTU1YX1JFQURfRklMVEVSX1JPVyAqLwoKCiNlbmRpZiAvKiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEICYmIFBOR19VU0VfUE5HR0NDUkQgKi8KI2VuZGlmIC8qIF9fR05VQ19fICovCg==