0x35de…17bb

All memos sent from and to 0x35de…17bb.

data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIERGTyBIdWIgLSBVdGlsaXRpZXMgLSBHZXQgVm90ZXMgSGFyZCBDYXAKICogSWYgYSBwcm9wb3NhbCByZWFjaGVzIGEgZml4ZWQgbnVtYmVyIG9mIHZvdGluZyB0b2tlbnMgKGV4YW1wbGUgdGhlIDkwJSBvZiB0aGUgdG90YWwgVG9rZW4gc3VwcGx5KSBmb3IgIkFwcHJvdmUiIG9yICJEaXNhcHByb3ZlIiBpdCwgdGhlIHByb3Bvc2FsIGF1dG9tYXRpY2FsbHkgZW5kcywgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBkdXJhdGlvbiBydWxlLgogKi8KLyogVXBkYXRlOgogKiBTZXR0aW5nIFZvdGVzIEhhcmQgQ2FwIHZhbHVlIHRvIDUxMDAwMDAwIEdJTAogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjguMTsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0YXJ0KGFkZHJlc3MgbmV3U3VydmV5LCBhZGRyZXNzIG9sZFN1cnZleSkgcHVibGljIHsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0b3AoYWRkcmVzcyBuZXdTdXJ2ZXkpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Vm90ZXNIYXJkQ2FwKCkgcHVibGljIHZpZXcgcmV0dXJucyh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOwogICAgfQp9
data:text/plain;base64,Ly9TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCgovKiBEaXNjdXNzaW9uOgogKiBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYS1kZXgKICovCi8qIERlc2NyaXB0aW9uOgogKiBNaW50LCBWb3RlIGFuZCBCdXJuCiAqIFRoaXMgREZPIE1pc2Nyb3NlcnZpY2UgaXMgdXNlZnVsIHRvIGxldCBhbnkgYXV0aG9yaXplZCBlbnRpdHkgdG8gYXV0b21hdGljYWxseSBhY2NlcHQgb3IgcmVmdXNlIGEgUHJvcG9zYWwgb2YgdGhpcyBERk8gdXNpbmcgVm90aW5nIFRva2VucyB0aGF0IGRvIG5vdCBpbXBhY3QgdGhlIGF2YWlsYWJsZSBzdXBwbHkuCiAqIEluIGZhY3QsIGJlZm9yZSB0byB2b3RlLCB0aGUgREZPIG1pbnRzIHRoZSBuZWNlc3Nhcnkgdm90ZXMgdG8gcmVhY2ggdGhlIEhhcmQgQ2FwLCB2b3RlIHRoZSBwcm9wb3NhbCwgdGhlbiBhdXRvbWF0aWNhbGx5IGJ1cm4gdGhlbSBhZnRlciB0aGUgdm90ZSBpbiBqdXN0IGEgc2luZ2xlIGF0b21pYyBhY3Rpb24uCiAqIEZvciByZWFzb25zIG9mIHByZWNhdXRpb24sIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIHZvdGUsIHRoZSBNaWNyb3NlcnZpY2UgaGFzIGEgYmFja3VwIGZ1bmN0aW9uYWxpdHkgdGhhdCB3aWxsIGxldCBldmVyeW9uZSB0ZXJtaW5hdGUgdGhlIHByb3Bvc2FsIGFuZCBidXJuIGFsbCB0aGUgdm90aW5nIHRva2Vucy4KICovCi8qIFVwZGF0ZToKICogSW50cm9kdWNlIEZsdXNoIHRvIFdhbGxldAogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMzsKCmNvbnRyYWN0IE1pbnRWb3RlQW5kQnVybk1pY3Jvc2VydmljZSB7CgogICAgc3RyaW5nIGNvbnN0YW50IEdFVF9WT1RFU19IQVJEX0NBUF9NSUNST1NFUlZJQ0VfTkFNRSA9ICJnZXRWb3Rlc0hhcmRDYXAiOwogICAgc3RyaW5nIGNvbnN0YW50IEFVVEhPUklaRURfS0VZX1BSRUZJWCA9ICJtaW50Vm90ZUFuZEJ1cm4uYXV0aG9yaXplZCI7CiAgICBhZGRyZXNzIGNvbnN0YW50IEFVVEhPUklaRURfQUREUkVTUyA9IDB4MzVERUM4QWFjY0JhYTc1ZjMwMWIzMDgxYzg3ZTM3RWJGMTM0MTdiQjsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXYgTWljcm9zZXJ2aWNlIFN0YXJ0IFRyaWdnZXIKICAgICAqIENhbGxlZCB3aGVuIHRoaXMgTWljcm9zZXJ2aWNlIGlzIHNldCBpbiB0aGUgRnVuY3Rpb25hbGl0aWVzIE1hbmFnZXIgb2YgdGhlIERGTy4KICAgICAqIEl0IHNldHMgdGhlIGFkZHJlc3Mgb2YgdGhlIG9uZSBhdXRob3JpemVkIHRvIGNhbGwgaXQuCiAgICAgKiBBcyB0aGUgdmFsdWUgaXMgZHluYW1pYywgaXQgY2FuIGJlIGNoYW5nZWQgYW55IHRpbWUKICAgICAqLwogICAgZnVuY3Rpb24gb25TdGFydChhZGRyZXNzLGFkZHJlc3MpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIElTdGF0ZUhvbGRlciBzdGF0ZUhvbGRlciA9IElTdGF0ZUhvbGRlcihwcm94eS5nZXRTdGF0ZUhvbGRlckFkZHJlc3MoKSk7CiAgICAgICAgYWRkcmVzcyBtaW50Vm90ZUFuZEJ1cm5BdXRob3JpemVkID0gQVVUSE9SSVpFRF9BRERSRVNTOwogICAgICAgIHN0YXRlSG9sZGVyLnNldEJvb2woX3RvU3RhdGVIb2xkZXJLZXkoQVVUSE9SSVpFRF9LRVlfUFJFRklYLCBfdG9TdHJpbmcobWludFZvdGVBbmRCdXJuQXV0aG9yaXplZCkpLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXYgTWljcm9zZXJ2aWNlIFN0b3AgVHJpZ2dlcgogICAgICogQ2FsbGVkIHdoZW4gdGhpcyBNaWNyb3NlcnZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBGdW5jdGlvbmFsaXRpZXMgTWFuYWdlciBvZiB0aGUgREZPLgogICAgICogSXQgY2xlYXJzIHRoZSBvcmlnaW5hbCBhZGRyZXNzIG9mIHRoZSBvbmUgYXV0aG9yaXplZCB0byBjYWxsIGl0LgogICAgICogQXMgdGhlIHZhbHVlIGlzIGR5bmFtaWMsIGlmIGl0IGhhcyBiZWVuIHJlbW92ZWQgb3IgY2hhbmdlZCBwcmV2aW91c2x5LCB0aGUgY2FsbCB3aWxsIGhhdmUgbm8gZWZmZWN0LgogICAgICovCiAgICBmdW5jdGlvbiBvblN0b3AoYWRkcmVzcykgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgSVN0YXRlSG9sZGVyIHN0YXRlSG9sZGVyID0gSVN0YXRlSG9sZGVyKHByb3h5LmdldFN0YXRlSG9sZGVyQWRkcmVzcygpKTsKICAgICAgICBhZGRyZXNzIG1pbnRWb3RlQW5kQnVybkF1dGhvcml6ZWQgPSBBVVRIT1JJWkVEX0FERFJFU1M7CiAgICAgICAgc3RhdGVIb2xkZXIuY2xlYXIoX3RvU3RhdGVIb2xkZXJLZXkoQVVUSE9SSVpFRF9LRVlfUFJFRklYLCBfdG9TdHJpbmcobWludFZvdGVBbmRCdXJuQXV0aG9yaXplZCkpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXYgVGhlIG1pY3Jvc2VydmljZSBjb3JlCiAgICAgKiBAcGFyYW0gc2VuZGVyIHRoZSBvcmlnaW5hbCBtc2cuc2VuZGVyIHdobyBjYWxsZWQgdGhlIFByb3h5IHRvIGFjdCB0aGUgb3BlcmF0aW9uCiAgICAgKiBAcGFyYW0gcHJvcG9zYWwgdGhlIHByb3Bvc2FsIHRvIGJlIHZvdGVkCiAgICAgKiBAcGFyYW0gYWNjZXB0IHRydWUgYWNjZXB0cyB0aGUgcHJvcG9zYWwsIGZhbHNlIHJlZnVzZXMgdGhlbQogICAgICovCiAgICBmdW5jdGlvbiBtaW50Vm90ZUFuZEJ1cm4oYWRkcmVzcyBzZW5kZXIsIHVpbnQyNTYsIGFkZHJlc3MgcHJvcG9zYWwsIGJvb2wgYWNjZXB0KSBwdWJsaWMgewoKICAgICAgICAvL1RoZSBjYWxsZXIgb2YgZXZlcnkgTWljcm9zZXJ2aWNlIGlzIGFsd2F5cyB0aGUgUHJveHkKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CgogICAgICAgIC8vQ2hlY2sgaW4gdGhlIFN0YXRlSG9sZGVyIGlmIHRoZSBvcmlnaW5hbCBNaWNyb3NlcnZpY2UgY2FsbGVyIGlzIGF1dGhvcml6ZWQgdG8gZG8gdGhpcwogICAgICAgIHJlcXVpcmUoSVN0YXRlSG9sZGVyKHByb3h5LmdldFN0YXRlSG9sZGVyQWRkcmVzcygpKS5nZXRCb29sKF90b1N0YXRlSG9sZGVyS2V5KEFVVEhPUklaRURfS0VZX1BSRUZJWCwgX3RvU3RyaW5nKHNlbmRlcikpKSwgIlVuYXV0aG9yaXplZCBBY3Rpb24iKTsKCiAgICAgICAgLy9HZXQgdGhlIHZvdGVzIGhhcmQgY2FwIGZvciB0aGlzIERGTy4gSXQgd2lsbCByZXR1cm4gMCBpZiB0aGUgaGFyZCBjYXAgaXMgbm90IHNldC4KICAgICAgICBhZGRyZXNzIHZvdGluZ1Rva2VuQWRkcmVzcyA9IHByb3h5LmdldFRva2VuKCk7CiAgICAgICAgSVZvdGluZ1Rva2VuIHZvdGluZ1Rva2VuID0gSVZvdGluZ1Rva2VuKHZvdGluZ1Rva2VuQWRkcmVzcyk7CiAgICAgICAgdWludDI1NiB2b3Rlc0hhcmRDYXAgPSBfdG9VaW50MjU2KHByb3h5LnJlYWQoR0VUX1ZPVEVTX0hBUkRfQ0FQX01JQ1JPU0VSVklDRV9OQU1FLCAiIikpOwoKICAgICAgICAvL0tlZXAgdHJhY2sgb2YgdGhlIG9yaWdpbmFsIGJhbGFuY2Ugb2YgdGhlIFByb3h5IGJlZm9yZSB0byBmbHVzaAogICAgICAgIHVpbnQyNTYgb3JpZ2luYWxQcm94eUJhbGFuY2VPZiA9IHZvdGluZ1Rva2VuLmJhbGFuY2VPZihtc2cuc2VuZGVyKTsKCiAgICAgICAgLy9NaW50IHRoZSBuZWVkZWQgdm90aW5nIHRva2VucwogICAgICAgIHZvdGluZ1Rva2VuLm1pbnQodm90ZXNIYXJkQ2FwKTsKCiAgICAgICAgLy9GbHVzaCBtb25leSB0byB3YWxsZXQgdG8gbGV0IHRoZSBwcm94eSB0cmFuc2ZlciBpdAogICAgICAgIHByb3h5LmZsdXNoVG9XYWxsZXQodm90aW5nVG9rZW5BZGRyZXNzLCBmYWxzZSwgMCk7CgogICAgICAgIC8vR2l2ZSBiYWNrIHRvIFByb3h5IHRoZSBldmVudHVhbCBvcmlnaW5hbCBiYWxhbmNlCiAgICAgICAgaWYob3JpZ2luYWxQcm94eUJhbGFuY2VPZiA+IDApIHsKICAgICAgICAgICAgcHJveHkudHJhbnNmZXIobXNnLnNlbmRlciwgb3JpZ2luYWxQcm94eUJhbGFuY2VPZiwgdm90aW5nVG9rZW5BZGRyZXNzKTsKICAgICAgICB9CgogICAgICAgIC8vVHJhbnNmZXIgdGhlIFZvdGluZyBUb2tlbnMgdG8gdGhpcyBNaWNyb3NlcnZpY2UKICAgICAgICBwcm94eS50cmFuc2ZlcihhZGRyZXNzKHRoaXMpLCB2b3Rlc0hhcmRDYXAsIHZvdGluZ1Rva2VuQWRkcmVzcyk7CgogICAgICAgIC8vVm90ZSB0byBBY2NlcHQgb3IgUmVmdXNlIHRoZSBQcm9wb3NhbAogICAgICAgIGlmKGFjY2VwdCkgewogICAgICAgICAgICBJTVZERnVuY3Rpb25hbGl0eVByb3Bvc2FsKHByb3Bvc2FsKS5hY2NlcHQodm90ZXNIYXJkQ2FwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBJTVZERnVuY3Rpb25hbGl0eVByb3Bvc2FsKHByb3Bvc2FsKS5yZWZ1c2Uodm90ZXNIYXJkQ2FwKTsKICAgICAgICB9CgogICAgICAgIC8vSWYgdGhlIHZvdGUgaXMgZW5vdWdoIHRvIHJlYWNoIHRoZSBIYXJkQ2FwLCB0aGUgcHJvcG9zYWwgd2lsbCBhdXRvbWF0aWNhbGx5IGdpdmUgYmFjayB0aGUgVm90aW5nIFRva2VucyB0byB0aGlzIE1pY3Jvc2VydmljZSwgc28gaXQgY2FuIGJ1cm4gdGhlbS4KICAgICAgICB1aW50MjU2IGJhbGFuY2VPZiA9IHZvdGluZ1Rva2VuLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKICAgICAgICBpZihiYWxhbmNlT2YgPiAwKSB7CiAgICAgICAgICAgIC8vQnVybiB0aGUgbWludGVkIFZvdGluZyBUb2tlbnMKICAgICAgICAgICAgdm90aW5nVG9rZW4uYnVybihiYWxhbmNlT2YpOwogICAgICAgIH0KICAgIH0KCiAgICAvL1RoaXMgY29sbGF0ZXJhbCBmdW5jdGlvbiBpcyBuZWVkZWQgdG8gbGV0IGV2ZXJ5b25lIHdpdGhyYXcgdGhlIGV2ZW50dWFsIHN0YWtlZCB2b3RpbmcgdG9rZW5zIHN0aWxsIGhlbGQgaW4gdGhlIHByb3Bvc2FsIGFuZCBidXJuIHRoZSBtaW50ZWQgb25lcwogICAgZnVuY3Rpb24gd2l0aGRyYXdBbmRCdXJuKGFkZHJlc3MgcHJvcG9zYWxBZGRyZXNzLCBib29sIHRlcm1pbmF0ZUZpcnN0LCBhZGRyZXNzIHZvdGluZ1Rva2VuQWRkcmVzcykgcHVibGljIHsKICAgICAgICAvL0lmIGRlZmluZWQsIHRlcm1pbmF0ZSBvciB3aXRocmF3IHRoZSBQcm9wb3NhbAogICAgICAgIGlmKHByb3Bvc2FsQWRkcmVzcyAhPSBhZGRyZXNzKDApKSB7CiAgICAgICAgICAgIElNVkRGdW5jdGlvbmFsaXR5UHJvcG9zYWwgcHJvcG9zYWwgPSBJTVZERnVuY3Rpb25hbGl0eVByb3Bvc2FsKHByb3Bvc2FsQWRkcmVzcyk7CiAgICAgICAgICAgIGlmKHRlcm1pbmF0ZUZpcnN0KSB7CiAgICAgICAgICAgICAgICB0cnkgcHJvcG9zYWwudGVybWluYXRlKCkgewogICAgICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cnkgcHJvcG9zYWwud2l0aGRyYXcoKSB7CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9CdXJuIHRoZSByZW1haW5pbmcgVm90aW5nIFRva2VucywgaWYgc2V0CiAgICAgICAgaWYodm90aW5nVG9rZW5BZGRyZXNzICE9IGFkZHJlc3MoMCkpIHsKICAgICAgICAgICAgSVZvdGluZ1Rva2VuIHZvdGluZ1Rva2VuID0gSVZvdGluZ1Rva2VuKHZvdGluZ1Rva2VuQWRkcmVzcyk7CiAgICAgICAgICAgIHVpbnQyNTYgYmFsYW5jZU9mID0gdm90aW5nVG9rZW4uYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpOwogICAgICAgICAgICBpZihiYWxhbmNlT2YgPiAwKSB7CiAgICAgICAgICAgICAgICB2b3RpbmdUb2tlbi5idXJuKGJhbGFuY2VPZik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX3RvVWludDI1NihieXRlcyBtZW1vcnkgYnMpIHByaXZhdGUgcHVyZSByZXR1cm5zKHVpbnQyNTYgeCkgewogICAgICAgIGlmKGJzLmxlbmd0aCA+PSAzMikgewogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICB4IDo9IG1sb2FkKGFkZChicywgYWRkKDB4MjAsIDApKSkKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBfdG9TdGF0ZUhvbGRlcktleShzdHJpbmcgbWVtb3J5IGEsIHN0cmluZyBtZW1vcnkgYikgcHJpdmF0ZSBwdXJlIHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfdG9Mb3dlckNhc2Uoc3RyaW5nKGFiaS5lbmNvZGVQYWNrZWQoYSwgIi4iLCBiKSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIF90b1N0cmluZyhhZGRyZXNzIF9hZGRyKSBwcml2YXRlIHB1cmUgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgYnl0ZXMzMiB2YWx1ZSA9IGJ5dGVzMzIodWludDI1NihfYWRkcikpOwogICAgICAgIGJ5dGVzIG1lbW9yeSBhbHBoYWJldCA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKCiAgICAgICAgYnl0ZXMgbWVtb3J5IHN0ciA9IG5ldyBieXRlcyg0Mik7CiAgICAgICAgc3RyWzBdID0gJzAnOwogICAgICAgIHN0clsxXSA9ICd4JzsKICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7CiAgICAgICAgICAgIHN0clsyK2kqMl0gPSBhbHBoYWJldFt1aW50KHVpbnQ4KHZhbHVlW2kgKyAxMl0gPj4gNCkpXTsKICAgICAgICAgICAgc3RyWzMraSoyXSA9IGFscGhhYmV0W3VpbnQodWludDgodmFsdWVbaSArIDEyXSAmIDB4MGYpKV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHJpbmcoc3RyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfdG9Mb3dlckNhc2Uoc3RyaW5nIG1lbW9yeSBzdHIpIHByaXZhdGUgcHVyZSByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICBieXRlcyBtZW1vcnkgYlN0ciA9IGJ5dGVzKHN0cik7CiAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYlN0ci5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBiU3RyW2ldID0gYlN0cltpXSA+PSAweDQxICYmIGJTdHJbaV0gPD0gMHg1QSA/IGJ5dGVzMSh1aW50OChiU3RyW2ldKSArIDB4MjApIDogYlN0cltpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmluZyhiU3RyKTsKICAgIH0KfQoKaW50ZXJmYWNlIElWb3RpbmdUb2tlbiB7CiAgICBmdW5jdGlvbiBtaW50KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGJ1cm4odWludDI1NiBhbW91bnQpIGV4dGVybmFsOwogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7Cn0KCmludGVyZmFjZSBJTVZEUHJveHkgewogICAgZnVuY3Rpb24gZ2V0VG9rZW4oKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiBnZXRTdGF0ZUhvbGRlckFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGZsdXNoVG9XYWxsZXQoYWRkcmVzcyB0b2tlbkFkZHJlc3MsIGJvb2wgaXM3MjEsIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiByZWFkKHN0cmluZyBjYWxsZGF0YSBjb2RlTmFtZSwgYnl0ZXMgY2FsbGRhdGEgZGF0YSkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGJ5dGVzIG1lbW9yeSByZXR1cm5EYXRhKTsKfQoKaW50ZXJmYWNlIElNVkRGdW5jdGlvbmFsaXR5UHJvcG9zYWwgewogICAgZnVuY3Rpb24gYWNjZXB0KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHJlZnVzZSh1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiB3aXRoZHJhdygpIGV4dGVybmFsOwogICAgZnVuY3Rpb24gdGVybWluYXRlKCkgZXh0ZXJuYWw7Cn0KCmludGVyZmFjZSBJU3RhdGVIb2xkZXIgewogICAgZnVuY3Rpb24gY2xlYXIoc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUpIGV4dGVybmFsIHJldHVybnMoc3RyaW5nIG1lbW9yeSBvbGREYXRhVHlwZSwgYnl0ZXMgbWVtb3J5IG9sZFZhbCk7CiAgICBmdW5jdGlvbiBzZXRCb29sKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lLCBib29sIHZhbCkgZXh0ZXJuYWwgcmV0dXJucyhib29sKTsKICAgIGZ1bmN0aW9uIGdldEJvb2woc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYm9vbCk7Cn0=