authRoleBundle top-level property

MasonBundle authRoleBundle
final

Implementation

final authRoleBundle = MasonBundle.fromJson(<String, dynamic>{
  "files": [
    {
      "path": "lib/core/auth/app_session.dart",
      "data":
          "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKCmltcG9ydCAncGFja2FnZTpmbHV0dGVyL2ZvdW5kYXRpb24uZGFydCc7CmltcG9ydCAncGFja2FnZTpmbHV0dGVyL3dpZGdldHMuZGFydCc7CgppbXBvcnQgJ2F1dGhfc2VydmljZS5kYXJ0JzsKaW1wb3J0ICdndWVzdF9kYXRhLmRhcnQnOwppbXBvcnQgJ3NpZ25faW5fbWV0aG9kcy5kYXJ0JzsKCmV4cG9ydCAnYXV0aF9zZXJ2aWNlLmRhcnQnCiAgICBzaG93IEF1dGhGYWlsdXJlLCBBdXRoRmFpbHVyZVJlYXNvbiwgSWRUb2tlbkNyZWRlbnRpYWwsIFNpZ25JbkNyZWRlbnRpYWw7CgovLy8gV2hvIG1heSB1c2UgdGhlIGFwcCB3aXRob3V0IGFuIGFjY291bnQuCmVudW0gQXV0aE1vZGUgewogIC8vLyBOb2JvZHk6IHRoZSB1c2VyIHNpZ25zIGluIGZpcnN0LgogIHJlcXVpcmVkLAoKICAvLy8gRXZlcnlvbmUuIFRoZSBhcHAgaGFzIG5vIHVzZXIgdW50aWwgc29tZW9uZSBzaWducyBpbiwgYW5kIGFza3MgZm9yIGFuCiAgLy8vIGFjY291bnQgb25seSB3aGVyZSBhIHNjcmVlbiBuZWVkcyBvbmUuCiAgZ3Vlc3QsCgogIC8vLyBFdmVyeW9uZSwgYXMgYW4gYW5vbnltb3VzIHVzZXIgdGhhdCB0aGUgYXBwIHNpZ25zIGluIGl0c2VsZiB3aGVuIGl0CiAgLy8vIHN0YXJ0cywgc28gdGhhdCBjb2RlIGhhcyB0aGUgaWQgb2YgYSB1c2VyIGZyb20gdGhlIGZpcnN0IGZyYW1lLiBBbgogIC8vLyBhY2NvdW50IGlzIGFza2VkIGZvciBvbmx5IHdoZXJlIGEgc2NyZWVuIG5lZWRzIG9uZSwgYW5kIHNpZ25pbmcgdXAKICAvLy8gZ2l2ZXMgaXQgdG8gdGhhdCBzYW1lIHVzZXIuCiAgYW5vbnltb3VzLAp9CgovLy8gVGhlIG1vZGUgb2YgdGhpcyBhcHAsIHdoaWNoIHdhcyBjaG9zZW4gd2hlbiB0aGUgYXBwIHdhcyBnZW5lcmF0ZWQuCi8vLwovLy8gVGhlIG1vZGUgZ2F0ZXMgbm90aGluZyBvbiBpdHMgb3duLiBJdCBkZWNpZGVzIHdoYXQgW2FwcFNlc3Npb25dIGRvZXMgd2hlbgovLy8gaXQgc3RhcnRzIGFuZCB3aGF0IFtBcHBTZXNzaW9uQ29udHJvbGxlci5hbGxvd3NBcHBdIHNheXMsIHdoaWNoIGEgZ3VhcmQKLy8vIG9mIHRoZSByb3V0ZXMgcmVhZHMuCi8vLwovLy8gVG8gY2hhbmdlIHRoZSBtb2RlLCBjaGFuZ2UgaXRzIHZhbHVlIGFuZCBrZWVwIHRoZSBkZWNsYXJhdGlvbiBhcyBpdCBpcywKLy8vIG9uIGEgbGluZSB0aGF0IGl0IHN0YXJ0czogYSB0b29sIG9mIHRoZSBhcHAgdGhhdCBjYW5ub3QgaW1wb3J0IHRoaXMKLy8vIGZpbGUsIHdoaWNoIGltcG9ydHMgRmx1dHRlciwgcmVhZHMgdGhlIG1vZGUgZnJvbSB0aGlzIGxpbmUuCmNvbnN0IEF1dGhNb2RlIGF1dGhNb2RlID0ge3t7YXV0aF9tb2RlfX19OwoKLy8vIFdobyB1c2VzIHRoZSBhcHA6IG5vYm9keSB0aGF0IHRoZSBhcHAga25vd3MsIGFuIGFub255bW91cyB1c2VyLCBvciB0aGUKLy8vIHVzZXIgb2YgYW4gYWNjb3VudC4KQGltbXV0YWJsZQpzZWFsZWQgY2xhc3MgQXBwU2Vzc2lvbiB7CiAgY29uc3QgQXBwU2Vzc2lvbigpOwoKICAvLy8gVGhlIGlkIG9mIHRoZSB1c2VyLCBvciBgbnVsbGAgd2hlbiBub2JvZHkgaXMgc2lnbmVkIGluLgogIFN0cmluZz8gZ2V0IHVpZDsKfQoKLy8vIE5vYm9keSBpcyBzaWduZWQgaW4uCmZpbmFsIGNsYXNzIFNpZ25lZE91dFNlc3Npb24gZXh0ZW5kcyBBcHBTZXNzaW9uIHsKICAvLy8gQ3JlYXRlcyB0aGUgc2Vzc2lvbiBvZiBhbiBhcHAgd2l0aG91dCBhIHVzZXIuCiAgY29uc3QgU2lnbmVkT3V0U2Vzc2lvbigpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmc/IGdldCB1aWQgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+IG90aGVyIGlzIFNpZ25lZE91dFNlc3Npb247CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gKFNpZ25lZE91dFNlc3Npb24pLmhhc2hDb2RlOwp9CgovLy8gQW4gYW5vbnltb3VzIHVzZXIgaXMgc2lnbmVkIGluOiBvbmUgd2l0aG91dCBhbiBhY2NvdW50LCB3aG9tIHRoZSBhcHAKLy8vIHNpZ25lZCBpbiBpdHNlbGYuCmZpbmFsIGNsYXNzIEFub255bW91c1Nlc3Npb24gZXh0ZW5kcyBBcHBTZXNzaW9uIHsKICAvLy8gQ3JlYXRlcyB0aGUgc2Vzc2lvbiBvZiB0aGUgYW5vbnltb3VzIHVzZXIgW3VpZF0uCiAgY29uc3QgQW5vbnltb3VzU2Vzc2lvbih0aGlzLnVpZCk7CgogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyB1aWQ7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PgogICAgICBvdGhlciBpcyBBbm9ueW1vdXNTZXNzaW9uICYmIG90aGVyLnVpZCA9PSB1aWQ7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdWlkLmhhc2hDb2RlOwp9CgovLy8gVGhlIHVzZXIgb2YgYW4gYWNjb3VudCBpcyBzaWduZWQgaW4uCmZpbmFsIGNsYXNzIEFjY291bnRTZXNzaW9uIGV4dGVuZHMgQXBwU2Vzc2lvbiB7CiAgLy8vIENyZWF0ZXMgdGhlIHNlc3Npb24gb2YgdGhlIGFjY291bnQgW3VpZF0uCiAgY29uc3QgQWNjb3VudFNlc3Npb24odGhpcy51aWQsIHt0aGlzLmVtYWlsLCB0aGlzLmlzc3VlcnMgPSBjb25zdCB7fX0pOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgdWlkOwoKICAvLy8gVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIGFjY291bnQsIG9yIGBudWxsYCBpZiBpdCBoYXMgbm9uZSwgYXMgYW4KICAvLy8gYWNjb3VudCBvZiBhIHdheSB0byBzaWduIGluIG1heSBub3QuCiAgZmluYWwgU3RyaW5nPyBlbWFpbDsKCiAgLy8vIFRoZSBpZGVudGl0eSBwcm92aWRlcnMgdGhhdCB0aGUgYWNjb3VudCBzaWducyBpbiB3aXRoLCBlYWNoIGJ5IHRoZQogIC8vLyBgaXNzdWVyYCBvZiBpdHMgYFNpZ25Jbk1ldGhvZGAgaW4gYGFwcFNpZ25Jbk1ldGhvZHNgIG9mCiAgLy8vIGBzaWduX2luX21ldGhvZHMuZGFydGAuIEl0IGlzIGVtcHR5IGZvciBhbiBhY2NvdW50IHRoYXQgc2lnbnMgaW4gd2l0aAogIC8vLyBhIHBhc3N3b3JkIGFsb25lLgogIGZpbmFsIFNldDxTdHJpbmc+IGlzc3VlcnM7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PgogICAgICBvdGhlciBpcyBBY2NvdW50U2Vzc2lvbiAmJgogICAgICBvdGhlci51aWQgPT0gdWlkICYmCiAgICAgIG90aGVyLmVtYWlsID09IGVtYWlsICYmCiAgICAgIG90aGVyLmlzc3VlcnMubGVuZ3RoID09IGlzc3VlcnMubGVuZ3RoICYmCiAgICAgIG90aGVyLmlzc3VlcnMuY29udGFpbnNBbGwoaXNzdWVycyk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4KICAgICAgT2JqZWN0Lmhhc2godWlkLCBlbWFpbCwgT2JqZWN0Lmhhc2hBbGxVbm9yZGVyZWQoaXNzdWVycykpOwp9CgovLy8gVGhlIHNlc3Npb24gb2YgdGhlIGFwcDogd2hvIHVzZXMgaXQsIGtub3duIGJlZm9yZSB0aGUgZmlyc3QgZnJhbWUsIGFuZAovLy8gdGhlIHdheSB0byBzaWduIGluLCB1cCBhbmQgb3V0LgovLy8KLy8vIEl0cyBgdmFsdWVgIGlzIHRoZSBbQXBwU2Vzc2lvbl0sIGFuZCBpdCB0ZWxscyBpdHMgbGlzdGVuZXJzIHdoZW4gdGhhdAovLy8gY2hhbmdlcy4gQSB3aWRnZXQgZm9sbG93cyBpdCB3aXRoIGEgYFZhbHVlTGlzdGVuYWJsZUJ1aWxkZXJgLgpmaW5hbCBhcHBTZXNzaW9uID0gQXBwU2Vzc2lvbkNvbnRyb2xsZXIoCiAgbW9kZTogYXV0aE1vZGUsCiAgdGFrZUd1ZXN0RGF0YTogdGFrZUd1ZXN0RGF0YSwKKTsKCi8vLyBLZWVwcyB0aGUgc2Vzc2lvbiBvZiB0aGUgYXBwIHVwIHRvIGRhdGUgd2l0aCB0aGUgc2VydmljZSBvZiB0aGUgcHJvdmlkZXIKLy8vIG9mIHNpZ24taW4sIGFuZCBzaWducyBpbiwgdXAgYW5kIG91dCB0aHJvdWdoIHRoYXQgc2VydmljZS4gVGhlIGFwcCBoYXMKLy8vIG9uZSwgW2FwcFNlc3Npb25dLgovLy8KLy8vIEV2ZXJ5IGNhbGwgaGVyZSBmYWlscyBvbmx5IHdpdGggYW4gW0F1dGhGYWlsdXJlXSwgd2hvc2UgcmVhc29uIHRoZSBhcHAKLy8vIHNob3dzIGluIGEgdGV4dCBvZiBpdHMgb3duLiBBbiBlcnJvciBvZiBhbm90aGVyIGtpbmQgYmVjb21lcyBhIGZhaWx1cmUKLy8vIHdpdGggdGhlIHJlYXNvbiBbQXV0aEZhaWx1cmVSZWFzb24udW5rbm93bl0gYW5kIHRoZSBlcnJvciBhcyBpdHMKLy8vIFtBdXRoRmFpbHVyZS5kZXZlbG9wZXJIaW50XS4KLy8vCi8vLyBUaGUgY2FsbHMgcnVuIG9uZSBhZnRlciBhbm90aGVyLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIG1hZGUsIGFuZCBub25lCi8vLyBydW5zIG5leHQgdG8gYW4gYW5vbnltb3VzIHNpZ24taW4gdGhhdCBpcyBvbiBpdHMgd2F5LiBTbyB0aGUgdXNlciBvZiB0aGUKLy8vIGFwcCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIHRoYXQgd2FzIG1hZGUgbGFzdC4gSW4gdGhlIG1vZGUKLy8vIFtBdXRoTW9kZS5hbm9ueW1vdXNdLCBhIGNhbGwgdGhhdCBsZWF2ZXMgbm9ib2R5IHNpZ25lZCBpbiBpcyBmb2xsb3dlZCBieQovLy8gYW4gYW5vbnltb3VzIHNpZ24taW4uCmZpbmFsIGNsYXNzIEFwcFNlc3Npb25Db250cm9sbGVyIGV4dGVuZHMgQ2hhbmdlTm90aWZpZXIKICAgIGltcGxlbWVudHMgVmFsdWVMaXN0ZW5hYmxlPEFwcFNlc3Npb24+IHsKICAvLy8gQ3JlYXRlcyBhIGNvbnRyb2xsZXIgZm9yIGFuIGFwcCBpbiBbbW9kZV0uIFRoZSBhcHAgY3JlYXRlcwogIC8vLyBbYXBwU2Vzc2lvbl0gYW5kIG5vIG90aGVyLiBBIHRlc3QgY3JlYXRlcyBvbmUgdG8gc2VlIGFub3RoZXIgbW9kZSwgb3IKICAvLy8gYSBzaG9ydGVyIFthbm9ueW1vdXNXYWl0XSwgYW5kIGRpc3Bvc2VzIG9mIGl0LgogIEFwcFNlc3Npb25Db250cm9sbGVyKHsKICAgIHJlcXVpcmVkIHRoaXMubW9kZSwKICAgIHJlcXVpcmVkIHRoaXMudGFrZUd1ZXN0RGF0YSwKICAgIHRoaXMuYW5vbnltb3VzV2FpdCA9IGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDMpLAogIH0pOwoKICAvLy8gV2hvIG1heSB1c2UgdGhlIGFwcCB3aXRob3V0IGFuIGFjY291bnQuCiAgZmluYWwgQXV0aE1vZGUgbW9kZTsKCiAgLy8vIFRha2VzIHdoYXQgYW4gYW5vbnltb3VzIHVzZXIgaGFzIGJlZm9yZSB0aGF0IHVzZXIgc2lnbnMgaW4gdG8gYW4KICAvLy8gYWNjb3VudDogYHRha2VHdWVzdERhdGFgIG9mIGBndWVzdF9kYXRhLmRhcnRgLgogIGZpbmFsIEZ1dHVyZTxHaXZlR3Vlc3REYXRhPz4gRnVuY3Rpb24oU3RyaW5nIGd1ZXN0VWlkKSB0YWtlR3Vlc3REYXRhOwoKICAvLy8gSG93IGxvbmcgdGhlIGFwcCB3YWl0cyBmb3IgaXRzIGFub255bW91cyB1c2VyIHdoZW4gaXQgc3RhcnRzLCBhbmQKICAvLy8gYWZ0ZXIgYSBzaWduLW91dCBvciB0aGUgZGVsZXRpb24gb2YgYW4gYWNjb3VudCwgaW4gdGhlIG1vZGUKICAvLy8gW0F1dGhNb2RlLmFub255bW91c10uCiAgZmluYWwgRHVyYXRpb24gYW5vbnltb3VzV2FpdDsKCiAgQXV0aFNlcnZpY2U/IF9zZXJ2aWNlOwogIFN0cmVhbVN1YnNjcmlwdGlvbjxBdXRoVXNlcj8+PyBfdXNlckNoYW5nZXM7CiAgQXBwU2Vzc2lvbiBfc2Vzc2lvbiA9IGNvbnN0IFNpZ25lZE91dFNlc3Npb24oKTsKICBib29sIF9kaXNwb3NlZCA9IGZhbHNlOwoKICAvLy8gQ29tcGxldGVzIHdoZW4gdGhlIGFwcCBoYXMgc3RhcnRlZCBmb3IgdGhlIGZpcnN0IHRpbWUuCiAgZmluYWwgQ29tcGxldGVyPHZvaWQ+IF9zdGFydGVkID0gQ29tcGxldGVyPHZvaWQ+KCk7CgogIC8vLyBUaGUgY2FsbCB0aGF0IHdhcyBtYWRlIGxhc3QsIHdoaWxlIGEgY2FsbCBpcyBvbiBpdHMgd2F5OiB0aGUgbmV4dCBvbmUKICAvLy8gd2FpdHMgZm9yIGl0LiBJdCBpcyBgbnVsbGAgd2hlbiBub25lIGlzLCBhbmQgYSBjYWxsIHRoZW4gYXdhaXRzCiAgLy8vIG5vdGhpbmcuIEEgZnV0dXJlIHRoYXQgY29tcGxldGVkIGluIGFub3RoZXIgem9uZSB3b3VsZCBob2xkIHRoZSBjYWxsCiAgLy8vIGJhY2sgaW4gYSB3aWRnZXQgdGVzdCwgd2hlcmUgdGhlIGFwcCBzdGFydHMgaW4gcmVhbCB0aW1lIGFuZCB0aGUgdGVzdAogIC8vLyBnb2VzIG9uIGluIGZha2UgdGltZS4KICBGdXR1cmU8dm9pZD4/IF9sYXN0Q2FsbDsKCiAgLy8vIFRoZSBhbm9ueW1vdXMgc2lnbi1pbnMgdGhhdCBhcmUgb24gdGhlaXIgd2F5LCBlYWNoIGJ5IGl0cyBzZXJ2aWNlLCBzbwogIC8vLyB0aGF0IHRoZSBhcHAgc3RhcnRzIG5vIHNlY29uZCBvbmUgbmV4dCB0byBpdC4KICBmaW5hbCBNYXA8QXV0aFNlcnZpY2UsIEZ1dHVyZTx2b2lkPj4gX2Fub255bW91c1NpZ25JbnMgPSBNYXAuaWRlbnRpdHkoKTsKCiAgLy8vIFRlbGxzIHdoZW4gdGhlIHVzZXIgY29tZXMgYmFjayB0byB0aGUgYXBwLCBpbiB0aGUgbW9kZQogIC8vLyBbQXV0aE1vZGUuYW5vbnltb3VzXS4KICBfUmVzdW1lT2JzZXJ2ZXI/IF9vYnNlcnZlcjsKCiAgLy8vIFdobyB1c2VzIHRoZSBhcHAuCiAgQG92ZXJyaWRlCiAgQXBwU2Vzc2lvbiBnZXQgdmFsdWUgPT4gX3Nlc3Npb247CgogIC8vLyBXaGV0aGVyIHRoZSB1c2VyIG1heSBzZWUgdGhlIGFwcDogYWx3YXlzIGluIHRoZSBtb2RlcyBbQXV0aE1vZGUuZ3Vlc3RdCiAgLy8vIGFuZCBbQXV0aE1vZGUuYW5vbnltb3VzXSwgYW5kIHdpdGggYW4gYWNjb3VudCBpbiB0aGUgbW9kZQogIC8vLyBbQXV0aE1vZGUucmVxdWlyZWRdLgogIC8vLwogIC8vLyBJdCBpcyBjb21wdXRlZCBmcm9tIHRoZSBzZXNzaW9uIGVhY2ggdGltZSBpdCBpcyByZWFkLCBhbmQgaXRzCiAgLy8vIGxpc3RlbmVycyBhcmUgdGhvc2Ugb2YgdGhlIHNlc3Npb24uIFNvIHdoZW4gdGhlIHNlc3Npb24gY2hhbmdlcywgYQogIC8vLyBsaXN0ZW5lciBmaW5kcyB0aGlzIHZhbHVlIGFuZCBbaGFzQWNjb3VudF0gYm90aCB1cCB0byBkYXRlLCB3aGljaGV2ZXIKICAvLy8gb2YgdGhlIHR3byBpdCBsaXN0ZW5zIHRvLiBBIGxpc3RlbmVyIGlzIGFsc28gY2FsbGVkIGZvciBhIGNoYW5nZSBvZgogIC8vLyB0aGUgc2Vzc2lvbiB0aGF0IGxlYXZlcyB0aGlzIHZhbHVlIGFzIGl0IHdhcy4KICBsYXRlIGZpbmFsIFZhbHVlTGlzdGVuYWJsZTxib29sPiBhbGxvd3NBcHAgPSBfU2Vzc2lvbkZsYWcoCiAgICB0aGlzLAogICAgKHNlc3Npb24pID0+IG1vZGUgIT0gQXV0aE1vZGUucmVxdWlyZWQgfHwgc2Vzc2lvbiBpcyBBY2NvdW50U2Vzc2lvbiwKICApOwoKICAvLy8gV2hldGhlciB0aGUgdXNlciBvZiBhbiBhY2NvdW50IGlzIHNpZ25lZCBpbiwgd2hpY2ggYW4gYW5vbnltb3VzIHVzZXIKICAvLy8gaXMgbm90LiBJdCBmb2xsb3dzIHRoZSBzZXNzaW9uIGFzIFthbGxvd3NBcHBdIGRvZXMuCiAgbGF0ZSBmaW5hbCBWYWx1ZUxpc3RlbmFibGU8Ym9vbD4gaGFzQWNjb3VudCA9IF9TZXNzaW9uRmxhZygKICAgIHRoaXMsCiAgICAoc2Vzc2lvbikgPT4gc2Vzc2lvbiBpcyBBY2NvdW50U2Vzc2lvbiwKICApOwoKICAvLy8gU3RhcnRzIHRoZSBzZXNzaW9uIHdpdGggW3NlcnZpY2VdOiB0YWtlcyB0aGUgdXNlciB3aG8gaXMgc2lnbmVkIGluIG9uCiAgLy8vIHRoaXMgZGV2aWNlLCBhbmQgZm9sbG93cyB0aGUgY2hhbmdlcyB0aGF0IHRoZSBzZXJ2aWNlIHRlbGxzIG9mLgogIC8vLwogIC8vLyBgaW5pdEF1dGgoKWAgY2FsbHMgaXQgaW4gYGJvb3RzdHJhcCgpYCwgc28gdGhlIHNlc3Npb24gaXMga25vd24gYmVmb3JlCiAgLy8vIHRoZSBmaXJzdCBmcmFtZS4gSW4gdGhlIG1vZGUgW0F1dGhNb2RlLmFub255bW91c10sIGFuIGFwcCB3aXRob3V0IGEKICAvLy8gdXNlciBzaWducyBpbiBhbm9ueW1vdXNseSBoZXJlIGFuZCB3YWl0cyBmb3IgdGhhdCBmb3IgYXQgbW9zdAogIC8vLyBbYW5vbnltb3VzV2FpdF0uIFdoZW4gdGhlIHNpZ24taW4gZmFpbHMgb3IgdGFrZXMgbG9uZ2VyLCB0aGUgYXBwCiAgLy8vIHN0YXJ0cyB3aXRob3V0IGEgdXNlci4gQSBzaWduLWluIHRoYXQgdGFrZXMgbG9uZ2VyIHN0aWxsIGJlY29tZXMgdGhlCiAgLy8vIHNlc3Npb24gd2hlbiBpdCBjb21lcywgYW5kIHRoZSBhcHAgdHJpZXMgYWdhaW4gZWFjaCB0aW1lIHRoZSB1c2VyCiAgLy8vIGNvbWVzIGJhY2sgdG8gaXQuCiAgLy8vCiAgLy8vIEEgY2FsbCBtYWRlIGJlZm9yZSB0aGUgZmlyc3Qgc3RhcnQgd2FpdHMgZm9yIGl0OiBbc2lnbkluXSwgW3NpZ25VcF0sCiAgLy8vIFtzaWduSW5XaXRoXSwgW3NlbmRQYXNzd29yZFJlc2V0XSwgW3NpZ25PdXRdIGFuZCBbZGVsZXRlQWNjb3VudF0uIFN1Y2gKICAvLy8gY2FsbHMgcnVuIGluCiAgLy8vIHRoZWlyIG9yZGVyIG9uY2UgdGhlIHN0YXJ0IGhhcyB0aGUgdXNlciwgYW5kIHRoZSBmdXR1cmUgb2YgdGhpcyBzdGFydAogIC8vLyBjb21wbGV0ZXMgYWZ0ZXIgdGhlbSwgYnV0IHdhaXRzIGZvciBubyBjYWxsIHRoYXQgaXMgbWFkZSB3aGlsZSBpdAogIC8vLyBydW5zLiBUaGUgbW9ja3Mgb2YgdGhlIHRlc3RzIG9mIGFuIGFwcCB1c2UgdGhpczogYSBjYWxsIG9mIFtzaWduVXBdCiAgLy8vIG1hZGUgYmVmb3JlIGBib290c3RyYXAoKWAsIHdoaWNoIG5vdGhpbmcgYXdhaXRzLCBnaXZlcyB0aGUgYXBwIGFuCiAgLy8vIGFjY291bnQgYmVmb3JlIGl0cyBmaXJzdCBmcmFtZS4gQSB0ZXN0IG1ha2VzIHN1Y2ggYSBjYWxsIG91dHNpZGUgdGhlCiAgLy8vIGJvZHkgb2YgYSB0ZXN0LCBhcyBpbiBhIGBzZXRVcEFsbGA6IG1hZGUgaW4gdGhlIGJvZHkgb2YgYSB3aWRnZXQKICAvLy8gdGVzdCwgaXQgd2FpdHMgaW4gdGhlIGZha2UgdGltZSBvZiB0aGF0IGJvZHksIGFuZCBhIHN0YXJ0IHRoYXQgcnVucyBpbgogIC8vLyByZWFsIHRpbWUgbmV2ZXIgY29tcGxldGVzLgogIC8vLwogIC8vLyBJdCBtYXkgYmUgY2FsbGVkIGFnYWluLCB3aXRoIHRoZSBzZXJ2aWNlIHRoYXQgdGhlIHNlc3Npb24gaGFzIGZyb20KICAvLy8gdGhlbiBvbjogYGluaXRBdXRoKClgIGRvZXMgc28gaW4gYSB0ZXN0IG9mIHRoZSBuZXh0IGxhdW5jaCBvZiB0aGUgYXBwLAogIC8vLyBhbmQgYSB0ZXN0IGdpdmVzIGl0IGEgc2VydmljZSBvZiBpdHMgb3duLiBTdWNoIGEgc3RhcnQgdGFrZXMgaXRzIHR1cm4KICAvLy8gYWZ0ZXIgdGhlIGNhbGxzIHRoYXQgYXJlIG9uIHRoZWlyIHdheS4KICBGdXR1cmU8dm9pZD4gc3RhcnQoQXV0aFNlcnZpY2Ugc2VydmljZSkgYXN5bmMgewogICAgLy8gVGhlIGNhbGxzIHRoYXQgd2VyZSBtYWRlIGJlZm9yZSB0aGlzIHN0YXJ0LiBUaGUgZmlyc3Qgc3RhcnQgbGV0cwogICAgLy8gdGhlbSBydW4gb25jZSBpdCBoYXMgdGhlIHVzZXIsIGFuZCBhIGxhdGVyIG9uZSB3YWl0cyBmb3IgdGhlbS4KICAgIGZpbmFsIGVhcmxpZXIgPSBfbGFzdENhbGw7CiAgICBmaW5hbCBmaXJzdCA9ICFfc3RhcnRlZC5pc0NvbXBsZXRlZDsKICAgIGlmICghZmlyc3QpIGF3YWl0IGVhcmxpZXI7CiAgICB1bmF3YWl0ZWQoX3VzZXJDaGFuZ2VzPy5jYW5jZWwoKSk7CiAgICBfc2VydmljZSA9IHNlcnZpY2U7CiAgICBfdXNlckNoYW5nZXMgPSBzZXJ2aWNlLnVzZXJDaGFuZ2VzLmxpc3RlbigKICAgICAgKF8pID0+IF9zeW5jKCksCiAgICAgIG9uRXJyb3I6IChPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgPT4gX3JlcG9ydCgKICAgICAgICBlcnJvciwKICAgICAgICBzdGFja1RyYWNlLAogICAgICAgICd3aGlsZSBmb2xsb3dpbmcgdGhlIHVzZXIgb2YgdGhlIHByb3ZpZGVyIG9mIHNpZ24taW4nLAogICAgICApLAogICAgKTsKICAgIF9zeW5jKCk7CiAgICBpZiAobW9kZSA9PSBBdXRoTW9kZS5hbm9ueW1vdXMpIHsKICAgICAgaWYgKF9vYnNlcnZlciA9PSBudWxsKSB7CiAgICAgICAgZmluYWwgb2JzZXJ2ZXIgPSBfb2JzZXJ2ZXIgPSBfUmVzdW1lT2JzZXJ2ZXIoX3JldHJ5KTsKICAgICAgICBXaWRnZXRzQmluZGluZy5pbnN0YW5jZS5hZGRPYnNlcnZlcihvYnNlcnZlcik7CiAgICAgIH0KICAgICAgYXdhaXQgX3NpZ25JbkFub255bW91c2x5KCk7CiAgICB9CiAgICBpZiAoIV9zdGFydGVkLmlzQ29tcGxldGVkKSBfc3RhcnRlZC5jb21wbGV0ZSgpOwogICAgaWYgKGZpcnN0KSBhd2FpdCBlYXJsaWVyOwogIH0KCiAgLy8vIFNpZ25zIGluIHRvIHRoZSBhY2NvdW50IG9mIFtlbWFpbF0gd2l0aCBbcGFzc3dvcmRdLgogIC8vLwogIC8vLyBBbiBhbm9ueW1vdXMgdXNlciBiZWNvbWVzIHRoZSB1c2VyIG9mIHRoYXQgYWNjb3VudCwgYW5kIHdoYXQgdGhlCiAgLy8vIGFub255bW91cyB1c2VyIGhhZCBtb3ZlcyB0byB0aGUgYWNjb3VudCBhcyBgdGFrZUd1ZXN0RGF0YWAgc2F5cy4KICBGdXR1cmU8dm9pZD4gc2lnbkluKHtyZXF1aXJlZCBTdHJpbmcgZW1haWwsIHJlcXVpcmVkIFN0cmluZyBwYXNzd29yZH0pID0+CiAgICAgIF9jYWxsKAogICAgICAgIChzZXJ2aWNlKSA9PiBfdG9BY2NvdW50KAogICAgICAgICAgKCkgPT4gc2VydmljZS5zaWduSW4oZW1haWw6IGVtYWlsLCBwYXNzd29yZDogcGFzc3dvcmQpLAogICAgICAgICksCiAgICAgICk7CgogIC8vLyBDcmVhdGVzIGFuIGFjY291bnQgZm9yIFtlbWFpbF0gd2l0aCBbcGFzc3dvcmRdIGFuZCBzaWducyBpbiB0byBpdC4KICAvLy8KICAvLy8gQW4gYW5vbnltb3VzIHVzZXIgZ2V0cyB0aGUgYWNjb3VudCBhbmQga2VlcHMgdGhlIGlkLCBzbyBldmVyeXRoaW5nCiAgLy8vIHRoYXQgdGhlIHVzZXIgaGFkIHN0YXlzLgogIEZ1dHVyZTx2b2lkPiBzaWduVXAoe3JlcXVpcmVkIFN0cmluZyBlbWFpbCwgcmVxdWlyZWQgU3RyaW5nIHBhc3N3b3JkfSkgPT4KICAgICAgX2NhbGwoCiAgICAgICAgKHNlcnZpY2UpID0+IF9zZXNzaW9uIGlzIEFub255bW91c1Nlc3Npb24KICAgICAgICAgICAgPyBzZXJ2aWNlLmxpbmtQYXNzd29yZChlbWFpbDogZW1haWwsIHBhc3N3b3JkOiBwYXNzd29yZCkKICAgICAgICAgICAgOiBzZXJ2aWNlLnNpZ25VcChlbWFpbDogZW1haWwsIHBhc3N3b3JkOiBwYXNzd29yZCksCiAgICAgICk7CgogIC8vLyBTaWducyBpbiB3aXRoIFtjcmVkZW50aWFsXSwgd2hpY2ggYSB3YXkgdG8gc2lnbiBpbiBvZgogIC8vLyBgYXBwU2lnbkluTWV0aG9kc2AgZ290IGZyb20gYW4gaWRlbnRpdHkgcHJvdmlkZXIuCiAgLy8vCiAgLy8vIEFuIGFub255bW91cyB1c2VyIGdldHMgdGhlIGlkZW50aXR5IG9mIHRoZSBjcmVkZW50aWFsIGFuZCBrZWVwcyB0aGUgaWQsCiAgLy8vIHNvIGV2ZXJ5dGhpbmcgdGhhdCB0aGUgdXNlciBoYWQgc3RheXMuIFdoZW4gdGhhdCBpZGVudGl0eSBiZWxvbmdzIHRvCiAgLy8vIGFub3RoZXIgdXNlciBhbHJlYWR5LCBvciBpdHMgZW1haWwgYWRkcmVzcyBoYXMgYW4gYWNjb3VudCB0aGF0IHNpZ25zCiAgLy8vIGluIGluIGFub3RoZXIgd2F5LCB0aGUgYW5vbnltb3VzIHVzZXIgc2lnbnMgaW4gdG8gdGhhdCBhY2NvdW50CiAgLy8vIGluc3RlYWQsIG9yIHRoZSBjYWxsIGZhaWxzIHdpdGgKICAvLy8gW0F1dGhGYWlsdXJlUmVhc29uLmFjY291bnRFeGlzdHNXaXRoT3RoZXJNZXRob2RdLCBhcyB0aGUgYmFja2VuZCBvZiB0aGUKICAvLy8gcHJvdmlkZXIgZGVjaWRlcy4gV2hhdCB0aGUgYW5vbnltb3VzIHVzZXIgaGFkIG1vdmVzIHRvIHRoZSBhY2NvdW50IGFzCiAgLy8vIGB0YWtlR3Vlc3REYXRhYCBzYXlzLCBhcyB3aXRoIFtzaWduSW5dLgogIEZ1dHVyZTx2b2lkPiBzaWduSW5XaXRoKFNpZ25JbkNyZWRlbnRpYWwgY3JlZGVudGlhbCkgPT4KICAgICAgX2NhbGwoKHNlcnZpY2UpIGFzeW5jIHsKICAgICAgICBpZiAoX3Nlc3Npb24gaXMgQW5vbnltb3VzU2Vzc2lvbikgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgc2VydmljZS5saW5rV2l0aChjcmVkZW50aWFsKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBvbiBBdXRoRmFpbHVyZSBjYXRjaCAoZmFpbHVyZSkgewogICAgICAgICAgICBpZiAoZmFpbHVyZS5yZWFzb24gIT0gQXV0aEZhaWx1cmVSZWFzb24uY3JlZGVudGlhbEluVXNlICYmCiAgICAgICAgICAgICAgICBmYWlsdXJlLnJlYXNvbiAhPQogICAgICAgICAgICAgICAgICAgIEF1dGhGYWlsdXJlUmVhc29uLmFjY291bnRFeGlzdHNXaXRoT3RoZXJNZXRob2QpIHsKICAgICAgICAgICAgICByZXRocm93OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGF3YWl0IF90b0FjY291bnQoKCkgPT4gc2VydmljZS5zaWduSW5XaXRoKGNyZWRlbnRpYWwpKTsKICAgICAgfSk7CgogIC8vLyBTZW5kcyB0aGUgbWVzc2FnZSB3aXRoIHdoaWNoIHRoZSBvd25lciBvZiB0aGUgYWNjb3VudCBvZiBbZW1haWxdIHNldHMKICAvLy8gYSBuZXcgcGFzc3dvcmQuIEl0IGNvbXBsZXRlcyB3aGV0aGVyIFtlbWFpbF0gaGFzIGFuIGFjY291bnQgb3Igbm90LgogIEZ1dHVyZTx2b2lkPiBzZW5kUGFzc3dvcmRSZXNldChTdHJpbmcgZW1haWwpID0+CiAgICAgIF9jYWxsKChzZXJ2aWNlKSA9PiBzZXJ2aWNlLnNlbmRQYXNzd29yZFJlc2V0KGVtYWlsKSk7CgogIC8vLyBTaWducyB0aGUgdXNlciBvdXQuIEluIHRoZSBtb2RlIFtBdXRoTW9kZS5hbm9ueW1vdXNdLCB0aGUgYXBwIHRoZW4KICAvLy8gc2lnbnMgaW4gYW5vbnltb3VzbHkgYWdhaW4sIGFzIHdoZW4gaXQgc3RhcnRzLgogIEZ1dHVyZTx2b2lkPiBzaWduT3V0KCkgPT4KICAgICAgX2NhbGwoKHNlcnZpY2UpID0+IHNlcnZpY2Uuc2lnbk91dCgpLCB3YWl0c0ZvckFub255bW91c1VzZXI6IHRydWUpOwoKICAvLy8gRGVsZXRlcyB0aGUgdXNlciB3aG8gaXMgc2lnbmVkIGluLiBUaGUgYXBwIGlzIHRoZW4gd2l0aG91dCBhIHVzZXIsIGFzCiAgLy8vIGFmdGVyIFtzaWduT3V0XSwgYW5kIGluIHRoZSBtb2RlIFtBdXRoTW9kZS5hbm9ueW1vdXNdIGl0IHNpZ25zIGluCiAgLy8vIGFub255bW91c2x5IGFnYWluLgogIC8vLwogIC8vLyBGb3IgYW4gYWNjb3VudCB0aGF0IHNpZ25zIGluIHdpdGggYSB3YXkgdG8gc2lnbiBpbiB0aGF0CiAgLy8vIGByZXZva2VzT25EZWxldGlvbmAgYW5kIGlzIGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtLCBpdCBmaXJzdCBhc2tzCiAgLy8vIHRoYXQgd2F5IGZvciBhIGNyZWRlbnRpYWwgYWdhaW4sIHN1Y2ggYXMgd2l0aCB0aGUgc2hlZXQgb2YgaXRzCiAgLy8vIGlkZW50aXR5IHByb3ZpZGVyLCBzbyB0aGF0IHRoZSBwcm92aWRlciBvZiBzaWduLWluIGNhbiByZXZva2UgdGhlCiAgLy8vIHRva2VucyBvZiB0aGUgYXBwLiBXaGVuIHRoZSB1c2VyIGNsb3NlcyB0aGUgc2hlZXQsIHRoZSBjYWxsIGNvbXBsZXRlcwogIC8vLyBhbmQgZGVsZXRlcyBub3RoaW5nLCB3aGljaCBpcyBubyBmYWlsdXJlLgogIC8vLwogIC8vLyBJdCBtYXkgZmFpbCB3aXRoIFtBdXRoRmFpbHVyZVJlYXNvbi5yZWNlbnRTaWduSW5SZXF1aXJlZF06IHRoZSB1c2VyCiAgLy8vIHRoZW4gc2lnbnMgb3V0LCBzaWducyBpbiBhZ2FpbiBhbmQgcmVwZWF0cyBpdC4KICBGdXR1cmU8dm9pZD4gZGVsZXRlQWNjb3VudCgpID0+IF9jYWxsKAogICAgICAgIChzZXJ2aWNlKSBhc3luYyB7CiAgICAgICAgICBmaW5hbCByZXZva2luZyA9IF9yZXZva2luZ01ldGhvZCgpOwogICAgICAgICAgaWYgKHJldm9raW5nID09IG51bGwpIHsKICAgICAgICAgICAgYXdhaXQgc2VydmljZS5kZWxldGVBY2NvdW50KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGZpbmFsIGZyZXNoID0gYXdhaXQgcmV2b2tpbmcuY3JlZGVudGlhbCgpOwogICAgICAgICAgaWYgKGZyZXNoICE9IG51bGwpIGF3YWl0IHNlcnZpY2UuZGVsZXRlQWNjb3VudChmcmVzaDogZnJlc2gpOwogICAgICAgIH0sCiAgICAgICAgd2FpdHNGb3JBbm9ueW1vdXNVc2VyOiB0cnVlLAogICAgICApOwoKICAvLy8gU3RvcHMgZm9sbG93aW5nIHRoZSBzZXJ2aWNlIGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBhcHAuIEEgY2FsbCB0aGF0CiAgLy8vIGlzIG9uIGl0cyB3YXkgc3RpbGwgZW5kcyBhcyBpdCB3b3VsZCBoYXZlLCBidXQgdGVsbHMgbm8gbGlzdGVuZXIsIGFuZAogIC8vLyBubyBhbm9ueW1vdXMgc2lnbi1pbiBmb2xsb3dzIGl0LgogIEBvdmVycmlkZQogIHZvaWQgZGlzcG9zZSgpIHsKICAgIF9kaXNwb3NlZCA9IHRydWU7CiAgICB1bmF3YWl0ZWQoX3VzZXJDaGFuZ2VzPy5jYW5jZWwoKSk7CiAgICBpZiAoX29ic2VydmVyIGNhc2UgZmluYWwgb2JzZXJ2ZXI/KSB7CiAgICAgIFdpZGdldHNCaW5kaW5nLmluc3RhbmNlLnJlbW92ZU9ic2VydmVyKG9ic2VydmVyKTsKICAgIH0KICAgIHN1cGVyLmRpc3Bvc2UoKTsKICB9CgogIC8vLyBUaGUgd2F5IHRvIHNpZ24gaW4gb2YgdGhlIGFjY291bnQgb2YgdGhlIHNlc3Npb24gdGhhdCBhc2tzIGZvciBhCiAgLy8vIGNyZWRlbnRpYWwgYWdhaW4gYmVmb3JlIHRoZSBhY2NvdW50IGlzIGRlbGV0ZWQgYW5kIGlzIGF2YWlsYWJsZSBvbgogIC8vLyB0aGlzIHBsYXRmb3JtLCBvciBgbnVsbGAgaWYgaXQgaGFzIG5vbmU6IHRoZSBmaXJzdCBvZgogIC8vLyBgYXBwU2lnbkluTWV0aG9kc2AgdGhhdCBkb2VzLgogIFNpZ25Jbk1ldGhvZD8gX3Jldm9raW5nTWV0aG9kKCkgPT4gc3dpdGNoIChfc2Vzc2lvbikgewogICAgICAgIEFjY291bnRTZXNzaW9uKDpmaW5hbCBpc3N1ZXJzKSA9PiBhcHBTaWduSW5NZXRob2RzCiAgICAgICAgICAgIC53aGVyZSgKICAgICAgICAgICAgICAobWV0aG9kKSA9PgogICAgICAgICAgICAgICAgICBtZXRob2QucmV2b2tlc09uRGVsZXRpb24gJiYKICAgICAgICAgICAgICAgICAgbWV0aG9kLmlzQXZhaWxhYmxlICYmCiAgICAgICAgICAgICAgICAgIGlzc3VlcnMuY29udGFpbnMobWV0aG9kLmlzc3VlciksCiAgICAgICAgICAgICkKICAgICAgICAgICAgLmZpcnN0T3JOdWxsLAogICAgICAgIF8gPT4gbnVsbCwKICAgICAgfTsKCiAgLy8vIFRoZSB1c2VyIGNhbWUgYmFjayB0byB0aGUgYXBwLiBJbiB0aGUgbW9kZSBbQXV0aE1vZGUuYW5vbnltb3VzXSwgYW4KICAvLy8gYXBwIHdpdGhvdXQgYSB1c2VyIHRoZW4gc2lnbnMgaW4gYW5vbnltb3VzbHkgYWdhaW46IGFzIHdoYXQgZm9sbG93cwogIC8vLyBldmVyeSBjYWxsLCBzbyB0aGlzIHRha2VzIGEgdHVybiBhbW9uZyB0aGUgY2FsbHMgd2l0aCBub3RoaW5nIGVsc2UgdG8KICAvLy8gZG8sIGFuZCBzdGFydHMgbm8gYW5vbnltb3VzIHNpZ24taW4gbmV4dCB0byBhIHNpZ24taW4uCiAgdm9pZCBfcmV0cnkoKSA9PiB1bmF3YWl0ZWQoX2NhbGwoKHNlcnZpY2UpIGFzeW5jIHt9KSk7CgogIC8vLyBSdW5zIFtjYWxsXSB3aXRoIHRoZSBzZXJ2aWNlIG9uY2UgdGhlIGNhbGxzIG1hZGUgYmVmb3JlIGl0IGFyZSBvdmVyLAogIC8vLyBhbmQgbm90IGJlZm9yZSB0aGUgYXBwIGhhcyBzdGFydGVkIGZvciB0aGUgZmlyc3QgdGltZS4KICAvLy8KICAvLy8gSW4gdGhlIG1vZGUgW0F1dGhNb2RlLmFub255bW91c10sIGEgY2FsbCB0aGF0IGxlYXZlcyBub2JvZHkgc2lnbmVkIGluCiAgLy8vIGlzIGZvbGxvd2VkIGJ5IGFuIGFub255bW91cyBzaWduLWluLiBBIGNhbGwgdGhhdAogIC8vLyBbd2FpdHNGb3JBbm9ueW1vdXNVc2VyXSwgYXMgYSBzaWduLW91dCwgY29tcGxldGVzIG9uY2UgdGhhdCBzaWduLWluIGlzCiAgLy8vIG92ZXIgb3IgdG9vayB0b28gbG9uZywgYXMgdGhlIHN0YXJ0IGRvZXMuCiAgRnV0dXJlPHZvaWQ+IF9jYWxsKAogICAgRnV0dXJlPHZvaWQ+IEZ1bmN0aW9uKEF1dGhTZXJ2aWNlIHNlcnZpY2UpIGNhbGwsIHsKICAgIGJvb2wgd2FpdHNGb3JBbm9ueW1vdXNVc2VyID0gZmFsc2UsCiAgfSkgYXN5bmMgewogICAgZmluYWwgZWFybGllciA9CiAgICAgICAgX2xhc3RDYWxsID8/IChfc3RhcnRlZC5pc0NvbXBsZXRlZCA/IG51bGwgOiBfc3RhcnRlZC5mdXR1cmUpOwogICAgZmluYWwgZG9uZSA9IENvbXBsZXRlcjx2b2lkPigpOwogICAgZmluYWwgb3duID0gX2xhc3RDYWxsID0gZG9uZS5mdXR1cmU7CiAgICBpZiAoZWFybGllciAhPSBudWxsKSBhd2FpdCBlYXJsaWVyOwogICAgdHJ5IHsKICAgICAgYXdhaXQgX2d1YXJkZWQoY2FsbCk7CiAgICAgIGZpbmFsIHNpZ25JbiA9IF9zaWduSW5Bbm9ueW1vdXNseSgpOwogICAgICBpZiAod2FpdHNGb3JBbm9ueW1vdXNVc2VyKSBhd2FpdCBzaWduSW47CiAgICB9IGZpbmFsbHkgewogICAgICBpZiAoaWRlbnRpY2FsKF9sYXN0Q2FsbCwgb3duKSkgX2xhc3RDYWxsID0gbnVsbDsKICAgICAgZG9uZS5jb21wbGV0ZSgpOwogICAgfQogIH0KCiAgLy8vIFJ1bnMgW2NhbGxdIHdpdGggdGhlIHNlcnZpY2UsIG9uY2UgYW4gYW5vbnltb3VzIHNpZ24taW4gdGhhdCBpcyBvbiBpdHMKICAvLy8gd2F5IGlzIG92ZXI6IG9mIGEgY2FsbCBhbmQgYSBzaWduLWluIHRoYXQgcnVuIGF0IHRoZSBzYW1lIHRpbWUsIHRoZQogIC8vLyBvbmUgdGhhdCBlbmRlZCBsYXN0IHdvdWxkIGRlY2lkZSB3aG8gdGhlIHVzZXIgaXMuCiAgLy8vCiAgLy8vIFdoYXRldmVyIFtjYWxsXSB0aHJvd3MgdGhhdCBpcyBubyBbQXV0aEZhaWx1cmVdIGJlY29tZXMgb25lLCBhbmQgdGhlCiAgLy8vIHNlc3Npb24gaGFzIHRoZSB1c2VyIG9mIHRoZSBzZXJ2aWNlIHdoZW4gaXQgaXMgb3ZlciwgYWxzbyB3aGVuIGl0CiAgLy8vIGZhaWxlZC4gQSBjYWxsIHRoYXQgZmFpbGVkIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBhbm9ueW1vdXMgc2lnbi1pbgogIC8vLyB0aGF0IGZvbGxvd3MgaXQsIHNvIHRoYXQgaXRzIGZhaWx1cmUgaXMgbm90IGxhdGUuCiAgRnV0dXJlPHZvaWQ+IF9ndWFyZGVkKAogICAgRnV0dXJlPHZvaWQ+IEZ1bmN0aW9uKEF1dGhTZXJ2aWNlIHNlcnZpY2UpIGNhbGwsCiAgKSBhc3luYyB7CiAgICBmaW5hbCBzZXJ2aWNlID0gX3NlcnZpY2UhOwogICAgdHJ5IHsKICAgICAgYXdhaXQgX2Fub255bW91c1NpZ25JbnNbc2VydmljZV07CiAgICAgIGF3YWl0IGNhbGwoc2VydmljZSk7CiAgICB9IG9uIE9iamVjdCBjYXRjaCAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgX3N5bmMoKTsKICAgICAgdW5hd2FpdGVkKF9zaWduSW5Bbm9ueW1vdXNseSgpKTsKICAgICAgaWYgKGVycm9yIGlzIEF1dGhGYWlsdXJlKSByZXRocm93OwogICAgICBFcnJvci50aHJvd1dpdGhTdGFja1RyYWNlKAogICAgICAgIEF1dGhGYWlsdXJlKEF1dGhGYWlsdXJlUmVhc29uLnVua25vd24sIGRldmVsb3BlckhpbnQ6ICckZXJyb3InKSwKICAgICAgICBzdGFja1RyYWNlLAogICAgICApOwogICAgfQogICAgX3N5bmMoKTsKICB9CgogIC8vLyBTaWducyBpbiB0byBhbiBhY2NvdW50IHdpdGggW3NpZ25Jbl0sIGluIHdoaWNoZXZlciB3YXksIGFuZCBtb3ZlcyB3aGF0CiAgLy8vIGFuIGFub255bW91cyB1c2VyIGhhZCB0byB0aGF0IGFjY291bnQsIHdoZW4gaXQgaGFzIGFub3RoZXIgaWQuCiAgLy8vCiAgLy8vIEl0IHRha2VzIHRoZSBkYXRhIGJlZm9yZSB0aGUgc2lnbi1pbiwgd2hpbGUgdGhlIGFub255bW91cyB1c2VyIGlzCiAgLy8vIHN0aWxsIHNpZ25lZCBpbiwgYW5kIGdpdmVzIGl0IG9uY2UgdGhlIHVzZXIgb2YgYW5vdGhlciBpZCBoYXMgYW4KICAvLy8gYWNjb3VudC4gSWYgdGFraW5nIGZhaWxzLCB0aGUgY2FsbCBmYWlscyBhbmQgbm90aGluZyBoYXMgY2hhbmdlZC4gSWYKICAvLy8gZ2l2aW5nIGZhaWxzLCB0aGUgdXNlciBpcyBzaWduZWQgaW4gYWxyZWFkeSwgc28gdGhlIGNhbGwgY29tcGxldGVzIGFuZAogIC8vLyB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQgYXMgYW4gZXJyb3Igb2YgdGhlIGFwcC4KICBGdXR1cmU8dm9pZD4gX3RvQWNjb3VudChGdXR1cmU8dm9pZD4gRnVuY3Rpb24oKSBzaWduSW4pIGFzeW5jIHsKICAgIGZpbmFsIGd1ZXN0ID0gX3Nlc3Npb247CiAgICBmaW5hbCBnaXZlID0KICAgICAgICBndWVzdCBpcyBBbm9ueW1vdXNTZXNzaW9uID8gYXdhaXQgdGFrZUd1ZXN0RGF0YShndWVzdC51aWQpIDogbnVsbDsKICAgIGF3YWl0IHNpZ25JbigpOwogICAgX3N5bmMoKTsKICAgIGZpbmFsIGFjY291bnQgPSBfc2Vzc2lvbjsKICAgIGlmIChnaXZlID09IG51bGwgfHwKICAgICAgICBhY2NvdW50IGlzISBBY2NvdW50U2Vzc2lvbiB8fAogICAgICAgIGFjY291bnQudWlkID09IGd1ZXN0LnVpZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0cnkgewogICAgICBhd2FpdCBnaXZlKGFjY291bnQudWlkKTsKICAgIH0gb24gT2JqZWN0IGNhdGNoIChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICBfcmVwb3J0KAogICAgICAgIGVycm9yLAogICAgICAgIHN0YWNrVHJhY2UsCiAgICAgICAgJ3doaWxlIGdpdmluZyB0aGUgZGF0YSBvZiBhIGd1ZXN0IHRvIHRoZSBhY2NvdW50JywKICAgICAgKTsKICAgIH0KICB9CgogIC8vLyBSZXBvcnRzIFtlcnJvcl0sIHdoaWNoIG5vIGNhbGwgY2FuIGZhaWwgd2l0aCwgYXMgYW4gZXJyb3Igb2YgdGhlIGFwcC4KICB2b2lkIF9yZXBvcnQoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UsIFN0cmluZyBkdXJpbmcpID0+CiAgICAgIEZsdXR0ZXJFcnJvci5yZXBvcnRFcnJvcigKICAgICAgICBGbHV0dGVyRXJyb3JEZXRhaWxzKAogICAgICAgICAgZXhjZXB0aW9uOiBlcnJvciwKICAgICAgICAgIHN0YWNrOiBzdGFja1RyYWNlLAogICAgICAgICAgbGlicmFyeTogJ2FwcCBzZXNzaW9uJywKICAgICAgICAgIGNvbnRleHQ6IEVycm9yRGVzY3JpcHRpb24oZHVyaW5nKSwKICAgICAgICApLAogICAgICApOwoKICAvLy8gSW4gdGhlIG1vZGUgW0F1dGhNb2RlLmFub255bW91c10sIHNpZ25zIGluIGFub255bW91c2x5IHdoZW4gbm9ib2R5IGlzCiAgLy8vIHNpZ25lZCBpbiwgYW5kIHdhaXRzIGZvciB0aGF0IGZvciBhdCBtb3N0IFthbm9ueW1vdXNXYWl0XS4KICAvLy8KICAvLy8gSXQgbmV2ZXIgZmFpbHMuIEEgc2lnbi1pbiB0aGF0IHRha2VzIGxvbmdlciBnb2VzIG9uIGFuZCBiZWNvbWVzIHRoZQogIC8vLyBzZXNzaW9uIHdoZW4gaXQgY29tZXMuIE9uZSB0aGF0IGZhaWxzIGxlYXZlcyB0aGUgYXBwIHdpdGhvdXQgYSB1c2VyCiAgLy8vIHVudGlsIHRoZSBuZXh0IHRyeSwgYW5kIGluIGRlYnVnIG1vZGUgaXRzIGVycm9yIGlzIHByaW50ZWQuCiAgRnV0dXJlPHZvaWQ+IF9zaWduSW5Bbm9ueW1vdXNseSgpIGFzeW5jIHsKICAgIGZpbmFsIHNlcnZpY2UgPSBfc2VydmljZSE7CiAgICBpZiAoX2Rpc3Bvc2VkIHx8CiAgICAgICAgbW9kZSAhPSBBdXRoTW9kZS5hbm9ueW1vdXMgfHwKICAgICAgICBzZXJ2aWNlLmN1cnJlbnRVc2VyICE9IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZmluYWwgc2lnbkluID0gX2Fub255bW91c1NpZ25JbnNbc2VydmljZV0gPz89CiAgICAgICAgX3RyeUFub255bW91c2x5KHNlcnZpY2UpLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgIF9hbm9ueW1vdXNTaWduSW5zLnJlbW92ZShzZXJ2aWNlKTsKICAgICAgX3N5bmMoKTsKICAgIH0pOwogICAgYXdhaXQgc2lnbkluLnRpbWVvdXQoYW5vbnltb3VzV2FpdCwgb25UaW1lb3V0OiAoKSB7fSk7CiAgfQoKICBGdXR1cmU8dm9pZD4gX3RyeUFub255bW91c2x5KEF1dGhTZXJ2aWNlIHNlcnZpY2UpIGFzeW5jIHsKICAgIHRyeSB7CiAgICAgIGF3YWl0IHNlcnZpY2Uuc2lnbkluQW5vbnltb3VzbHkoKTsKICAgIH0gb24gT2JqZWN0IGNhdGNoIChlcnJvcikgewogICAgICBpZiAoa0RlYnVnTW9kZSkgewogICAgICAgIGRlYnVnUHJpbnQoCiAgICAgICAgICAnVGhlIGFub255bW91cyBzaWduLWluIGZhaWxlZCwgc28gdGhlIGFwcCBoYXMgbm8gdXNlcjogJGVycm9yJywKICAgICAgICApOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gVGFrZXMgdGhlIHVzZXIgb2YgdGhlIHNlcnZpY2UgYXMgdGhlIHNlc3Npb24sIGFuZCB0ZWxscyB0aGUgbGlzdGVuZXJzCiAgLy8vIHdoZW4gdGhhdCBjaGFuZ2VzIGl0LCB1bmxlc3MgdGhlIHNlc3Npb24gd2FzIGRpc3Bvc2VkIG9mLgogIHZvaWQgX3N5bmMoKSB7CiAgICBpZiAoX2Rpc3Bvc2VkKSByZXR1cm47CiAgICBmaW5hbCBzZXNzaW9uID0gc3dpdGNoIChfc2VydmljZSEuY3VycmVudFVzZXIpIHsKICAgICAgbnVsbCA9PiBjb25zdCBTaWduZWRPdXRTZXNzaW9uKCksCiAgICAgIEF1dGhVc2VyKGlzQW5vbnltb3VzOiB0cnVlLCA6ZmluYWwgdWlkKSA9PiBBbm9ueW1vdXNTZXNzaW9uKHVpZCksCiAgICAgIEF1dGhVc2VyKDpmaW5hbCB1aWQsIDpmaW5hbCBlbWFpbCwgOmZpbmFsIGlzc3VlcnMpID0+IEFjY291bnRTZXNzaW9uKAogICAgICAgICAgdWlkLAogICAgICAgICAgZW1haWw6IGVtYWlsLAogICAgICAgICAgaXNzdWVyczogU2V0LnVubW9kaWZpYWJsZShpc3N1ZXJzKSwKICAgICAgICApLAogICAgfTsKICAgIGlmIChzZXNzaW9uID09IF9zZXNzaW9uKSByZXR1cm47CiAgICBfc2Vzc2lvbiA9IHNlc3Npb247CiAgICBub3RpZnlMaXN0ZW5lcnMoKTsKICB9Cn0KCi8vLyBDYWxscyBbX29uUmVzdW1lXSBlYWNoIHRpbWUgdGhlIGFwcCBpcyByZXN1bWVkLCB3aGF0ZXZlciBzdGF0ZSBpdCB3YXMgaW4KLy8vIGJlZm9yZS4KZmluYWwgY2xhc3MgX1Jlc3VtZU9ic2VydmVyIHdpdGggV2lkZ2V0c0JpbmRpbmdPYnNlcnZlciB7CiAgX1Jlc3VtZU9ic2VydmVyKHRoaXMuX29uUmVzdW1lKTsKCiAgZmluYWwgVm9pZENhbGxiYWNrIF9vblJlc3VtZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBkaWRDaGFuZ2VBcHBMaWZlY3ljbGVTdGF0ZShBcHBMaWZlY3ljbGVTdGF0ZSBzdGF0ZSkgewogICAgaWYgKHN0YXRlID09IEFwcExpZmVjeWNsZVN0YXRlLnJlc3VtZWQpIF9vblJlc3VtZSgpOwogIH0KfQoKLy8vIEEgZmxhZyBvZiB0aGUgc2Vzc2lvbiBvZiBhIGNvbnRyb2xsZXI6IGl0cyB2YWx1ZSBpcyBjb21wdXRlZCBmcm9tIHRoZQovLy8gc2Vzc2lvbiBlYWNoIHRpbWUgaXQgaXMgcmVhZCwgYW5kIGl0cyBsaXN0ZW5lcnMgYXJlIHRob3NlIG9mIHRoZQovLy8gc2Vzc2lvbi4KZmluYWwgY2xhc3MgX1Nlc3Npb25GbGFnIGltcGxlbWVudHMgVmFsdWVMaXN0ZW5hYmxlPGJvb2w+IHsKICBjb25zdCBfU2Vzc2lvbkZsYWcodGhpcy5fY29udHJvbGxlciwgdGhpcy5fb2YpOwoKICBmaW5hbCBBcHBTZXNzaW9uQ29udHJvbGxlciBfY29udHJvbGxlcjsKICBmaW5hbCBib29sIEZ1bmN0aW9uKEFwcFNlc3Npb24gc2Vzc2lvbikgX29mOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCB2YWx1ZSA9PiBfb2YoX2NvbnRyb2xsZXIudmFsdWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZExpc3RlbmVyKFZvaWRDYWxsYmFjayBsaXN0ZW5lcikgPT4gX2NvbnRyb2xsZXIuYWRkTGlzdGVuZXIobGlzdGVuZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZUxpc3RlbmVyKFZvaWRDYWxsYmFjayBsaXN0ZW5lcikgPT4KICAgICAgX2NvbnRyb2xsZXIucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpOwp9CgovLy8gUmV0dXJucyB0aGUgc2VydmljZSBvZiB0aGUgcHJvdmlkZXIgb2Ygc2lnbi1pbiwgd2hpY2ggW2luaXRBdXRoXSBjcmVhdGVkOgovLy8gYGJvb3RzdHJhcCgpYCBhd2FpdHMgaXQgYmVmb3JlIHRoZSBmaXJzdCBmcmFtZSwgYW5kIHRoZXJlIGlzIG5vbmUgdG8KLy8vIHJldHVybiBiZWZvcmUgdGhhdC4KLy8vCi8vLyBUaGUgY29kZSBvZiB0aGUgYXBwIGRvZXMgbm90IGNhbGwgaXQ6IGl0IHNpZ25zIGluIHRocm91Z2ggW2FwcFNlc3Npb25dLgpBdXRoU2VydmljZSBjcmVhdGVBdXRoU2VydmljZSgpID0+IF9hdXRoU2VydmljZTsKCnt7e3NtZl9hdXRoX19pbXBsZW1lbnRhdGlvbnN9fX0K",
      "type": "text"
    },
    {
      "path": "lib/core/auth/auth_service.dart",
      "data":
          "Ly8vIEEgdXNlciBhcyB0aGUgcHJvdmlkZXIgb2Ygc2lnbi1pbiBrbm93cyB0aGVtLgpmaW5hbCBjbGFzcyBBdXRoVXNlciB7CiAgLy8vIENyZWF0ZXMgdGhlIHVzZXIgW3VpZF0uCiAgY29uc3QgQXV0aFVzZXIoewogICAgcmVxdWlyZWQgdGhpcy51aWQsCiAgICByZXF1aXJlZCB0aGlzLmlzQW5vbnltb3VzLAogICAgdGhpcy5lbWFpbCwKICAgIHRoaXMuaXNzdWVycyA9IGNvbnN0IHt9LAogIH0pOwoKICAvLy8gVGhlIGlkIG9mIHRoZSB1c2VyLiBJdCBzdGF5cyB0aGUgc2FtZSBmb3IgYXMgbG9uZyBhcyB0aGUgdXNlciBleGlzdHMsCiAgLy8vIGFsc28gd2hlbiBhbiBhbm9ueW1vdXMgdXNlciBnZXRzIGFuIGFjY291bnQuCiAgZmluYWwgU3RyaW5nIHVpZDsKCiAgLy8vIFdoZXRoZXIgdGhlIHVzZXIgaXMgYW5vbnltb3VzOiBhIHVzZXIgdGhhdCB0aGUgYXBwIHNpZ25lZCBpbiBpdHNlbGYsCiAgLy8vIHdobyBoYXMgbm8gYWNjb3VudCBhbmQgbm90aGluZyB0byBzaWduIGluIHdpdGggYWdhaW4uCiAgZmluYWwgYm9vbCBpc0Fub255bW91czsKCiAgLy8vIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyLCBvciBgbnVsbGAgZm9yIGEgdXNlciB3aXRob3V0IG9uZSwgc3VjaAogIC8vLyBhcyBhbiBhbm9ueW1vdXMgdXNlci4KICBmaW5hbCBTdHJpbmc/IGVtYWlsOwoKICAvLy8gVGhlIGlkZW50aXR5IHByb3ZpZGVycyB3aG9zZSBpZGVudGl0aWVzIHRoZSB1c2VyIHNpZ25zIGluIHdpdGgsIGVhY2gKICAvLy8gYnkgdGhlIGlzc3VlciBvZiBpdHMgdG9rZW5zLCBzdWNoIGFzIGBodHRwczovL2FjY291bnRzLmV4YW1wbGUuY29tYDoKICAvLy8gdGhlIFtJZFRva2VuQ3JlZGVudGlhbC5pc3N1ZXJdIG9mIGEgY3JlZGVudGlhbCB0aGF0IHRoZSB1c2VyIHNpZ25lZCBpbgogIC8vLyBvciBsaW5rZWQgd2l0aC4gSXQgaXMgZW1wdHkgZm9yIGEgdXNlciB3aG8gc2lnbnMgaW4gd2l0aCBhIHBhc3N3b3JkCiAgLy8vIGFsb25lLCBhbmQgZm9yIGFuIGFub255bW91cyB1c2VyLgogIGZpbmFsIFNldDxTdHJpbmc+IGlzc3VlcnM7Cn0KCi8vLyBXaGF0IGEgd2F5IHRvIHNpZ24gaW4gZ290IGZyb20gYW4gaWRlbnRpdHkgcHJvdmlkZXIsIHN1Y2ggYXMgdGhlIHRva2VuCi8vLyBvZiBhbiBhY2NvdW50IG9mIHRoZSB1c2VyIGF0IGFub3RoZXIgc2VydmljZSwgd2l0aCB3aGljaCB0aGUgcHJvdmlkZXIKLy8vIG9mIHNpZ24taW4gc2lnbnMgdGhlIHVzZXIgaW46IFtBdXRoU2VydmljZS5zaWduSW5XaXRoXSBhbmQKLy8vIFtBdXRoU2VydmljZS5saW5rV2l0aF0gdGFrZSBpdC4Kc2VhbGVkIGNsYXNzIFNpZ25JbkNyZWRlbnRpYWwgewogIGNvbnN0IFNpZ25JbkNyZWRlbnRpYWwoKTsKfQoKLy8vIEFuIE9wZW5JRCBDb25uZWN0IElEIHRva2VuIHRoYXQgYW4gaWRlbnRpdHkgcHJvdmlkZXIgaXNzdWVkLCB3aXRoIHdoYXQKLy8vIGNhbWUgd2l0aCBpdC4KZmluYWwgY2xhc3MgSWRUb2tlbkNyZWRlbnRpYWwgZXh0ZW5kcyBTaWduSW5DcmVkZW50aWFsIHsKICAvLy8gQ3JlYXRlcyB0aGUgY3JlZGVudGlhbCBvZiBbaWRUb2tlbl0sIHdoaWNoIFtpc3N1ZXJdIGlzc3VlZC4KICBjb25zdCBJZFRva2VuQ3JlZGVudGlhbCh7CiAgICByZXF1aXJlZCB0aGlzLmlzc3VlciwKICAgIHJlcXVpcmVkIHRoaXMuaWRUb2tlbiwKICAgIHRoaXMucmF3Tm9uY2UsCiAgICB0aGlzLmF1dGhvcml6YXRpb25Db2RlLAogICAgdGhpcy5naXZlbk5hbWUsCiAgICB0aGlzLmZhbWlseU5hbWUsCiAgfSk7CgogIC8vLyBUaGUgaWRlbnRpdHkgcHJvdmlkZXIgdGhhdCBpc3N1ZWQgdGhlIHRva2VuOiB0aGUgYGlzc2Agb2YgdGhlIHRva2VuLAogIC8vLyBhbiBodHRwcyBVUkwgc3VjaCBhcyBgaHR0cHM6Ly9hY2NvdW50cy5leGFtcGxlLmNvbWAuCiAgZmluYWwgU3RyaW5nIGlzc3VlcjsKCiAgLy8vIFRoZSBJRCB0b2tlbiwgYSBKU09OIFdlYiBUb2tlbi4KICBmaW5hbCBTdHJpbmcgaWRUb2tlbjsKCiAgLy8vIFRoZSBub25jZSB3aG9zZSBoYXNoIHRoZSByZXF1ZXN0IGZvciB0aGUgdG9rZW4gaGFkLCB3aGljaCB0aGUKICAvLy8gaWRlbnRpdHkgcHJvdmlkZXIgd3JvdGUgaW50byB0aGUgdG9rZW4sIG9yIGBudWxsYCBpZiB0aGUgcmVxdWVzdCBoYWQKICAvLy8gbm9uZS4gVGhlIHByb3ZpZGVyIG9mIHNpZ24taW4gcGFzc2VzIGl0IG9uIHdoZXJlIGl0cyBiYWNrZW5kIGNoZWNrcwogIC8vLyB0aGUgdG9rZW4gYWdhaW5zdCBpdC4KICBmaW5hbCBTdHJpbmc/IHJhd05vbmNlOwoKICAvLy8gVGhlIGF1dGhvcml6YXRpb24gY29kZSB0aGF0IGNhbWUgd2l0aCB0aGUgdG9rZW4sIG9yIGBudWxsYC4gV2l0aCBpdCwgYQogIC8vLyBwcm92aWRlciBvZiBzaWduLWluIHJldm9rZXMgdGhlIHRva2VucyB0aGF0IHRoZSBpZGVudGl0eSBwcm92aWRlciBnYXZlCiAgLy8vIHRoZSBhcHAgd2hlbiB0aGUgYWNjb3VudCBpcyBkZWxldGVkLgogIGZpbmFsIFN0cmluZz8gYXV0aG9yaXphdGlvbkNvZGU7CgogIC8vLyBUaGUgZ2l2ZW4gbmFtZSBvZiB0aGUgdXNlciwgb3IgYG51bGxgLCBmb3IgYW4gaWRlbnRpdHkgcHJvdmlkZXIgdGhhdAogIC8vLyB0ZWxscyBpdCBhcGFydCBmcm9tIHRoZSB0b2tlbiwgYW5kIG1heWJlIG9ubHkgYXQgdGhlIGZpcnN0IHNpZ24taW4uCiAgZmluYWwgU3RyaW5nPyBnaXZlbk5hbWU7CgogIC8vLyBUaGUgZmFtaWx5IG5hbWUgb2YgdGhlIHVzZXIsIGFzIFtnaXZlbk5hbWVdLgogIGZpbmFsIFN0cmluZz8gZmFtaWx5TmFtZTsKCiAgLy8vIE5hbWVzIHRoZSBpc3N1ZXIsIGFuZCBubyB0b2tlbiwgc28gdGhhdCBhIHRva2VuIG5ldmVyIHJlYWNoZXMgYSBsb2cuCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0lkVG9rZW5DcmVkZW50aWFsKCRpc3N1ZXIpJzsKfQoKLy8vIFdoeSBhIGNhbGwgb2Ygc2lnbi1pbiBmYWlsZWQuCmVudW0gQXV0aEZhaWx1cmVSZWFzb24gewogIC8vLyBUaGUgZW1haWwgYWRkcmVzcyBhbmQgdGhlIHBhc3N3b3JkIG1hdGNoIG5vIGFjY291bnQuIEEgd3JvbmcgcGFzc3dvcmQKICAvLy8gYW5kIGFuIGFkZHJlc3Mgd2l0aG91dCBhbiBhY2NvdW50IGFyZSB0aGlzIG9uZSByZWFzb24sIHNvIHRoYXQgbm9ib2R5CiAgLy8vIGxlYXJucyBmcm9tIHRoZSBhcHAgd2hpY2ggYWRkcmVzc2VzIGhhdmUgYW4gYWNjb3VudC4KICAvLy8KICAvLy8gSXQgaXMgYWxzbyB0aGUgcmVhc29uIG9mIGEgW1NpZ25JbkNyZWRlbnRpYWxdIHRoYXQgdGhlIHByb3ZpZGVyCiAgLy8vIHJlZnVzZXMsIHN1Y2ggYXMgb25lIHRoYXQgZXhwaXJlZCBvciB0aGF0IHdhcyBpc3N1ZWQgZm9yIGFub3RoZXIgYXBwLAogIC8vLyBhbmQgb2Ygb25lIG9mIGFub3RoZXIgdXNlciB0aGFuIHRoZSBvbmUgd2hvc2UgYWNjb3VudCBpcyBkZWxldGVkLgogIGludmFsaWRDcmVkZW50aWFscywKCiAgLy8vIFRoZSBlbWFpbCBhZGRyZXNzIGhhcyBhbiBhY2NvdW50IGFscmVhZHkuCiAgZW1haWxJblVzZSwKCiAgLy8vIFRoZSBpZGVudGl0eSBvZiBhIFtTaWduSW5DcmVkZW50aWFsXSBiZWxvbmdzIHRvIGFub3RoZXIgdXNlciBhbHJlYWR5LAogIC8vLyBzbyBbQXV0aFNlcnZpY2UubGlua1dpdGhdIGdpdmVzIGl0IHRvIG5vYm9keSBlbHNlLiBUaGUgc2Vzc2lvbiB0aGVuCiAgLy8vIHNpZ25zIGluIHRvIHRoYXQgdXNlci4KICBjcmVkZW50aWFsSW5Vc2UsCgogIC8vLyBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgaWRlbnRpdHkgb2YgYSBbU2lnbkluQ3JlZGVudGlhbF0gaGFzIGFuCiAgLy8vIGFjY291bnQgdGhhdCBzaWducyBpbiBpbiBhbm90aGVyIHdheSwgc3VjaCBhcyB3aXRoIGEgcGFzc3dvcmQuIFRoZQogIC8vLyB1c2VyIHNpZ25zIGluIHRoYXQgd2F5LgogIGFjY291bnRFeGlzdHNXaXRoT3RoZXJNZXRob2QsCgogIC8vLyBUaGUgcHJvdmlkZXIgdGFrZXMgbm8gcGFzc3dvcmQgYXMgd2VhayBhcyB0aGlzIG9uZS4KICB3ZWFrUGFzc3dvcmQsCgogIC8vLyBUaGUgdGV4dCBpcyBubyBlbWFpbCBhZGRyZXNzLgogIGludmFsaWRFbWFpbCwKCiAgLy8vIFRoZSBhY2NvdW50IGlzIGRpc2FibGVkLgogIHVzZXJEaXNhYmxlZCwKCiAgLy8vIFRvbyBtYW55IGF0dGVtcHRzOiB0aGUgcHJvdmlkZXIgdGFrZXMgbm8gbW9yZSBmb3IgYSB3aGlsZS4KICB0b29NYW55QXR0ZW1wdHMsCgogIC8vLyBUaGUgZGV2aWNlIGRpZCBub3QgcmVhY2ggdGhlIHByb3ZpZGVyLgogIG5ldHdvcmssCgogIC8vLyBUaGUgY2FsbCBuZWVkcyBhIHVzZXIgd2hvIHNpZ25lZCBpbiBhIHNob3J0IHdoaWxlIGFnbywgYXMgdGhlIGRlbGV0aW9uCiAgLy8vIG9mIGFuIGFjY291bnQgZG9lczogdGhlIHVzZXIgc2lnbnMgaW4gYWdhaW4gYW5kIHJlcGVhdHMgaXQuCiAgLy8vCiAgLy8vIEl0IGlzIGFsc28gdGhlIHJlYXNvbiBvZiBhIGNhbGwgZm9yIGEgdXNlciB3aG9zZSBzZXNzaW9uIGhhcyBlbmRlZCBvbgogIC8vLyB0aGUgc2VydmVyLiBUaGUgc2VydmljZSBzaWducyB0aGF0IHVzZXIgb3V0IG9uIHRoZSBkZXZpY2UgYmVmb3JlIGl0CiAgLy8vIGZhaWxzLgogIHJlY2VudFNpZ25JblJlcXVpcmVkLAoKICAvLy8gU2lnbi1pbiBpcyBub3Qgc2V0IHVwIGF0IHRoZSBwcm92aWRlciwgc3VjaCBhcyBhIHdheSB0byBzaWduIGluIHRoYXQKICAvLy8gaXMgbm90IGVuYWJsZWQgdGhlcmUuIFRoaXMgaXMgYSBtaXN0YWtlIGluIHRoZSBzZXR1cCBvZiB0aGUgYXBwLCB3aGljaAogIC8vLyBbQXV0aEZhaWx1cmUuZGV2ZWxvcGVySGludF0gZXhwbGFpbnMuCiAgbm90Q29uZmlndXJlZCwKCiAgLy8vIEFueXRoaW5nIGVsc2UuIFtBdXRoRmFpbHVyZS5kZXZlbG9wZXJIaW50XSBoYXMgdGhlIGVycm9yLgogIHVua25vd24sCn0KCi8vLyBUaGUgZmFpbHVyZSBvZiBhIGNhbGwgb2Ygc2lnbi1pbjogdGhlIG9ubHkgdGhpbmcgdGhhdCBzdWNoIGEgY2FsbCB0aHJvd3MuCmZpbmFsIGNsYXNzIEF1dGhGYWlsdXJlIGltcGxlbWVudHMgRXhjZXB0aW9uIHsKICAvLy8gQ3JlYXRlcyB0aGUgZmFpbHVyZSBmb3IgW3JlYXNvbl0uCiAgY29uc3QgQXV0aEZhaWx1cmUodGhpcy5yZWFzb24sIHt0aGlzLmRldmVsb3BlckhpbnR9KTsKCiAgLy8vIFdoeSB0aGUgY2FsbCBmYWlsZWQuIFRoZSBhcHAgc2hvd3MgYSB0ZXh0IG9mIGl0cyBvd24gZm9yIGVhY2ggcmVhc29uLgogIGZpbmFsIEF1dGhGYWlsdXJlUmVhc29uIHJlYXNvbjsKCiAgLy8vIFdoYXQgd2VudCB3cm9uZyBpbiB0aGUgd29yZHMgb2YgdGhlIHByb3ZpZGVyLCBmb3IgdGhlIGRldmVsb3BlciBvZiB0aGUKICAvLy8gYXBwLCBvciBgbnVsbGAuIEl0IGlzIG5vIHRleHQgZm9yIHRoZSB1c2VyOiBzaG93IGl0IGluIGRlYnVnIG1vZGUKICAvLy8gb25seS4KICBmaW5hbCBTdHJpbmc/IGRldmVsb3BlckhpbnQ7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGRldmVsb3BlckhpbnQgPT0gbnVsbAogICAgICA/ICdBdXRoRmFpbHVyZTogJHtyZWFzb24ubmFtZX0nCiAgICAgIDogJ0F1dGhGYWlsdXJlOiAke3JlYXNvbi5uYW1lfSAoJGRldmVsb3BlckhpbnQpJzsKfQoKLy8vIFRoZSBhY2NvdW50cyBvZiB0aGUgdXNlcnMgb2YgdGhlIGFwcCBhbmQgdGhlIHVzZXIgb2YgdGhpcyBkZXZpY2UsIGFzIHRoZQovLy8gcHJvdmlkZXIgb2Ygc2lnbi1pbiBrZWVwcyB0aGVtLgovLy8KLy8vIFRoZSBwcm92aWRlciBpbXBsZW1lbnRzIGl0LiBUaGUgY29kZSBvZiB0aGUgYXBwIGRvZXMgbm90IGNhbGwgaXQ6IGl0Ci8vLyBzaWducyBpbiB0aHJvdWdoIGBhcHBTZXNzaW9uYCBvZiBgYXBwX3Nlc3Npb24uZGFydGAsIHdoaWNoIGNhbGxzIHRoaXMKLy8vIHNlcnZpY2UgYW5kIGRvZXMgd2hhdCBpcyB0aGUgc2FtZSB3aXRoIGV2ZXJ5IHByb3ZpZGVyLgovLy8KLy8vIEV2ZXJ5IGltcGxlbWVudGF0aW9uIGtlZXBzIHRvIHRoaXMsIGluIGV2ZXJ5IG1vZGUgb2YgdGhlIGFwcCwgd2hhdGV2ZXIKLy8vIHRoZSBwcm92aWRlciBnZW5lcmF0ZXMgZm9yIHRoZSBtb2RlOgovLy8gLSBUaGUgc2VydmljZSBoYXMgW2N1cnJlbnRVc2VyXSBmcm9tIHRoZSBtb21lbnQgaXQgaXMgY3JlYXRlZDogdGhlIHVzZXIKLy8vICAgd2hvIHdhcyBzaWduZWQgaW4gb24gdGhpcyBkZXZpY2Ugd2hlbiB0aGUgYXBwIGxhc3QgcmFuLCB3aXRob3V0IGEKLy8vICAgcmVxdWVzdCB0byB0aGUgc2VydmVyLiBUaGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIHRoZSBzZXJ2aWNlIG1heSBiZQovLy8gICBjYWxsZWQgYWdhaW4sIGFuZCB0aGUgc2VydmljZSB0aGF0IGl0IHJldHVybnMgdGhlbiBoYXMgdGhlIHVzZXIgd2hvIGlzCi8vLyAgIHNpZ25lZCBpbiBub3cuCi8vLyAtIFdoZW4gdGhlIGZ1dHVyZSBvZiBhIGNhbGwgY29tcGxldGVzLCBbY3VycmVudFVzZXJdIGlzIHRoZSByZXN1bHQgb2YKLy8vICAgdGhlIGNhbGwuIFt1c2VyQ2hhbmdlc10gdGVsbHMgb2YgZXZlcnkgY2hhbmdlIG9mIFtjdXJyZW50VXNlcl0sIGFsc28KLy8vICAgb2Ygb25lIHRoYXQgbm8gY2FsbCBoZXJlIG1hZGUsIGFuZCB3aGVuIGl0IHRlbGxzIG9mIGEgdXNlciwKLy8vICAgW2N1cnJlbnRVc2VyXSBpcyB0aGF0IHVzZXIuCi8vLyAtIEEgY2FsbCBmYWlscyBvbmx5IHdpdGggYW4gW0F1dGhGYWlsdXJlXSwgYW5kIGV2ZXJ5IGNhbGwgZW5kczogd2hlbiB0aGUKLy8vICAgc2VydmVyIGRvZXMgbm90IGFuc3dlciwgaXRzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aAovLy8gICBbQXV0aEZhaWx1cmVSZWFzb24ubmV0d29ya10uCi8vLyAtIEEgY2FsbCB0aGF0IGZhaWxzIGxlYXZlcyB0aGUgdXNlciB3aG8gaXMgc2lnbmVkIGluIGFzIHRoYXQgdXNlciB3YXM6Ci8vLyAgIGFuIGFub255bW91cyB1c2VyIHN0YXlzIHNpZ25lZCBpbiB3aGVuIFtsaW5rUGFzc3dvcmRdIG9yIFtsaW5rV2l0aF0KLy8vICAgZmFpbHMsIGFuZCBzbyBkb2VzIHdob2V2ZXIgaXMgc2lnbmVkIGluIHdoZW4gW3NpZ25Jbl0sIFtzaWduVXBdIG9yCi8vLyAgIFtzaWduSW5XaXRoXSBmYWlscy4gVGhlIG9uZSBleGNlcHRpb24gaXMgYSBjYWxsIGZvciBhIHVzZXIgd2hvc2UKLy8vICAgc2Vzc2lvbiBoYXMgZW5kZWQgb24gdGhlIHNlcnZlci4KLy8vIC0gW2xpbmtQYXNzd29yZF0sIFtsaW5rV2l0aF0gYW5kIFtkZWxldGVBY2NvdW50XSBhcmUgY2FsbHMgZm9yIHRoZSB1c2VyCi8vLyAgIHdobyBpcyBzaWduZWQgaW4uIE1hZGUgd2hlbiBub2JvZHkgaXMgc2lnbmVkIGluLCBvciB3aGVuIHRoZSBzZXNzaW9uIG9mCi8vLyAgIHRoYXQgdXNlciBoYXMgZW5kZWQgb24gdGhlIHNlcnZlciwgc3VjaCBhIGNhbGwgZmFpbHMgd2l0aAovLy8gICBbQXV0aEZhaWx1cmVSZWFzb24ucmVjZW50U2lnbkluUmVxdWlyZWRdLCBhbmQgaW4gdGhlIHNlY29uZCBjYXNlIGl0Ci8vLyAgIHNpZ25zIHRoZSB1c2VyIG91dCBvbiB0aGUgZGV2aWNlIGZpcnN0LgovLy8gLSBBIFtTaWduSW5DcmVkZW50aWFsXSB3aG9zZSBpZGVudGl0eSBwcm92aWRlciB0aGUgcHJvdmlkZXIgZG9lcyBub3QKLy8vICAgdGFrZSBmYWlscyB3aXRoIFtBdXRoRmFpbHVyZVJlYXNvbi5ub3RDb25maWd1cmVkXSwgd2l0aCB0aGUgaXNzdWVyIGluCi8vLyAgIHRoZSBbQXV0aEZhaWx1cmUuZGV2ZWxvcGVySGludF0uCmFic3RyYWN0IGludGVyZmFjZSBjbGFzcyBBdXRoU2VydmljZSB7CiAgLy8vIFRoZSB1c2VyIHdobyBpcyBzaWduZWQgaW4gb24gdGhpcyBkZXZpY2UsIG9yIGBudWxsYC4KICBBdXRoVXNlcj8gZ2V0IGN1cnJlbnRVc2VyOwoKICAvLy8gVGVsbHMgb2YgZWFjaCBjaGFuZ2Ugb2YgW2N1cnJlbnRVc2VyXSwgb25jZSBbY3VycmVudFVzZXJdIGhhcyBjaGFuZ2VkOgogIC8vLyBhIGJyb2FkY2FzdCBzdHJlYW0uIFdoZW4gaXQgdGVsbHMgb2YgYSB1c2VyLCBbY3VycmVudFVzZXJdIGlzIHRoYXQKICAvLy8gdXNlci4gSXQgbWF5IGFsc28gdGVsbCBvZiBhIHVzZXIgd2hvIGhhcyBub3QgY2hhbmdlZC4KICAvLy8KICAvLy8gQW4gZXJyb3IgdGhhdCBpdCBzZW5kcyBjaGFuZ2VzIG5vdGhpbmc6IHRoZSBzZXNzaW9uIHJlcG9ydHMgaXQgYXMgYW4KICAvLy8gZXJyb3Igb2YgdGhlIGFwcCBhbmQgZ29lcyBvbiBsaXN0ZW5pbmcuCiAgU3RyZWFtPEF1dGhVc2VyPz4gZ2V0IHVzZXJDaGFuZ2VzOwoKICAvLy8gU2lnbnMgaW4gdG8gdGhlIGFjY291bnQgb2YgW2VtYWlsXSB3aXRoIFtwYXNzd29yZF0uCiAgLy8vCiAgLy8vIEEgd3JvbmcgcGFzc3dvcmQgYW5kIGFuIGFkZHJlc3Mgd2l0aG91dCBhbiBhY2NvdW50IGJvdGggZmFpbCB3aXRoCiAgLy8vIFtBdXRoRmFpbHVyZVJlYXNvbi5pbnZhbGlkQ3JlZGVudGlhbHNdLgogIC8vLwogIC8vLyBJdCBpcyBhbHNvIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2lnbmVkIGluLCBhbiBhbm9ueW1vdXMgb25lIG9yIHRoZQogIC8vLyB1c2VyIG9mIGFub3RoZXIgYWNjb3VudDogdGhlIHVzZXIgb2YgdGhpcyBhY2NvdW50IHRoZW4gcmVwbGFjZXMgdGhhdAogIC8vLyB1c2VyIG9uIHRoZSBkZXZpY2UuIFdoZW4gaXQgZmFpbHMsIHRoYXQgdXNlciBzdGF5cyBzaWduZWQgaW4uCiAgRnV0dXJlPHZvaWQ+IHNpZ25Jbih7cmVxdWlyZWQgU3RyaW5nIGVtYWlsLCByZXF1aXJlZCBTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLy8vIENyZWF0ZXMgYW4gYWNjb3VudCBmb3IgW2VtYWlsXSB3aXRoIFtwYXNzd29yZF0gYW5kIHNpZ25zIGluIHRvIGl0LgogIC8vLwogIC8vLyBGb3IgYW4gYWRkcmVzcyB0aGF0IGhhcyBhbiBhY2NvdW50IGFscmVhZHksIGl0IGZhaWxzIHdpdGgKICAvLy8gW0F1dGhGYWlsdXJlUmVhc29uLmVtYWlsSW5Vc2VdIGFuZCBjaGFuZ2VzIG5vdGhpbmc6IHRoYXQgYWNjb3VudCBrZWVwcwogIC8vLyBpdHMgcGFzc3dvcmQsIGFuZCB3aG9ldmVyIGlzIHNpZ25lZCBpbiBzdGF5cyBzaWduZWQgaW4uCiAgLy8vCiAgLy8vIEl0IGlzIGFsc28gY2FsbGVkIHdoaWxlIHRoZSB1c2VyIG9mIGFub3RoZXIgYWNjb3VudCBpcyBzaWduZWQgaW4sIGFuZAogIC8vLyB0aGUgdXNlciBvZiB0aGUgbmV3IGFjY291bnQgdGhlbiByZXBsYWNlcyB0aGF0IHVzZXIgb24gdGhlIGRldmljZS4KICAvLy8gRm9yIGFuIGFub255bW91cyB1c2VyLCB0aGUgc2Vzc2lvbiBjYWxscyBbbGlua1Bhc3N3b3JkXSBpbnN0ZWFkLgogIEZ1dHVyZTx2b2lkPiBzaWduVXAoe3JlcXVpcmVkIFN0cmluZyBlbWFpbCwgcmVxdWlyZWQgU3RyaW5nIHBhc3N3b3JkfSk7CgogIC8vLyBHaXZlcyB0aGUgYW5vbnltb3VzIHVzZXIgd2hvIGlzIHNpZ25lZCBpbiBhbiBhY2NvdW50IGZvciBbZW1haWxdIHdpdGgKICAvLy8gW3Bhc3N3b3JkXS4gVGhlIHVzZXIga2VlcHMgdGhlIFtBdXRoVXNlci51aWRdIGFuZCBpcyBubyBsb25nZXIKICAvLy8gYW5vbnltb3VzLgogIC8vLwogIC8vLyBGb3IgYW4gYWRkcmVzcyB0aGF0IGhhcyBhbiBhY2NvdW50IGFscmVhZHksIGl0IGZhaWxzIHdpdGgKICAvLy8gW0F1dGhGYWlsdXJlUmVhc29uLmVtYWlsSW5Vc2VdIGFuZCBjaGFuZ2VzIG5vdGhpbmc6IHRoZSBhbm9ueW1vdXMgdXNlcgogIC8vLyBzdGF5cyBzaWduZWQgaW4sIHdpdGggdGhlIHNhbWUgaWQuCiAgRnV0dXJlPHZvaWQ+IGxpbmtQYXNzd29yZCh7cmVxdWlyZWQgU3RyaW5nIGVtYWlsLCByZXF1aXJlZCBTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLy8vIFNpZ25zIGluIHdpdGggW2NyZWRlbnRpYWxdLCB3aGljaCBhIHdheSB0byBzaWduIGluIGdvdCBmcm9tIGFuCiAgLy8vIGlkZW50aXR5IHByb3ZpZGVyOiB0byB0aGUgdXNlciBvZiBpdHMgaWRlbnRpdHksIHdob20gaXQgY3JlYXRlcyB3aGVuCiAgLy8vIHRoZSBpZGVudGl0eSBpcyBuZXcuCiAgLy8vCiAgLy8vIEl0IGlzIGFsc28gY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzaWduZWQgaW4sIGFuIGFub255bW91cyBvbmUgb3IgdGhlCiAgLy8vIHVzZXIgb2YgYW5vdGhlciBhY2NvdW50OiB0aGUgdXNlciBvZiB0aGUgaWRlbnRpdHkgdGhlbiByZXBsYWNlcyB0aGF0CiAgLy8vIHVzZXIgb24gdGhlIGRldmljZS4gV2hlbiBpdCBmYWlscywgdGhhdCB1c2VyIHN0YXlzIHNpZ25lZCBpbi4KICAvLy8KICAvLy8gSXQgdGFrZXMgYSBjcmVkZW50aWFsIHRoYXQgW2xpbmtXaXRoXSByZWZ1c2VkIGp1c3QgYmVmb3JlLCB3aXRoCiAgLy8vIFtBdXRoRmFpbHVyZVJlYXNvbi5jcmVkZW50aWFsSW5Vc2VdIG9yCiAgLy8vIFtBdXRoRmFpbHVyZVJlYXNvbi5hY2NvdW50RXhpc3RzV2l0aE90aGVyTWV0aG9kXTogdGhlIHNlc3Npb24gcGFzc2VzCiAgLy8vIHRoZSBpZGVudGljYWwgb2JqZWN0LiBBbiBpZGVudGl0eSBwcm92aWRlciBtYXkgdGFrZSBhIGNyZWRlbnRpYWwgb25seQogIC8vLyBvbmNlLCBzbyB0aGUgc2VydmljZSBzaWducyBpbiB3aXRoIHdoYXQgaXRzIGJhY2tlbmQgYW5zd2VyZWQgdGhlCiAgLy8vIHJlZnVzZWQgbGluayBmb3IgdGhhdCBvYmplY3QsIG9yIHdpdGggdGhlIGNyZWRlbnRpYWwgaXRzZWxmIHdoZW4gdGhlCiAgLy8vIGJhY2tlbmQgZ2F2ZSBub3RoaW5nLiBGb3IgYW4gaWRlbnRpdHkgd2hvc2UgZW1haWwgYWRkcmVzcyBoYXMgYW4KICAvLy8gYWNjb3VudCB0aGF0IHNpZ25zIGluIGluIGFub3RoZXIgd2F5LCBpdCBmYWlscyB3aXRoCiAgLy8vIFtBdXRoRmFpbHVyZVJlYXNvbi5hY2NvdW50RXhpc3RzV2l0aE90aGVyTWV0aG9kXSBvciBzaWducyBpbiB0byB0aGF0CiAgLy8vIGFjY291bnQsIGFzIHRoZSBiYWNrZW5kIG9mIHRoZSBwcm92aWRlciBkZWNpZGVzLgogIEZ1dHVyZTx2b2lkPiBzaWduSW5XaXRoKFNpZ25JbkNyZWRlbnRpYWwgY3JlZGVudGlhbCk7CgogIC8vLyBHaXZlcyB0aGUgdXNlciB3aG8gaXMgc2lnbmVkIGluIHRoZSBpZGVudGl0eSBvZiBbY3JlZGVudGlhbF06IHRoZSB1c2VyCiAgLy8vIGtlZXBzIHRoZSBbQXV0aFVzZXIudWlkXSwgaXMgbm8gbG9uZ2VyIGFub255bW91cywgYW5kIHNpZ25zIGluIHdpdGgKICAvLy8gdGhhdCBpZGVudGl0eSBmcm9tIHRoZW4gb24uIFRoZSBzZXNzaW9uIGNhbGxzIGl0IGZvciBhbiBhbm9ueW1vdXMKICAvLy8gdXNlci4KICAvLy8KICAvLy8gV2hlbiB0aGUgaWRlbnRpdHkgYmVsb25ncyB0byBhbm90aGVyIHVzZXIsIGl0IGZhaWxzIHdpdGgKICAvLy8gW0F1dGhGYWlsdXJlUmVhc29uLmNyZWRlbnRpYWxJblVzZV0sIGFuZCB3aGVuIGl0cyBlbWFpbCBhZGRyZXNzIGhhcyBhbgogIC8vLyBhY2NvdW50IG9mIGFub3RoZXIgdXNlciwgd2l0aAogIC8vLyBbQXV0aEZhaWx1cmVSZWFzb24uYWNjb3VudEV4aXN0c1dpdGhPdGhlck1ldGhvZF0uIEVpdGhlciB3YXkgaXQgY2hhbmdlcwogIC8vLyBub3RoaW5nOiB0aGUgdXNlciBzdGF5cyBzaWduZWQgaW4sIHdpdGggdGhlIHNhbWUgaWQuCiAgLy8vCiAgLy8vIFdoZW4gaXQgZmFpbHMgd2l0aCBlaXRoZXIgcmVhc29uLCBpdCBrZWVwcyB3aGF0IGl0cyBiYWNrZW5kIGFuc3dlcmVkCiAgLy8vIGZvciB0aGlzIGNyZWRlbnRpYWwgb2JqZWN0LCBzdWNoIGFzIGEgY3JlZGVudGlhbCB0byBzaWduIGluIHdpdGgsCiAgLy8vIHdpdGhvdXQgaG9sZGluZyB0aGUgdG9rZW4gbG9uZ2VyIHRoYW4gbmVlZGVkLiBUaGUgc2Vzc2lvbiBwYXNzZXMgdGhlCiAgLy8vIGlkZW50aWNhbCBvYmplY3QgdG8gW3NpZ25JbldpdGhdLCB3aGljaCB1c2VzIHRoYXQgYW5zd2VyLCBvciB0aGUKICAvLy8gY3JlZGVudGlhbCBpdHNlbGYgd2hlbiB0aGUgYmFja2VuZCBnYXZlIG5vdGhpbmcuCiAgRnV0dXJlPHZvaWQ+IGxpbmtXaXRoKFNpZ25JbkNyZWRlbnRpYWwgY3JlZGVudGlhbCk7CgogIC8vLyBDcmVhdGVzIGFuIGFub255bW91cyB1c2VyLCB3aXRoIGFuIGlkIG9mIGl0cyBvd24sIGFuZCBzaWducyBpbiBhcyB0aGF0CiAgLy8vIHVzZXIuCiAgRnV0dXJlPHZvaWQ+IHNpZ25JbkFub255bW91c2x5KCk7CgogIC8vLyBTZW5kcyB0aGUgbWVzc2FnZSB3aXRoIHdoaWNoIHRoZSBvd25lciBvZiB0aGUgYWNjb3VudCBvZiBbZW1haWxdIHNldHMKICAvLy8gYSBuZXcgcGFzc3dvcmQuCiAgLy8vCiAgLy8vIEl0IGNvbXBsZXRlcyB3aGV0aGVyIFtlbWFpbF0gaGFzIGFuIGFjY291bnQgb3Igbm90LCBzbyB0aGF0IG5vYm9keQogIC8vLyBsZWFybnMgZnJvbSB0aGUgYXBwIHdoaWNoIGFkZHJlc3NlcyBoYXZlIG9uZS4KICBGdXR1cmU8dm9pZD4gc2VuZFBhc3N3b3JkUmVzZXQoU3RyaW5nIGVtYWlsKTsKCiAgLy8vIFNpZ25zIHRoZSB1c2VyIG91dCBvbiB0aGlzIGRldmljZS4gSXQgY29tcGxldGVzIHdoZW4gbm9ib2R5IGlzIHNpZ25lZAogIC8vLyBpbiB0b28uCiAgRnV0dXJlPHZvaWQ+IHNpZ25PdXQoKTsKCiAgLy8vIERlbGV0ZXMgdGhlIHVzZXIgd2hvIGlzIHNpZ25lZCBpbiwgYW4gYW5vbnltb3VzIG9uZSB0b28sIGFuZCBzaWducwogIC8vLyBvdXQuCiAgLy8vCiAgLy8vIEl0IHN1Y2NlZWRzIGZvciBhIHVzZXIgd2hvIGhhcyBqdXN0IHNpZ25lZCBpbiwgaW4gd2hpY2hldmVyIHdheSwgYW5kCiAgLy8vIGZvciBhbiBhbm9ueW1vdXMgdXNlciB3aG8gd2FzIGp1c3QgY3JlYXRlZC4gRm9yIGEgdXNlciB3aG8gc2lnbmVkIGluCiAgLy8vIGxvbmdlciBhZ28sIHN1Y2ggYXMgb25lIHdob20gdGhlIHNlcnZpY2UgZm91bmQgb24gdGhlIGRldmljZSB3aGVuIGl0CiAgLy8vIHdhcyBjcmVhdGVkLCBpdCBtYXkgZmFpbCB3aXRoCiAgLy8vIFtBdXRoRmFpbHVyZVJlYXNvbi5yZWNlbnRTaWduSW5SZXF1aXJlZF0uIEl0IHRoZW4gc3VjY2VlZHMgb25jZSB0aGUKICAvLy8gdXNlciBoYXMgc2lnbmVkIGluIGFnYWluLCBpbiB3aGljaGV2ZXIgd2F5IHRoZSBhY2NvdW50IGFsbG93cy4KICAvLy8KICAvLy8gV2l0aCBbZnJlc2hdLCBhIGNyZWRlbnRpYWwgdGhhdCBhIHdheSB0byBzaWduIGluIG9mIHRoZSB1c2VyIGdvdCBqdXN0CiAgLy8vIGJlZm9yZSwgdGhlIHNlcnZpY2UgZmlyc3Qgc2lnbnMgdGhlIHVzZXIgaW4gYWdhaW4gd2l0aCBpdCwgc28gdGhlCiAgLy8vIGRlbGV0aW9uIG5lZWRzIG5vIHJlY2VudCBzaWduLWluLCBhbmQgcmV2b2tlcyB0aGUgdG9rZW5zIHRoYXQgdGhlCiAgLy8vIGlkZW50aXR5IHByb3ZpZGVyIGdhdmUgdGhlIGFwcCB3aGVyZSBpdHMgYmFja2VuZCBjYW4sIHN1Y2ggYXMgd2l0aAogIC8vLyBbSWRUb2tlbkNyZWRlbnRpYWwuYXV0aG9yaXphdGlvbkNvZGVdLiBBIGNyZWRlbnRpYWwgb2YgYW5vdGhlciB1c2VyCiAgLy8vIGZhaWxzIHdpdGggW0F1dGhGYWlsdXJlUmVhc29uLmludmFsaWRDcmVkZW50aWFsc10sIGFuZCBhIHJldm9jYXRpb24KICAvLy8gdGhhdCBmYWlscywgc3VjaCBhcyBvbmUgdGhhdCB0aGUgYmFja2VuZCBpcyBub3Qgc2V0IHVwIGZvciwgd2l0aAogIC8vLyBbQXV0aEZhaWx1cmVSZWFzb24ubm90Q29uZmlndXJlZF0uIEVpdGhlciB3YXkgbm90aGluZyBpcyBkZWxldGVkLgogIEZ1dHVyZTx2b2lkPiBkZWxldGVBY2NvdW50KHtTaWduSW5DcmVkZW50aWFsPyBmcmVzaH0pOwp9Cg==",
      "type": "text"
    },
    {
      "path": "lib/core/auth/guest_data.dart",
      "data":
          "Ly8vIEdpdmVzIHRoZSBhY2NvdW50IFthY2NvdW50VWlkXSB3aGF0IGEgZ3Vlc3QgaGFkOiB0aGUgZnVuY3Rpb24gdGhhdAovLy8gW3Rha2VHdWVzdERhdGFdIHJldHVybnMuCnR5cGVkZWYgR2l2ZUd1ZXN0RGF0YSA9IEZ1dHVyZTx2b2lkPiBGdW5jdGlvbihTdHJpbmcgYWNjb3VudFVpZCk7CgovLy8gVGFrZXMgd2hhdCB0aGUgZ3Vlc3QgW2d1ZXN0VWlkXSBoYXMgaW4gdGhlIGFwcCwgYW5kIHJldHVybnMgdGhlIGZ1bmN0aW9uCi8vLyB0aGF0IGdpdmVzIGl0IHRvIGFuIGFjY291bnQsIG9yIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gbW92ZS4KLy8vCi8vLyBBIGd1ZXN0IGlzIGFuIGFub255bW91cyB1c2VyLiBXaGVuIGEgZ3Vlc3Qgc2lnbnMgaW4gdG8gYW4gYWNjb3VudCB0aGF0Ci8vLyBleGlzdHMgYWxyZWFkeSwgdGhlIHVzZXIgb2YgdGhlIGFwcCBjaGFuZ2VzIGZyb20gdGhlIGd1ZXN0IHRvIHRoYXQKLy8vIGFjY291bnQsIGFuZCB3aGF0IHdhcyBrZXB0IHVuZGVyIHRoZSBpZCBvZiB0aGUgZ3Vlc3QsIHN1Y2ggYXMgYSBjYXJ0IG9uCi8vLyBhIHNlcnZlciwgd291bGQgYmUgbGVmdCBiZWhpbmQuIFNvIHRoZSBzZXNzaW9uIG9mIHRoZSBhcHAgY2FsbHMgdGhpcwovLy8gZnVuY3Rpb24gYmVmb3JlIHRoZSBzaWduLWluLCB3aGlsZSB0aGUgZ3Vlc3QgaXMgc3RpbGwgc2lnbmVkIGluIGFuZCBtYXkKLy8vIHJlYWQgdGhhdCBkYXRhLCBhbmQgY2FsbHMgdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJucyBvbmNlIHRoZSB1c2VyIG9mCi8vLyB0aGUgYWNjb3VudCBpcyBzaWduZWQgaW46Ci8vLwovLy8gYGBgZGFydAovLy8gRnV0dXJlPEdpdmVHdWVzdERhdGE/PiB0YWtlR3Vlc3REYXRhKFN0cmluZyBndWVzdFVpZCkgYXN5bmMgewovLy8gICBmaW5hbCBjYXJ0ID0gYXdhaXQgY2FydHMucmVhZChndWVzdFVpZCk7Ci8vLyAgIGlmIChjYXJ0LmlzRW1wdHkpIHJldHVybiBudWxsOwovLy8gICByZXR1cm4gKGFjY291bnRVaWQpID0+IGNhcnRzLmFkZChhY2NvdW50VWlkLCBjYXJ0KTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIE9ubHkgcmVhZCBoZXJlOiB0aGUgc2lnbi1pbiBtYXkgc3RpbGwgZmFpbCwgYW5kIHRoZW4gdGhlIGd1ZXN0IHN0YXlzLiBBbgovLy8gZXJyb3IgdGhyb3duIGhlcmUgZmFpbHMgdGhlIHNpZ24taW4gYmVmb3JlIGl0IHN0YXJ0cy4gQW4gZXJyb3Igb2YgdGhlCi8vLyBmdW5jdGlvbiB0aGF0IHRoaXMgb25lIHJldHVybnMgaXMgcmVwb3J0ZWQgYXMgYW4gZXJyb3Igb2YgdGhlIGFwcCwgYW5kCi8vLyB0aGUgdXNlciBzdGF5cyBzaWduZWQgaW4uCi8vLwovLy8gQ2FsbCBubyBtZXRob2Qgb2YgYGFwcFNlc3Npb25gIGhlcmUsIG5vciBpbiB0aGUgZnVuY3Rpb24gdGhhdCB0aGlzIG9uZQovLy8gcmV0dXJucy4gVGhlIHNpZ24taW4gaXMgb25lIG9mIGl0cyBjYWxscywgd2hpY2ggcnVuIG9uZSBhZnRlciBhbm90aGVyLAovLy8gc28gc3VjaCBhIGNhbGwgd291bGQgd2FpdCBmb3IgdGhlIHNpZ24taW4sIGFuZCB0aGUgc2lnbi1pbiBmb3IgaXQuCi8vLwovLy8gSXQgaXMgbm90IGNhbGxlZCB3aGVuIGEgZ3Vlc3Qgc2lnbnMgdXAsIHNpbmNlIHRoZSBndWVzdCB0aGVuIGtlZXBzIHRoZQovLy8gaWQgYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgaXQsIG5vciB3aGVuIGEgZ3Vlc3Qgc2lnbnMgaW4gd2l0aCBhIHdheSB0byBzaWduCi8vLyBpbiB3aG9zZSBpZGVudGl0eSBubyB1c2VyIGhhcyB5ZXQsIHdoaWNoIHRoZSBndWVzdCB0aGVuIGdldHMgd2l0aCB0aGUKLy8vIGlkLCBub3IgaW4gYW4gYXBwIHdpdGhvdXQgYW5vbnltb3VzIHVzZXJzLgpGdXR1cmU8R2l2ZUd1ZXN0RGF0YT8+IHRha2VHdWVzdERhdGEoU3RyaW5nIGd1ZXN0VWlkKSBhc3luYyA9PiBudWxsOwo=",
      "type": "text"
    },
    {
      "path": "lib/core/auth/sign_in_methods.dart",
      "data":
          "aW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXIvZm91bmRhdGlvbi5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXIvd2lkZ2V0cy5kYXJ0JzsKCmltcG9ydCAnYXV0aF9zZXJ2aWNlLmRhcnQnIHNob3cgU2lnbkluQ3JlZGVudGlhbDsKCi8vLyBBIHdheSB0byBzaWduIGluIHdpdGggYW4gaWRlbnRpdHkgcHJvdmlkZXIsIHN1Y2ggYXMgdGhlIGFjY291bnQgb2YgdGhlCi8vLyB1c2VyIGF0IGFub3RoZXIgc2VydmljZTogdGhlIGxhYmVsIGFuZCB0aGUgaWNvbiBvZiBpdHMgYnV0dG9uLCB0aGUKLy8vIHBsYXRmb3JtcyB0aGF0IGl0IHdvcmtzIG9uLCBhbmQgdGhlIGZ1bmN0aW9uIHRoYXQgYXNrcyB0aGUgaWRlbnRpdHkKLy8vIHByb3ZpZGVyIGZvciBhIGNyZWRlbnRpYWwuCi8vLwovLy8gQSBzY3JlZW4gb2Ygc2lnbi1pbiBzaG93cyBhIGJ1dHRvbiBmb3IgZWFjaCBtZXRob2Qgb2YKLy8vIFthcHBTaWduSW5NZXRob2RzXSB0aGF0IFtpc0F2YWlsYWJsZV0uIE9uIGEgdGFwLCB0aGUgc3RhdGUgb2YgdGhlIHNjcmVlbgovLy8gY2FsbHMgW2NyZWRlbnRpYWxdIGFuZCBnaXZlcyB3aGF0IGl0IHJldHVybnMgdG8gYGFwcFNlc3Npb24uc2lnbkluV2l0aGAKLy8vIG9mIGBhcHBfc2Vzc2lvbi5kYXJ0YC4KZmluYWwgY2xhc3MgU2lnbkluTWV0aG9kIHsKICAvLy8gQ3JlYXRlcyBhIHdheSB0byBzaWduIGluIHdpdGggdGhlIGlkZW50aXR5IHByb3ZpZGVyIFtpc3N1ZXJdLgogIGNvbnN0IFNpZ25Jbk1ldGhvZCh7CiAgICByZXF1aXJlZCB0aGlzLmxhYmVsLAogICAgcmVxdWlyZWQgdGhpcy5pY29uLAogICAgcmVxdWlyZWQgdGhpcy5wbGF0Zm9ybXMsCiAgICByZXF1aXJlZCB0aGlzLmNyZWRlbnRpYWwsCiAgICByZXF1aXJlZCB0aGlzLmlzc3VlciwKICAgIHRoaXMucmV2b2tlc09uRGVsZXRpb24gPSBmYWxzZSwKICB9KTsKCiAgLy8vIFJldHVybnMgdGhlIGxhYmVsIG9mIHRoZSBidXR0b24gaW4gdGhlIGxhbmd1YWdlIG9mIHRoZSBhcHAsIGZvciB0aGUKICAvLy8gY29udGV4dCBvZiB0aGUgd2lkZ2V0IHRoYXQgc2hvd3MgaXQuIFRoYXQgd2lkZ2V0IGNhbGxzIGl0IGVhY2ggdGltZSBpdAogIC8vLyBidWlsZHMsIHNvIHRoZSB0ZXh0IGZvbGxvd3MgdGhlIGxhbmd1YWdlIG9mIHRoZSBhcHAuCiAgZmluYWwgU3RyaW5nIEZ1bmN0aW9uKEJ1aWxkQ29udGV4dCBjb250ZXh0KSBsYWJlbDsKCiAgLy8vIFRoZSBpY29uIG9mIHRoZSBidXR0b24sIGEgY29uc3RhbnQgd2lkZ2V0OiBhbiBgSWNvbmAgdGFrZXMgdGhlIGNvbG91cgogIC8vLyBvZiB0aGUgbGFiZWwsIGFuZCBhbiBgSW1hZ2VgIGtlZXBzIGl0cyBvd24gY29sb3Vycy4KICBmaW5hbCBXaWRnZXQgaWNvbjsKCiAgLy8vIFRoZSBwbGF0Zm9ybXMgdGhhdCB0aGUgd2F5IHRvIHNpZ24gaW4gd29ya3Mgb24uIE9uIGFueSBvdGhlciwKICAvLy8gW2lzQXZhaWxhYmxlXSBpcyBmYWxzZS4KICBmaW5hbCBTZXQ8VGFyZ2V0UGxhdGZvcm0+IHBsYXRmb3JtczsKCiAgLy8vIEFza3MgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGZvciBhIGNyZWRlbnRpYWwsIHN1Y2ggYXMgd2l0aCBhIHNoZWV0IG9mCiAgLy8vIGl0cyBvd24sIGFuZCByZXR1cm5zIGl0LCBvciBgbnVsbGAgd2hlbiB0aGUgdXNlciBjbG9zZWQgdGhlIHNoZWV0LAogIC8vLyB3aGljaCBpcyBubyBmYWlsdXJlLiBJdCBmYWlscyBvbmx5IHdpdGggYW4gYEF1dGhGYWlsdXJlYC4KICAvLy8KICAvLy8gVGhlIHN0YXRlIG9mIGEgc2NyZWVuIGNhbGxzIGl0LCBhbmQgbm8gY29kZSB3aXRoaW4gYSBjYWxsIG9mCiAgLy8vIGBhcHBTZXNzaW9uYDogYGFwcFNlc3Npb24uZGVsZXRlQWNjb3VudCgpYCBjYWxscyBpdCBpdHNlbGYsIGZvciBhCiAgLy8vIG1ldGhvZCB0aGF0IFtyZXZva2VzT25EZWxldGlvbl0uCiAgZmluYWwgRnV0dXJlPFNpZ25JbkNyZWRlbnRpYWw/PiBGdW5jdGlvbigpIGNyZWRlbnRpYWw7CgogIC8vLyBUaGUgaWRlbnRpdHkgcHJvdmlkZXI6IHRoZSBpc3N1ZXIgb2YgaXRzIHRva2VucywgYW4gaHR0cHMgVVJMIHN1Y2ggYXMKICAvLy8gYGh0dHBzOi8vYWNjb3VudHMuZXhhbXBsZS5jb21gLiBgQWNjb3VudFNlc3Npb24uaXNzdWVyc2Agb2YKICAvLy8gYGFwcF9zZXNzaW9uLmRhcnRgIGxpc3RzIHRob3NlIG9mIHRoZSB1c2VyIG9mIGFuIGFjY291bnQuCiAgZmluYWwgU3RyaW5nIGlzc3VlcjsKCiAgLy8vIFdoZXRoZXIgdGhlIGRlbGV0aW9uIG9mIGFuIGFjY291bnQgdGhhdCBzaWducyBpbiB0aGlzIHdheSBhc2tzIHRoZQogIC8vLyBpZGVudGl0eSBwcm92aWRlciBmb3IgYSBjcmVkZW50aWFsIGFnYWluIGZpcnN0LCBzbyB0aGF0IHRoZSBwcm92aWRlcgogIC8vLyBvZiBzaWduLWluIGNhbiByZXZva2UgdGhlIHRva2VucyB0aGF0IHRoZSBpZGVudGl0eSBwcm92aWRlciBnYXZlIHRoZQogIC8vLyBhcHAuIGBhcHBTZXNzaW9uLmRlbGV0ZUFjY291bnQoKWAgZG9lcyBpdC4KICBmaW5hbCBib29sIHJldm9rZXNPbkRlbGV0aW9uOwoKICAvLy8gV2hldGhlciB0aGUgd2F5IHRvIHNpZ24gaW4gd29ya3Mgb24gdGhlIHBsYXRmb3JtIHRoYXQgdGhlIGFwcCBydW5zIG9uLgogIGJvb2wgZ2V0IGlzQXZhaWxhYmxlID0+IHBsYXRmb3Jtcy5jb250YWlucyhkZWZhdWx0VGFyZ2V0UGxhdGZvcm0pOwp9CgovLy8gVGhlIHdheXMgdG8gc2lnbiBpbiB3aXRoIGFuIGlkZW50aXR5IHByb3ZpZGVyIG9mIHRoZSBhcHAsIGluIHRoZSBvcmRlcgovLy8gb2YgdGhlaXIgbW9kdWxlcy4gQW4gZW1haWwgYWRkcmVzcyBhbmQgYSBwYXNzd29yZCBhcmUgbm8gc3VjaCB3YXk6Ci8vLyBgYXBwU2Vzc2lvbi5zaWduSW5gIGFuZCBgYXBwU2Vzc2lvbi5zaWduVXBgIHRha2UgdGhlbS4KY29uc3QgTGlzdDxTaWduSW5NZXRob2Q+IGFwcFNpZ25Jbk1ldGhvZHMgPSBbCnt7e21ldGhvZHN9fX0KXTsKe3t7bGFiZWxzfX19Cg==",
      "type": "text"
    }
  ],
  "hooks": [],
  "name": "auth_role",
  "description":
      "The template of the auth role of SMF: the session of the app, and the service that a provider of sign-in implements.",
  "version": "0.1.0+1",
  "environment": {"mason": "^0.1.1"},
  "vars": {}
});