7c4d76f86dc3be68212579ad159bf65e.json 130 KB

1
  1. {"remainingRequest":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\babel-loader\\lib\\index.js!E:\\boman-framwork\\ruoyi-ui\\node_modules\\eslint-loader\\index.js??ref--13-0!E:\\boman-framwork\\ruoyi-ui\\src\\utils\\flow-desinger.js","dependencies":[{"path":"E:\\boman-framwork\\ruoyi-ui\\src\\utils\\flow-desinger.js","mtime":1620456587008},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:InVzZSBzdHJpY3QiOwoKdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKCJFOi9ib21hbi1mcmFtd29yay9ydW95aS11aS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHQiKS5kZWZhdWx0OwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7Cgp2YXIgX2RlZmluZVByb3BlcnR5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZSgiRTovYm9tYW4tZnJhbXdvcmsvcnVveWktdWkvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkiKSk7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsbC5qcyIpOwoKdmFyIF9pY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCIuL2ljb24uanMiKSk7CgpmdW5jdGlvbiBGbG93RGVzaWduZXIoZGlhZ3JhbURpdiwgZXZlbnQpIHsKICB2YXIgRyA9IGdvLkdyYXBoT2JqZWN0Lm1ha2U7CiAgdmFyIF90aGlzID0ge307CiAgdmFyIF9kZXNpZ25lciA9IHt9OwogIHZhciBteVBhbGV0dGUgPSBudWxsOwogIHZhciBfanNvbk5ld1N0ZXAgPSB7CiAgICBrZXk6IGd1aWQoKSwKICAgIHRleHQ6ICLlrqHmibnoioLngrkiLAogICAgcmVtYXJrOiAnJywKICAgIHR5cGU6IDAKICB9OwogIC8qKiDlpITnkIbkvKDlhaXkuovku7YgKi8KCiAgaWYgKGV2ZW50LnNob3dFZGl0Tm9kZSkgewogICAgLy/nvJbovpHoioLngrkKICAgIF90aGlzLnNob3dFZGl0Tm9kZSA9IGV2ZW50LnNob3dFZGl0Tm9kZTsKICB9CgogIGlmIChldmVudC5TZWxlY3Rpb25EZWxldGVkKSB7CiAgICAvL+WIoOmZpOS6i+S7tgogICAgX3RoaXMuU2VsZWN0aW9uRGVsZXRlZCA9IGV2ZW50LlNlbGVjdGlvbkRlbGV0ZWQ7CiAgfQoKICBpZiAoZXZlbnQuTGlua0RyYXduKSB7CiAgICAvL+e6v+eahOeUn+aIkOS6i+S7tgogICAgX3RoaXMuTGlua0RyYXduID0gZXZlbnQuTGlua0RyYXduOwogIH0KCiAgaWYgKGV2ZW50LmV4dGVybmFsb2JqZWN0c2Ryb3BwZWQpIHsKICAgIC8v6IqC54K555qE55Sf5oiQ5LqL5Lu2CiAgICBfdGhpcy5leHRlcm5hbG9iamVjdHNkcm9wcGVkID0gZXZlbnQuZXh0ZXJuYWxvYmplY3RzZHJvcHBlZDsKICB9CgogIGlmIChldmVudC5MaW5rUmVsaW5rZWQpIHsKICAgIC8v6L+e57q/5L+u5pS5CiAgICBfdGhpcy5MaW5rUmVsaW5rZWQgPSBldmVudC5MaW5rUmVsaW5rZWQ7CiAgfQogIC8qKiAtLS0tLS0tLXB1YmxpYyBtZXRob2QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiovCgogIC8qKg0KICAgKiDliJ3lp4vljJblm77kvovpnaLmnb8NCiAgICogMOWuoeaJueiKgueCuSAx5byA5aeL6IqC54K5IDLnu5PmnZ/oioLngrkgM+aTjeS9nOiKgueCuSA05pyN5Yqh6IqC54K5DQogICAqIEByZXR1cm5zIHsqfQ0KICAgKi8KCgogIHRoaXMuaW5pdFRvb2xiYXIgPSBmdW5jdGlvbiAoZGl2LCBtb2R1bGVUeXBlKSB7CiAgICB2YXIgbW9kZWxBcnIgPSBbLy8geyBrZXk6IGd1aWQoKSwgdGV4dDogIuW8gOWniyIsIGZpZ3VyZTogIlRlcm1pbmF0b3IiLCBmaWxsOiAiIzRmYmE0ZiIsIHR5cGU6IDEgfSwKICAgIHsKICAgICAga2V5OiBndWlkKCksCiAgICAgIHRleHQ6ICLlrqHmibnoioLngrkiLAogICAgICByZW1hcms6ICcnLAogICAgICB0eXBlOiAwLAogICAgICBjYXRlZ29yeTogJ0FwcHJvdmFsJwogICAgfSwgewogICAgICBrZXk6IGd1aWQoKSwKICAgICAgdGV4dDogIuaTjeS9nOiKgueCuSIsCiAgICAgIHJlbWFyazogJycsCiAgICAgIHR5cGU6IDQsCiAgICAgIGNhdGVnb3J5OiAnT3BlcmF0aW9uJwogICAgfSwgewogICAgICBrZXk6IGd1aWQoKSwKICAgICAgdGV4dDogIuacjeWKoeiKgueCuSIsCiAgICAgIHJlbWFyazogJycsCiAgICAgIHR5cGU6IDMsCiAgICAgIGNhdGVnb3J5OiAnU2VydmljZScKICAgIH0sIHsKICAgICAga2V5OiBndWlkKCksCiAgICAgIHRleHQ6ICLlrZDmtYHnqIvoioLngrkiLAogICAgICByZW1hcms6ICcnLAogICAgICB0eXBlOiA2LAogICAgICBjYXRlZ29yeTogJ1N1YnByb2Nlc3NlcycKICAgIH0gLy8geyBrZXk6IGd1aWQoKSwgdGV4dDogIue7k+adnyIsIGZpZ3VyZTogIlRlcm1pbmF0b3IiLCBmaWxsOiAiI0NFMDYyMCIsIHR5cGU6IDIgfQogICAgXTsKCiAgICBpZiAoIW1vZHVsZVR5cGUpIHsKICAgICAgbW9kZWxBcnIgPSBbewogICAgICAgIGtleTogZ3VpZCgpLAogICAgICAgIHRleHQ6ICLlrqHmibnoioLngrkiLAogICAgICAgIHJlbWFyazogJycsCiAgICAgICAgdHlwZTogMCwKICAgICAgICBjYXRlZ29yeTogJ0FwcHJvdmFsJwogICAgICB9XTsKICAgIH0KCiAgICBpZiAoIW15UGFsZXR0ZSkgewogICAgICB2YXIgUGFsZXR0ZSA9IEcoZ28uUGFsZXR0ZSwgZGl2LCAvLyDlv4XpobvmmK9ESVblhYPntKAKICAgICAgewogICAgICAgIG1heFNlbGVjdGlvbkNvdW50OiAzLAogICAgICAgIG5vZGVUZW1wbGF0ZU1hcDogX2Rlc2lnbmVyLm5vZGVUZW1wbGF0ZU1hcCwKICAgICAgICAvLyDot5/orr7orqHlm77lhbHlkIzkuIDlpZfmoLflvI/mqKHmnb8KICAgICAgICBtb2RlbDogbmV3IGdvLkdyYXBoTGlua3NNb2RlbChtb2RlbEFycikKICAgICAgfSk7CiAgICAgIG15UGFsZXR0ZSA9IFBhbGV0dGU7CiAgICB9IGVsc2UgewogICAgICBteVBhbGV0dGUubW9kZWwubm9kZURhdGFBcnJheSA9IG1vZGVsQXJyOwogICAgfQoKICAgIHJldHVybiBteVBhbGV0dGU7CiAgfTsKICAvKioNCiAgICog5Zyo6K6+6K6h6Z2i5p2/5Lit5pi+56S65rWB56iL5Zu+DQogICAqIEBwYXJhbSBmbG93RGF0YSAg5rWB56iL5Zu+anNvbuaVsOaNrg0KICAgKi8KCgogIHRoaXMuZGlzcGxheUZsb3cgPSBmdW5jdGlvbiAoZmxvd0RhdGEpIHsKICAgIGlmICghZmxvd0RhdGEpIHJldHVybjsKICAgIF9kZXNpZ25lci5tb2RlbCA9IGdvLk1vZGVsLmZyb21Kc29uKGZsb3dEYXRhKTsKICAgIHZhciBwb3MgPSBfZGVzaWduZXIubW9kZWwubW9kZWxEYXRhLnBvc2l0aW9uOyAvLyBpZiAocG9zKSBfZGVzaWduZXIuaW5pdGlhbFBvc2l0aW9uID0gZ28uUG9pbnQucGFyc2UocG9zKTsKCiAgICB0aGlzLmRpYWdyYW0gPSBfZGVzaWduZXI7IC8vIOabtOaUueaJgOaciei/nue6v+S4remXtOeahOaWh+acrOiDjOaZr+iJsgoKICAgIHNldExpbmtUZXh0QmcoKTsKICB9OwogIC8qKg0KICAgKiDliJvlu7rmlrDmraXpqqQNCiAgICovCgoKICB0aGlzLmNyZWF0ZVN0ZXAgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIganNvbk5ld1N0ZXAgPSB7CiAgICAgIGtleTogX2pzb25OZXdTdGVwLmtleSwKICAgICAgdGV4dDogX2pzb25OZXdTdGVwLnRleHQKICAgIH07CiAgICBqc29uTmV3U3RlcC5sb2MgPSAiMjcwIDE0MCI7IC8vIOKAnOaWsOatpemqpOKAneaYvuekuueahOS9jee9rgoKICAgIF9kZXNpZ25lci5tb2RlbC5hZGROb2RlRGF0YShqc29uTmV3U3RlcCk7CiAgfTsKICAvKioNCiAgICog6I635Y+W5rWB56iL5Zu+5pWw5o2uDQogICAqIEByZXR1cm5zIHsqfQ0KICAgKi8KCgogIHRoaXMuZ2V0Rmxvd0RhdGEgPSBmdW5jdGlvbiAoKSB7CiAgICBfZGVzaWduZXIubW9kZWwubW9kZWxEYXRhLnBvc2l0aW9uID0gZ28uUG9pbnQuc3RyaW5naWZ5KF9kZXNpZ25lci5wb3NpdGlvbik7CiAgICByZXR1cm4gX2Rlc2lnbmVyLm1vZGVsLnRvSnNvbigpOwogIH07CiAgLyoqDQogICAqIOajgOmqjOa1geeoi+WbvuaYr+WQpuinhOiMgw0KICAgKi8KCgogIHRoaXMuY2hlY2tEYXRhID0gZnVuY3Rpb24gKCkgewogICAgdmFyIGVyck1zZyA9ICIiOyAvLyDmo4Dmn6XvvJrmr4/kuKrmraXpqqTlv4XpobvljIXlkKvop5LoibIKCiAgICBpZiAoIV9kZXNpZ25lci5tb2RlbC5ub2RlRGF0YUFycmF5KSByZXR1cm4gJ+ivt+e7mOWItua1geeoi+Wbvic7IC8vICQuZWFjaChfZGVzaWduZXIubW9kZWwubm9kZURhdGFBcnJheSwgZnVuY3Rpb24oaSwgaXRlbSkgewogICAgLy8gICAgIGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgicmVtYXJrIikgfHwgaXRlbS5yZW1hcmsgPT09ICIiKSB7CiAgICAvLyAgICAgICAgIGVyck1zZyA9ICLor7fkuLrmraXpqqTjgJAiICsgaXRlbS50ZXh0ICsgIuOAkeiuvue9ruWkh+azqH4iOwogICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAvLyAgICAgfQogICAgLy8gfSk7CgogICAgX2Rlc2lnbmVyLm1vZGVsLm5vZGVEYXRhQXJyYXkubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgicmVtYXJrIikgfHwgaXRlbS5yZW1hcmsgPT09ICIiKSB7CiAgICAgICAgZXJyTXNnID0gIuivt+S4uuatpemqpOOAkCIgKyBpdGVtLnRleHQgKyAi44CR6K6+572u5aSH5rOofiI7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9KTsKCiAgICByZXR1cm4gZXJyTXNnOwogIH07CiAgLyoqIC0tLS0tLS0tcHVibGljIG1ldGhvZC0tLS0tLS0tLS0tLS1lbmQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qKi8KCgogIHRoaXMuZGlhZ3JhbSA9IGluaXQoZGlhZ3JhbURpdik7CiAgLyoqIC0tLS0tLS0tcHJpdmF0ZSBtZXRob2QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiovCgogIC8qKg0KICAgKiDliJ3lp4vljJbmtYHnqIvorr7orqHlmagNCiAgICogQHBhcmFtIGRpdklkIOiuvuiuoeWZqERpdg0KICAgKiANCiAgICogbm9kZSB0eXBlIA0KICAgKi8KCiAgZnVuY3Rpb24gaW5pdChkaXZJZCkgewogICAgdmFyIF9HLCBfRzIsIF9HMywgX0c0OwoKICAgIF9kZXNpZ25lciA9IEcoZ28uRGlhZ3JhbSwgZGl2SWQsIC8vIG11c3QgbmFtZSBvciByZWZlciB0byB0aGUgRElWIEhUTUwgZWxlbWVudAogICAgewogICAgICAvLyBncmlkOiBHKGdvLlBhbmVsLCAiR3JpZCIsICDog4zmma/moLwKICAgICAgLy8gICAgIEcoZ28uU2hhcGUsICJMaW5lSCIsIHsgc3Ryb2tlOiAibGlnaHRncmF5Iiwgc3Ryb2tlV2lkdGg6IDAuNSB9KSwKICAgICAgLy8gICAgIEcoZ28uU2hhcGUsICJMaW5lSCIsIHsgc3Ryb2tlOiAiZ3JheSIsIHN0cm9rZVdpZHRoOiAwLjUsIGludGVydmFsOiAxMCB9KSwKICAgICAgLy8gICAgIEcoZ28uU2hhcGUsICJMaW5lViIsIHsgc3Ryb2tlOiAibGlnaHRncmF5Iiwgc3Ryb2tlV2lkdGg6IDAuNSB9KSwKICAgICAgLy8gICAgIEcoZ28uU2hhcGUsICJMaW5lViIsIHsgc3Ryb2tlOiAiZ3JheSIsIHN0cm9rZVdpZHRoOiAwLjUsIGludGVydmFsOiAxMCB9KQogICAgICAvLyApLAogICAgICBhbGxvd0Ryb3A6IHRydWUsCiAgICAgIC8vIG11c3QgYmUgdHJ1ZSB0byBhY2NlcHQgZHJvcHMgZnJvbSB0aGUgUGFsZXR0ZQogICAgICBhbGxvd1RleHRFZGl0OiBmYWxzZSwKICAgICAgYWxsb3dIb3Jpem9udGFsU2Nyb2xsOiB0cnVlLAogICAgICBhbGxvd1ZlcnRpY2FsU2Nyb2xsOiB0cnVlLAogICAgICAvLyAiY2xpY2tDcmVhdGluZ1Rvb2wuaXNEb3VibGVDbGljayI6ZmFsc2UsCiAgICAgIC8vICJjbGlja0NyZWF0aW5nVG9vbC5hcmNoZXR5cGVOb2RlRGF0YSI6IHt9LCAvLyDlj4zlh7vliJvlu7rmlrDmraXpqqQKICAgICAgLy8gImRyYWdnaW5nVG9vbC5kcmFnc0xpbmsiOiB0cnVlLAogICAgICAiZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkIjogdHJ1ZSwKICAgICAgLy8gImxpbmtpbmdUb29sLmlzVW5jb25uZWN0ZWRMaW5rVmFsaWQiOiB0cnVlLAogICAgICAibGlua2luZ1Rvb2wucG9ydEdyYXZpdHkiOiAyMCwKICAgICAgLy8gInJlbGlua2luZ1Rvb2wuaXNVbmNvbm5lY3RlZExpbmtWYWxpZCI6IHRydWUsCiAgICAgICJyZWxpbmtpbmdUb29sLnBvcnRHcmF2aXR5IjogMjAsCiAgICAgICJyZWxpbmtpbmdUb29sLmZyb21IYW5kbGVBcmNoZXR5cGUiOiBHKGdvLlNoYXBlLCAiRGlhbW9uZCIsIHsKICAgICAgICBzZWdtZW50SW5kZXg6IDAsCiAgICAgICAgY3Vyc29yOiAicG9pbnRlciIsCiAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKDgsIDgpLAogICAgICAgIGZpbGw6ICJ0b21hdG8iLAogICAgICAgIHN0cm9rZTogImRhcmtyZWQiCiAgICAgIH0pLAogICAgICAicmVsaW5raW5nVG9vbC50b0hhbmRsZUFyY2hldHlwZSI6IEcoZ28uU2hhcGUsICJEaWFtb25kIiwgewogICAgICAgIHNlZ21lbnRJbmRleDogLTEsCiAgICAgICAgY3Vyc29yOiAicG9pbnRlciIsCiAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKDgsIDgpLAogICAgICAgIGZpbGw6ICJkYXJrcmVkIiwKICAgICAgICBzdHJva2U6ICJ0b21hdG8iCiAgICAgIH0pLAogICAgICAibGlua1Jlc2hhcGluZ1Rvb2wuaGFuZGxlQXJjaGV0eXBlIjogRyhnby5TaGFwZSwgIkRpYW1vbmQiLCB7CiAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKDcsIDcpLAogICAgICAgIGZpbGw6ICJsaWdodGJsdWUiLAogICAgICAgIHN0cm9rZTogImRlZXBza3libHVlIgogICAgICB9KSwKICAgICAgInVuZG9NYW5hZ2VyLmlzRW5hYmxlZCI6IGZhbHNlCiAgICB9KTsgLy8g5rWB56iL5Zu+5aaC5p6c5pyJ5Y+Y5Yqo77yM5YiZ5o+Q56S655So5oi35L+d5a2YCgogICAgX2Rlc2lnbmVyLmFkZERpYWdyYW1MaXN0ZW5lcigiTW9kaWZpZWQiLCBvbkRpYWdyYW1Nb2RpZmllZCk7IC8vIOWPjOWHu+S6i+S7tgoKCiAgICBfZGVzaWduZXIuYWRkRGlhZ3JhbUxpc3RlbmVyKCJPYmplY3REb3VibGVDbGlja2VkIiwgb25PYmplY3REb3VibGVDbGlja2VkKTsgLy8g56e76Zmk5LqL5Lu2CgoKICAgIF9kZXNpZ25lci5hZGREaWFncmFtTGlzdGVuZXIoIlNlbGVjdGlvbkRlbGV0ZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICBlLnN1YmplY3QuZWFjaChmdW5jdGlvbiAobikgewogICAgICAgIF90aGlzLlNlbGVjdGlvbkRlbGV0ZWQobi5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsgLy/nur/nmoTnlJ/miJAKCgogICAgX2Rlc2lnbmVyLmFkZERpYWdyYW1MaXN0ZW5lcigiTGlua0RyYXduIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgZS5zdWJqZWN0LmRhdGEua2V5ID0gZ3VpZCgpOwoKICAgICAgX3RoaXMuTGlua0RyYXduKGUuc3ViamVjdC5kYXRhKTsKICAgIH0pOyAvL+e6v+eahOmHjee7mAoKCiAgICBfZGVzaWduZXIuYWRkRGlhZ3JhbUxpc3RlbmVyKCJMaW5rUmVsaW5rZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICBfdGhpcy5MaW5rUmVsaW5rZWQoZS5zdWJqZWN0LmRhdGEpOwogICAgfSk7IC8v5re75Yqg55uR5ZCs6IqC54K555Sf5oiQ5LqL5Lu2CgoKICAgIF9kZXNpZ25lci5hZGREaWFncmFtTGlzdGVuZXIoImV4dGVybmFsb2JqZWN0c2Ryb3BwZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICAvLyB2YXIganNvbk5ld1N0ZXAgPSB7a2V5Ol9qc29uTmV3U3RlcC5rZXksIHRleHQ6X2pzb25OZXdTdGVwLnRleHR9OwogICAgICBlLnN1YmplY3QuZWFjaChmdW5jdGlvbiAobikgewogICAgICAgIC8v5b6X5Yiw5LuOUGFsZXR0ZeaLlui/h+adpeeahOiKgueCuQogICAgICAgIF90aGlzLmV4dGVybmFsb2JqZWN0c2Ryb3BwZWQobi5kYXRhKTsKICAgICAgfSk7IC8vIGpzb25OZXdTdGVwLmxvYyA9ICItMTAwIDAiOy8vIOKAnOaWsOatpemqpOKAneaYvuekuueahOS9jee9rgogICAgICAvLyBqc29uTmV3U3RlcC50eXBlID0gMCAKICAgICAgLy8ganNvbk5ld1N0ZXAua2V5ID0gZ3VpZCgpCiAgICAgIC8vIC8vIF9kZXNpZ25lci5tb2RlbC5hZGROb2RlRGF0YShqc29uTmV3U3RlcCk7CiAgICAgIC8vIF90aGlzLmV4dGVybmFsb2JqZWN0c2Ryb3BwZWQoanNvbk5ld1N0ZXApCiAgICB9KTsgLy/nm5HlkKzoioLngrnmiJbnur/nmoTliKDpmaTliY3kuovku7YKCgogICAgX2Rlc2lnbmVyLmNvbW1hbmRIYW5kbGVyLmNhbkRlbGV0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uIChlKSB7CiAgICAgIC8v55So5L6L6I635Y+W6YCJ5Lit55qE6IqC54K55oiW57q/IAogICAgICByZXR1cm4gX2Rlc2lnbmVyLnNlbGVjdGlvbi5hbGwoZnVuY3Rpb24gKG5vZGVPckxpbmspIHsKICAgICAgICAvL+WIpOaWreaYr+WQpuaYr+W8gOWni+aIluiAhee7k+adn+iKgueCuQogICAgICAgIGlmIChub2RlT3JMaW5rLmRhdGEudHlwZSA9PT0gMSB8fCBub2RlT3JMaW5rLmRhdGEudHlwZSA9PT0gMikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfTsgLy8gdmFyIHRvb2wgPSBfZGVzaWduZXIudG9vbE1hbmFnZXIuY2xpY2tDcmVhdGluZ1Rvb2w7CiAgICAvLyB0b29sLmluc2VydFBhcnQgPSAobG9jKSA9PiB7CiAgICAvLyAgICAgdmFyIGpzb25OZXdTdGVwID0ge2tleTpfanNvbk5ld1N0ZXAua2V5LCB0ZXh0Ol9qc29uTmV3U3RlcC50ZXh0fTsKICAgIC8vICAgICBqc29uTmV3U3RlcC50eXBlID0gMCAKICAgIC8vICAgICBqc29uTmV3U3RlcC5sb2MgPSBgJHtsb2MueH0gJHtsb2MueX1gOwogICAgLy8gICAgIF9kZXNpZ25lci5tb2RlbC5hZGROb2RlRGF0YShqc29uTmV3U3RlcCk7CiAgICAvLyAgICAgX3RoaXMuZXh0ZXJuYWxvYmplY3RzZHJvcHBlZChqc29uTmV3U3RlcCkKICAgIC8vIH0KICAgIC8vIOa1geeoi+atpemqpOeahOagt+W8j+aooeadvwogICAgLy8gX2Rlc2lnbmVyLm5vZGVUZW1wbGF0ZSA9IGFwcHJvdmFsTm9kZVRlbXBsYXRlKCk7CiAgICAvLyBfZGVzaWduZXIubm9kZVRlbXBsYXRlID0gb3BlcmF0aW9uTm9kZVRlbXBsYXRlKCk7CiAgICAvLyBfZGVzaWduZXIubm9kZVRlbXBsYXRlTWFwLmFkZCgnQXBwcm92YWwnLGFwcHJvdmFsTm9kZVRlbXBsYXRlKQogICAgLy8g5pyN5Yqh6IqC54K5CgoKICAgIF9kZXNpZ25lci5ub2RlVGVtcGxhdGVNYXAuYWRkKCdTdWJwcm9jZXNzZXMnLCBHKGdvLk5vZGUsICJTcG90IiwgewogICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyCiAgICB9LCBuZXcgZ28uQmluZGluZygibG9jYXRpb24iLCAibG9jIiwgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSwgewogICAgICBzZWxlY3RhYmxlOiB0cnVlLAogICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogbWFrZU5vZGVTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSgpCiAgICB9LCBuZXcgZ28uQmluZGluZygiYW5nbGUiKS5tYWtlVHdvV2F5KCksIC8vIHRoZSBtYWluIG9iamVjdCBpcyBhIFBhbmVsIHRoYXQgc3Vycm91bmRzIGEgVGV4dEJsb2NrIHdpdGggYSBTaGFwZQogICAgRyhnby5QYW5lbCwgIkF1dG8iLCB7CiAgICAgIG5hbWU6ICJQQU5FTCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJSb3VuZGVkUmVjdGFuZ2xlIiwgLy8gZGVmYXVsdCBmaWd1cmUKICAgIHsKICAgICAgcG9ydElkOiAiIiwKICAgICAgLy8gdGhlIGRlZmF1bHQgcG9ydDogaWYgbm8gc3BvdCBvbiBsaW5rIGRhdGEsIHVzZSBjbG9zZXN0IHNpZGUKICAgICAgbmFtZTogIlBJUEUiLAogICAgICBmcm9tTGlua2FibGU6IHRydWUsCiAgICAgIHRvTGlua2FibGU6IHRydWUsCiAgICAgIGN1cnNvcjogInBvaW50ZXIiLAogICAgICBmaWxsOiAid2hpdGUiLAogICAgICAvLyBkZWZhdWx0IGNvbG9yCiAgICAgIHN0cm9rZVdpZHRoOiAxLAogICAgICBzdHJva2U6ICIjRENERUUyIgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImZpZ3VyZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlIiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VEYXNoQXJyYXkiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZVdpZHRoIiksIG5ldyBnby5CaW5kaW5nKCJmaWxsIikpLCBHKGdvLlNoYXBlLCB7CiAgICAgIG1hcmdpbjogNSwKICAgICAgZmlsbDogJ2JsYWNrJywKICAgICAgc3Ryb2tlV2lkdGg6IDAsCiAgICAgIHdpZHRoOiAyOCwKICAgICAgaGVpZ2h0OiAyMCwKICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LAogICAgICBnZW9tZXRyeTogZ28uR2VvbWV0cnkucGFyc2UoZ2VvRnVuYygnc3VicHJvY2Vzc2VzJykpCiAgICB9KSwgRyhnby5UZXh0QmxvY2ssIChfRyA9IHsKICAgICAgZm9udDogImJvbGQgMTFwdCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIiwKICAgICAgbWFyZ2luOiA4LAogICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCwKICAgICAgc3Ryb2tlOiAiIzM0MzQzNCIsCiAgICAgIHRleHRBbGlnbjogImNlbnRlciIsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsCiAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBnby5TcG90LkNlbnRlcgogICAgfSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0csICJ3cmFwIiwgZ28uVGV4dEJsb2NrLldyYXBGaXQpLCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRywgIm1pblNpemUiLCBuZXcgZ28uU2l6ZSgxMjYsIDI3KSksICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKF9HLCAibWF4U2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgTmFOKSksIF9HKSwgbmV3IGdvLkJpbmRpbmcoInRleHQiKS5tYWtlVHdvV2F5KCkpLCAvLyB0aGUgbGFiZWwgc2hvd3MgdGhlIG5vZGUgZGF0YSdzIHRleHQKICAgIHsKICAgICAgdG9vbFRpcDogLy8gdGhpcyB0b29sdGlwIEFkb3JubWVudCBpcyBzaGFyZWQgYnkgYWxsIG5vZGVzCiAgICAgIEcoZ28uQWRvcm5tZW50LCAiQXV0byIsIEcoZ28uU2hhcGUsIHsKICAgICAgICBmaWxsOiAiI0ZGRkZDQyIKICAgICAgfSksIEcoZ28uVGV4dEJsb2NrLCB7CiAgICAgICAgbWFyZ2luOiA0CiAgICAgIH0sIC8vIHRoZSB0b29sdGlwIHNob3dzIHRoZSByZXN1bHQgb2YgY2FsbGluZyBub2RlSW5mbyhkYXRhKQogICAgICBuZXcgZ28uQmluZGluZygidGV4dCIsICIiLCBub2RlSW5mbykpKSAvLyDnu5HlrprkuIrkuIvmlofoj5zljZUKICAgICAgLy8gY29udGV4dE1lbnU6IG1ha2VQYXJ0Q29udGV4dE1lbnUoKQoKICAgIH0pLCAvLyA05Liq6L+e5o6l54K5CiAgICBtYWtlTm9kZVBvcnQoIlQiLCBnby5TcG90LlRvcCwgZmFsc2UsIHRydWUpLCBtYWtlTm9kZVBvcnQoIkwiLCBnby5TcG90LkxlZnQsIHRydWUsIHRydWUpLCBtYWtlTm9kZVBvcnQoIlIiLCBnby5TcG90LlJpZ2h0LCB0cnVlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJCIiwgZ28uU3BvdC5Cb3R0b20sIHRydWUsIGZhbHNlKSwgewogICAgICBtb3VzZUVudGVyOiBmdW5jdGlvbiBtb3VzZUVudGVyKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgdHJ1ZSk7CiAgICAgIH0sCiAgICAgIG1vdXNlTGVhdmU6IGZ1bmN0aW9uIG1vdXNlTGVhdmUoZSwgbm9kZSkgewogICAgICAgIHNob3dOb2RlUG9ydChub2RlLCBmYWxzZSk7CiAgICAgIH0KICAgIH0pKTsgLy8g5pyN5Yqh6IqC54K5CgoKICAgIF9kZXNpZ25lci5ub2RlVGVtcGxhdGVNYXAuYWRkKCdTZXJ2aWNlJywgRyhnby5Ob2RlLCAiU3BvdCIsIHsKICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImxvY2F0aW9uIiwgImxvYyIsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksIHsKICAgICAgc2VsZWN0YWJsZTogdHJ1ZSwKICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IG1ha2VOb2RlU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUoKQogICAgfSwgbmV3IGdvLkJpbmRpbmcoImFuZ2xlIikubWFrZVR3b1dheSgpLCAvLyB0aGUgbWFpbiBvYmplY3QgaXMgYSBQYW5lbCB0aGF0IHN1cnJvdW5kcyBhIFRleHRCbG9jayB3aXRoIGEgU2hhcGUKICAgIEcoZ28uUGFuZWwsICJBdXRvIiwgewogICAgICBuYW1lOiAiUEFORUwiCiAgICB9LCBuZXcgZ28uQmluZGluZygiZGVzaXJlZFNpemUiLCAic2l6ZSIsIGdvLlNpemUucGFyc2UpLm1ha2VUd29XYXkoZ28uU2l6ZS5zdHJpbmdpZnkpLCBHKGdvLlNoYXBlLCAiUm91bmRlZFJlY3RhbmdsZSIsIC8vIGRlZmF1bHQgZmlndXJlCiAgICB7CiAgICAgIHBvcnRJZDogIiIsCiAgICAgIC8vIHRoZSBkZWZhdWx0IHBvcnQ6IGlmIG5vIHNwb3Qgb24gbGluayBkYXRhLCB1c2UgY2xvc2VzdCBzaWRlCiAgICAgIG5hbWU6ICJQSVBFIiwKICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLAogICAgICB0b0xpbmthYmxlOiB0cnVlLAogICAgICBjdXJzb3I6ICJwb2ludGVyIiwKICAgICAgZmlsbDogIndoaXRlIiwKICAgICAgLy8gZGVmYXVsdCBjb2xvcgogICAgICBzdHJva2VXaWR0aDogMSwKICAgICAgc3Ryb2tlOiAiI0RDREVFMiIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJmaWd1cmUiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlRGFzaEFycmF5IiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VXaWR0aCIpLCBuZXcgZ28uQmluZGluZygiZmlsbCIpKSwgRyhnby5TaGFwZSwgewogICAgICBtYXJnaW46IDUsCiAgICAgIGZpbGw6ICdibGFjaycsCiAgICAgIHN0cm9rZVdpZHRoOiAwLAogICAgICB3aWR0aDogMjgsCiAgICAgIGhlaWdodDogMjAsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCwKICAgICAgZ2VvbWV0cnk6IGdvLkdlb21ldHJ5LnBhcnNlKGdlb0Z1bmMoJ3NlcnZpY2UnKSkKICAgIH0pLCBHKGdvLlRleHRCbG9jaywgKF9HMiA9IHsKICAgICAgZm9udDogImJvbGQgMTFwdCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIiwKICAgICAgbWFyZ2luOiA4LAogICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCwKICAgICAgc3Ryb2tlOiAiIzM0MzQzNCIsCiAgICAgIHRleHRBbGlnbjogImNlbnRlciIsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsCiAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBnby5TcG90LkNlbnRlcgogICAgfSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0cyLCAid3JhcCIsIGdvLlRleHRCbG9jay5XcmFwRml0KSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0cyLCAibWluU2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgMjcpKSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0cyLCAibWF4U2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgTmFOKSksIF9HMiksIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IikubWFrZVR3b1dheSgpKSwgLy8gdGhlIGxhYmVsIHNob3dzIHRoZSBub2RlIGRhdGEncyB0ZXh0CiAgICB7CiAgICAgIHRvb2xUaXA6IC8vIHRoaXMgdG9vbHRpcCBBZG9ybm1lbnQgaXMgc2hhcmVkIGJ5IGFsbCBub2RlcwogICAgICBHKGdvLkFkb3JubWVudCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgICAgZmlsbDogIiNGRkZGQ0MiCiAgICAgIH0pLCBHKGdvLlRleHRCbG9jaywgewogICAgICAgIG1hcmdpbjogNAogICAgICB9LCAvLyB0aGUgdG9vbHRpcCBzaG93cyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgbm9kZUluZm8oZGF0YSkKICAgICAgbmV3IGdvLkJpbmRpbmcoInRleHQiLCAiIiwgbm9kZUluZm8pKSkgLy8g57uR5a6a5LiK5LiL5paH6I+c5Y2VCiAgICAgIC8vIGNvbnRleHRNZW51OiBtYWtlUGFydENvbnRleHRNZW51KCkKCiAgICB9KSwgLy8gNOS4qui/nuaOpeeCuQogICAgbWFrZU5vZGVQb3J0KCJUIiwgZ28uU3BvdC5Ub3AsIGZhbHNlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJMIiwgZ28uU3BvdC5MZWZ0LCB0cnVlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJSIiwgZ28uU3BvdC5SaWdodCwgdHJ1ZSwgdHJ1ZSksIG1ha2VOb2RlUG9ydCgiQiIsIGdvLlNwb3QuQm90dG9tLCB0cnVlLCBmYWxzZSksIHsKICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24gbW91c2VFbnRlcihlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIHRydWUpOwogICAgICB9LAogICAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiBtb3VzZUxlYXZlKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgZmFsc2UpOwogICAgICB9CiAgICB9KSk7IC8vIOWuoeaJueiKgueCuQoKCiAgICBfZGVzaWduZXIubm9kZVRlbXBsYXRlTWFwLmFkZCgnQXBwcm92YWwnLCBHKGdvLk5vZGUsICJTcG90IiwgewogICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyCiAgICB9LCBuZXcgZ28uQmluZGluZygibG9jYXRpb24iLCAibG9jIiwgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSwgewogICAgICBzZWxlY3RhYmxlOiB0cnVlLAogICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogbWFrZU5vZGVTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSgpCiAgICB9LCBuZXcgZ28uQmluZGluZygiYW5nbGUiKS5tYWtlVHdvV2F5KCksIC8vIHRoZSBtYWluIG9iamVjdCBpcyBhIFBhbmVsIHRoYXQgc3Vycm91bmRzIGEgVGV4dEJsb2NrIHdpdGggYSBTaGFwZQogICAgRyhnby5QYW5lbCwgIkF1dG8iLCB7CiAgICAgIG5hbWU6ICJQQU5FTCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJSb3VuZGVkUmVjdGFuZ2xlIiwgLy8gZGVmYXVsdCBmaWd1cmUKICAgIHsKICAgICAgcG9ydElkOiAiIiwKICAgICAgLy8gdGhlIGRlZmF1bHQgcG9ydDogaWYgbm8gc3BvdCBvbiBsaW5rIGRhdGEsIHVzZSBjbG9zZXN0IHNpZGUKICAgICAgbmFtZTogIlBJUEUiLAogICAgICBmcm9tTGlua2FibGU6IHRydWUsCiAgICAgIHRvTGlua2FibGU6IHRydWUsCiAgICAgIGN1cnNvcjogInBvaW50ZXIiLAogICAgICBmaWxsOiAid2hpdGUiLAogICAgICAvLyBkZWZhdWx0IGNvbG9yCiAgICAgIHN0cm9rZVdpZHRoOiAxLAogICAgICBzdHJva2U6ICIjRENERUUyIgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImZpZ3VyZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlIiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VEYXNoQXJyYXkiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZVdpZHRoIiksIG5ldyBnby5CaW5kaW5nKCJmaWxsIikpLCBHKGdvLlNoYXBlLCB7CiAgICAgIG1hcmdpbjogNSwKICAgICAgZmlsbDogJ2JsYWNrJywKICAgICAgc3Ryb2tlV2lkdGg6IDAsCiAgICAgIHdpZHRoOiAyOCwKICAgICAgaGVpZ2h0OiAyMCwKICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LAogICAgICBnZW9tZXRyeTogZ28uR2VvbWV0cnkucGFyc2UoZ2VvRnVuYygnYXBwcm92YWwnKSkKICAgIH0pLCBHKGdvLlRleHRCbG9jaywgKF9HMyA9IHsKICAgICAgZm9udDogImJvbGQgMTFwdCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIiwKICAgICAgbWFyZ2luOiA4LAogICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCwKICAgICAgc3Ryb2tlOiAiIzM0MzQzNCIsCiAgICAgIHRleHRBbGlnbjogImNlbnRlciIsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsCiAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBnby5TcG90LkNlbnRlcgogICAgfSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0czLCAid3JhcCIsIGdvLlRleHRCbG9jay5XcmFwRml0KSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0czLCAibWluU2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgMjcpKSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0czLCAibWF4U2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgTmFOKSksIF9HMyksIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IikubWFrZVR3b1dheSgpKSwgLy8gdGhlIGxhYmVsIHNob3dzIHRoZSBub2RlIGRhdGEncyB0ZXh0CiAgICB7CiAgICAgIHRvb2xUaXA6IC8vIHRoaXMgdG9vbHRpcCBBZG9ybm1lbnQgaXMgc2hhcmVkIGJ5IGFsbCBub2RlcwogICAgICBHKGdvLkFkb3JubWVudCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgICAgZmlsbDogIiNGRkZGQ0MiCiAgICAgIH0pLCBHKGdvLlRleHRCbG9jaywgewogICAgICAgIG1hcmdpbjogNAogICAgICB9LCAvLyB0aGUgdG9vbHRpcCBzaG93cyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgbm9kZUluZm8oZGF0YSkKICAgICAgbmV3IGdvLkJpbmRpbmcoInRleHQiLCAiIiwgbm9kZUluZm8pKSkgLy8g57uR5a6a5LiK5LiL5paH6I+c5Y2VCiAgICAgIC8vIGNvbnRleHRNZW51OiBtYWtlUGFydENvbnRleHRNZW51KCkKCiAgICB9KSwgLy8gNOS4qui/nuaOpeeCuQogICAgbWFrZU5vZGVQb3J0KCJUIiwgZ28uU3BvdC5Ub3AsIGZhbHNlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJMIiwgZ28uU3BvdC5MZWZ0LCB0cnVlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJSIiwgZ28uU3BvdC5SaWdodCwgdHJ1ZSwgdHJ1ZSksIG1ha2VOb2RlUG9ydCgiQiIsIGdvLlNwb3QuQm90dG9tLCB0cnVlLCBmYWxzZSksIHsKICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24gbW91c2VFbnRlcihlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIHRydWUpOwogICAgICB9LAogICAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiBtb3VzZUxlYXZlKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgZmFsc2UpOwogICAgICB9CiAgICB9KSk7IC8vIOaTjeS9nOiKgueCuQoKCiAgICBfZGVzaWduZXIubm9kZVRlbXBsYXRlTWFwLmFkZCgnT3BlcmF0aW9uJywgRyhnby5Ob2RlLCAiU3BvdCIsIHsKICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImxvY2F0aW9uIiwgImxvYyIsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksIHsKICAgICAgc2VsZWN0YWJsZTogdHJ1ZSwKICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IG1ha2VOb2RlU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUoKQogICAgfSwgbmV3IGdvLkJpbmRpbmcoImFuZ2xlIikubWFrZVR3b1dheSgpLCAvLyB0aGUgbWFpbiBvYmplY3QgaXMgYSBQYW5lbCB0aGF0IHN1cnJvdW5kcyBhIFRleHRCbG9jayB3aXRoIGEgU2hhcGUKICAgIEcoZ28uUGFuZWwsICJBdXRvIiwgewogICAgICBuYW1lOiAiUEFORUwiCiAgICB9LCBuZXcgZ28uQmluZGluZygiZGVzaXJlZFNpemUiLCAic2l6ZSIsIGdvLlNpemUucGFyc2UpLm1ha2VUd29XYXkoZ28uU2l6ZS5zdHJpbmdpZnkpLCBHKGdvLlNoYXBlLCAiUm91bmRlZFJlY3RhbmdsZSIsIC8vIGRlZmF1bHQgZmlndXJlCiAgICB7CiAgICAgIHBvcnRJZDogIiIsCiAgICAgIC8vIHRoZSBkZWZhdWx0IHBvcnQ6IGlmIG5vIHNwb3Qgb24gbGluayBkYXRhLCB1c2UgY2xvc2VzdCBzaWRlCiAgICAgIG5hbWU6ICJQSVBFIiwKICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLAogICAgICB0b0xpbmthYmxlOiB0cnVlLAogICAgICBjdXJzb3I6ICJwb2ludGVyIiwKICAgICAgZmlsbDogIndoaXRlIiwKICAgICAgLy8gZGVmYXVsdCBjb2xvcgogICAgICBzdHJva2VXaWR0aDogMSwKICAgICAgc3Ryb2tlOiAiI0RDREVFMiIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJmaWd1cmUiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlRGFzaEFycmF5IiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VXaWR0aCIpLCBuZXcgZ28uQmluZGluZygiZmlsbCIpKSwgRyhnby5TaGFwZSwgewogICAgICBtYXJnaW46IDUsCiAgICAgIGZpbGw6ICdibGFjaycsCiAgICAgIHN0cm9rZVdpZHRoOiAwLAogICAgICB3aWR0aDogMjgsCiAgICAgIGhlaWdodDogMjAsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCwKICAgICAgZ2VvbWV0cnk6IGdvLkdlb21ldHJ5LnBhcnNlKGdlb0Z1bmMoJ29wZXJhdGlvbicpKQogICAgfSksIEcoZ28uVGV4dEJsb2NrLCAoX0c0ID0gewogICAgICBmb250OiAiYm9sZCAxMXB0IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYiLAogICAgICBtYXJnaW46IDgsCiAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LAogICAgICBzdHJva2U6ICIjMzQzNDM0IiwKICAgICAgdGV4dEFsaWduOiAiY2VudGVyIiwKICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlciwKICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyCiAgICB9LCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRzQsICJ3cmFwIiwgZ28uVGV4dEJsb2NrLldyYXBGaXQpLCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRzQsICJtaW5TaXplIiwgbmV3IGdvLlNpemUoMTI2LCAyNykpLCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRzQsICJtYXhTaXplIiwgbmV3IGdvLlNpemUoMTI2LCBOYU4pKSwgX0c0KSwgbmV3IGdvLkJpbmRpbmcoInRleHQiKS5tYWtlVHdvV2F5KCkpLCAvLyB0aGUgbGFiZWwgc2hvd3MgdGhlIG5vZGUgZGF0YSdzIHRleHQKICAgIHsKICAgICAgdG9vbFRpcDogLy8gdGhpcyB0b29sdGlwIEFkb3JubWVudCBpcyBzaGFyZWQgYnkgYWxsIG5vZGVzCiAgICAgIEcoZ28uQWRvcm5tZW50LCAiQXV0byIsIEcoZ28uU2hhcGUsIHsKICAgICAgICBmaWxsOiAiI0ZGRkZDQyIKICAgICAgfSksIEcoZ28uVGV4dEJsb2NrLCB7CiAgICAgICAgbWFyZ2luOiA0CiAgICAgIH0sIC8vIHRoZSB0b29sdGlwIHNob3dzIHRoZSByZXN1bHQgb2YgY2FsbGluZyBub2RlSW5mbyhkYXRhKQogICAgICBuZXcgZ28uQmluZGluZygidGV4dCIsICIiLCBub2RlSW5mbykpKSAvLyDnu5HlrprkuIrkuIvmlofoj5zljZUKICAgICAgLy8gY29udGV4dE1lbnU6IG1ha2VQYXJ0Q29udGV4dE1lbnUoKQoKICAgIH0pLCAvLyA05Liq6L+e5o6l54K5CiAgICBtYWtlTm9kZVBvcnQoIlQiLCBnby5TcG90LlRvcCwgZmFsc2UsIHRydWUpLCBtYWtlTm9kZVBvcnQoIkwiLCBnby5TcG90LkxlZnQsIHRydWUsIHRydWUpLCBtYWtlTm9kZVBvcnQoIlIiLCBnby5TcG90LlJpZ2h0LCB0cnVlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJCIiwgZ28uU3BvdC5Cb3R0b20sIHRydWUsIGZhbHNlKSwgewogICAgICBtb3VzZUVudGVyOiBmdW5jdGlvbiBtb3VzZUVudGVyKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgdHJ1ZSk7CiAgICAgIH0sCiAgICAgIG1vdXNlTGVhdmU6IGZ1bmN0aW9uIG1vdXNlTGVhdmUoZSwgbm9kZSkgewogICAgICAgIHNob3dOb2RlUG9ydChub2RlLCBmYWxzZSk7CiAgICAgIH0KICAgIH0pKTsgLy8g5re75Yqg5byA5aeL6IqC54K5CgoKICAgIF9kZXNpZ25lci5ub2RlVGVtcGxhdGVNYXAuYWRkKCJTdGFydCIsIEcoZ28uTm9kZSwgIlNwb3QiLCB7CiAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJsb2NhdGlvbiIsICJsb2MiLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLCB7CiAgICAgIHNlbGVjdGFibGU6IHRydWUsCiAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiBtYWtlTm9kZVNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlKCkKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJhbmdsZSIpLm1ha2VUd29XYXkoKSwgRyhnby5QYW5lbCwgIkF1dG8iLCB7CiAgICAgIG5hbWU6ICJTdGFydCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJDaXJjbGUiLCAvLyBkZWZhdWx0IGZpZ3VyZQogICAgewogICAgICBwb3J0SWQ6ICIiLAogICAgICAvLyB0aGUgZGVmYXVsdCBwb3J0OiBpZiBubyBzcG90IG9uIGxpbmsgZGF0YSwgdXNlIGNsb3Nlc3Qgc2lkZQogICAgICBuYW1lOiAiU3RhcnQiLAogICAgICBmcm9tTGlua2FibGU6IHRydWUsCiAgICAgIHRvTGlua2FibGU6IHRydWUsCiAgICAgIGN1cnNvcjogInBvaW50ZXIiLAogICAgICBmaWxsOiAiIzVGNzc5MCIsCiAgICAgIC8vIGRlZmF1bHQgY29sb3IKICAgICAgc3Ryb2tlV2lkdGg6IDEsCiAgICAgIHN0cm9rZTogIiM1Rjc3OTAiIC8vIGdlb21ldHJ5U3RyaW5nOiAiRiBNMCAwIEwxMDAgMCBCLTkwIDE4MCAxMDAgMjUgMjUgMjUgTDAgNTAgQjkwIDE4MCAwIDI1IDI1IDI1IgoKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJmaWd1cmUiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlRGFzaEFycmF5IiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VXaWR0aCIpLCBuZXcgZ28uQmluZGluZygiZmlsbCIpKSwgRyhnby5UZXh0QmxvY2ssIHsKICAgICAgZm9udDogImJvbGQgMTFwdCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIiwKICAgICAgbWFyZ2luOiA4LAogICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCwKICAgICAgc3Ryb2tlOiAid2hpdGUiLAogICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IikubWFrZVR3b1dheSgpKSwgewogICAgICB0b29sVGlwOiBHKGdvLkFkb3JubWVudCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgICAgZmlsbDogIiNGRkZGQ0MiCiAgICAgIH0pLCBHKGdvLlRleHRCbG9jaywgewogICAgICAgIG1hcmdpbjogNAogICAgICB9LCBuZXcgZ28uQmluZGluZygidGV4dCIsICIiLCBub2RlSW5mbykpKQogICAgfSksIC8vIDTkuKrov57mjqXngrkKICAgIG1ha2VOb2RlUG9ydCgiQiIsIGdvLlNwb3QuQm90dG9tLCB0cnVlLCBmYWxzZSksIHsKICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24gbW91c2VFbnRlcihlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIHRydWUpOwogICAgICB9LAogICAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiBtb3VzZUxlYXZlKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgZmFsc2UpOwogICAgICB9CiAgICB9KSk7IC8vIOa3u+WKoOe7k+adn+iKgueCuQoKCiAgICBfZGVzaWduZXIubm9kZVRlbXBsYXRlTWFwLmFkZCgiRW5kIiwgRyhnby5Ob2RlLCAiU3BvdCIsIHsKICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImxvY2F0aW9uIiwgImxvYyIsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksIHsKICAgICAgc2VsZWN0YWJsZTogdHJ1ZSwKICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IG1ha2VOb2RlU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUoKQogICAgfSwgbmV3IGdvLkJpbmRpbmcoImFuZ2xlIikubWFrZVR3b1dheSgpLCBHKGdvLlBhbmVsLCAiQXV0byIsIHsKICAgICAgbmFtZTogIkVuZCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJDaXJjbGUiLCAvLyBkZWZhdWx0IGZpZ3VyZQogICAgewogICAgICBwb3J0SWQ6ICIiLAogICAgICAvLyB0aGUgZGVmYXVsdCBwb3J0OiBpZiBubyBzcG90IG9uIGxpbmsgZGF0YSwgdXNlIGNsb3Nlc3Qgc2lkZQogICAgICBuYW1lOiAiRW5kIiwKICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLAogICAgICB0b0xpbmthYmxlOiB0cnVlLAogICAgICBjdXJzb3I6ICJwb2ludGVyIiwKICAgICAgZmlsbDogIiM1Rjc3OTAiLAogICAgICAvLyBkZWZhdWx0IGNvbG9yCiAgICAgIHN0cm9rZVdpZHRoOiAxLAogICAgICBzdHJva2U6ICIjNUY3NzkwIiAvLyBnZW9tZXRyeVN0cmluZzogIkYgTTAgMCBMMTAwIDAgUTE3NSAyNSAxMDAgNTAgTDAgNTAgUS03NSAyNSAwIDAiCgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImZpZ3VyZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlIiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VEYXNoQXJyYXkiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZVdpZHRoIiksIG5ldyBnby5CaW5kaW5nKCJmaWxsIikpLCBHKGdvLlRleHRCbG9jaywgewogICAgICBmb250OiAiYm9sZCAxMXB0IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYiLAogICAgICBtYXJnaW46IDgsCiAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LAogICAgICBzdHJva2U6ICJ3aGl0ZSIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IikubWFrZVR3b1dheSgpKSwgewogICAgICB0b29sVGlwOiBHKGdvLkFkb3JubWVudCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgICAgZmlsbDogIiNGRkZGQ0MiCiAgICAgIH0pLCBHKGdvLlRleHRCbG9jaywgewogICAgICAgIG1hcmdpbjogNAogICAgICB9LCBuZXcgZ28uQmluZGluZygidGV4dCIsICIiLCBub2RlSW5mbykpKQogICAgfSksIC8vIDTkuKrov57mjqXngrkKICAgIG1ha2VOb2RlUG9ydCgiVCIsIGdvLlNwb3QuVG9wLCBmYWxzZSwgdHJ1ZSksIHsKICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24gbW91c2VFbnRlcihlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIHRydWUpOwogICAgICB9LAogICAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiBtb3VzZUxlYXZlKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgZmFsc2UpOwogICAgICB9CiAgICB9KSk7IC8vIOa1geeoi+i/nuaOpee6v+eahOagt+W8j+aooeadvwoKCiAgICBfZGVzaWduZXIubGlua1RlbXBsYXRlID0gbWFrZUxpbmtUZW1wbGF0ZSgpOwogICAgcmV0dXJuIF9kZXNpZ25lcjsKICB9CiAgLyoqDQogICAqIOeUn+aIkEdVSUQNCiAgICogQHJldHVybnMge3N0cmluZ30NCiAgICovCgoKICBmdW5jdGlvbiBndWlkKCkgewogICAgdmFyIHIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoMzAwMDAgLSAxICsgMSkgKyAxKTsKICAgIHJldHVybiBOdW1iZXIocik7CiAgfQoKICBmdW5jdGlvbiBnZW9GdW5jKGdlb25hbWUpIHsKICAgIGlmIChfaWNvbi5kZWZhdWx0W2dlb25hbWVdKSByZXR1cm4gX2ljb24uZGVmYXVsdFtnZW9uYW1lXTtlbHNlIHJldHVybiBfaWNvbi5kZWZhdWx0WyJhcHByb3ZhbCJdOyAvLyBkZWZhdWx0IGljb24KICB9CiAgLyoqDQogICAqIOaTjeS9nOiKgueCueagt+W8j+aooeadvw0KICAgKiBAcmV0dXJucyB7Kn0NCiAgICovCgoKICBmdW5jdGlvbiBvcGVyYXRpb25Ob2RlVGVtcGxhdGUoKSB7CiAgICB2YXIgX0c1OwoKICAgIHJldHVybiBHKGdvLk5vZGUsICJTcG90IiwgewogICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyCiAgICB9LCBuZXcgZ28uQmluZGluZygibG9jYXRpb24iLCAibG9jIiwgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSwgewogICAgICBzZWxlY3RhYmxlOiB0cnVlLAogICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogbWFrZU5vZGVTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSgpCiAgICB9LCBuZXcgZ28uQmluZGluZygiYW5nbGUiKS5tYWtlVHdvV2F5KCksIC8vIHRoZSBtYWluIG9iamVjdCBpcyBhIFBhbmVsIHRoYXQgc3Vycm91bmRzIGEgVGV4dEJsb2NrIHdpdGggYSBTaGFwZQogICAgRyhnby5QYW5lbCwgIkF1dG8iLCB7CiAgICAgIG5hbWU6ICJQQU5FTCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJSb3VuZGVkUmVjdGFuZ2xlIiwgLy8gZGVmYXVsdCBmaWd1cmUKICAgIHsKICAgICAgcG9ydElkOiAiIiwKICAgICAgLy8gdGhlIGRlZmF1bHQgcG9ydDogaWYgbm8gc3BvdCBvbiBsaW5rIGRhdGEsIHVzZSBjbG9zZXN0IHNpZGUKICAgICAgbmFtZTogIlBJUEUiLAogICAgICBmcm9tTGlua2FibGU6IHRydWUsCiAgICAgIHRvTGlua2FibGU6IHRydWUsCiAgICAgIGN1cnNvcjogInBvaW50ZXIiLAogICAgICBmaWxsOiAid2hpdGUiLAogICAgICAvLyBkZWZhdWx0IGNvbG9yCiAgICAgIHN0cm9rZVdpZHRoOiAxLAogICAgICBzdHJva2U6ICIjRENERUUyIgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImZpZ3VyZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlIiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VEYXNoQXJyYXkiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZVdpZHRoIiksIG5ldyBnby5CaW5kaW5nKCJmaWxsIikpLCBHKGdvLlNoYXBlLCB7CiAgICAgIG1hcmdpbjogNSwKICAgICAgZmlsbDogJ2JsYWNrJywKICAgICAgc3Ryb2tlV2lkdGg6IDAsCiAgICAgIHdpZHRoOiAyMCwKICAgICAgaGVpZ2h0OiAyMCwKICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LAogICAgICBnZW9tZXRyeTogZ28uR2VvbWV0cnkucGFyc2UoZ2VvRnVuYygnb3BlcmF0aW9uJykpCiAgICB9KSwgRyhnby5UZXh0QmxvY2ssIChfRzUgPSB7CiAgICAgIGZvbnQ6ICJib2xkIDExcHQgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiIsCiAgICAgIG1hcmdpbjogOCwKICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsCiAgICAgIHN0cm9rZTogIiMzNDM0MzQiLAogICAgICB0ZXh0QWxpZ246ICJjZW50ZXIiLAogICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLAogICAgICB2ZXJ0aWNhbEFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIKICAgIH0sICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKF9HNSwgIndyYXAiLCBnby5UZXh0QmxvY2suV3JhcEZpdCksICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKF9HNSwgIm1pblNpemUiLCBuZXcgZ28uU2l6ZSgxMjYsIDI3KSksICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKF9HNSwgIm1heFNpemUiLCBuZXcgZ28uU2l6ZSgxMjYsIE5hTikpLCBfRzUpLCBuZXcgZ28uQmluZGluZygidGV4dCIpLm1ha2VUd29XYXkoKSksIC8vIHRoZSBsYWJlbCBzaG93cyB0aGUgbm9kZSBkYXRhJ3MgdGV4dAogICAgewogICAgICB0b29sVGlwOiAvLyB0aGlzIHRvb2x0aXAgQWRvcm5tZW50IGlzIHNoYXJlZCBieSBhbGwgbm9kZXMKICAgICAgRyhnby5BZG9ybm1lbnQsICJBdXRvIiwgRyhnby5TaGFwZSwgewogICAgICAgIGZpbGw6ICIjRkZGRkNDIgogICAgICB9KSwgRyhnby5UZXh0QmxvY2ssIHsKICAgICAgICBtYXJnaW46IDQKICAgICAgfSwgLy8gdGhlIHRvb2x0aXAgc2hvd3MgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIG5vZGVJbmZvKGRhdGEpCiAgICAgIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IiwgIiIsIG5vZGVJbmZvKSkpIC8vIOe7keWumuS4iuS4i+aWh+iPnOWNlQogICAgICAvLyBjb250ZXh0TWVudTogbWFrZVBhcnRDb250ZXh0TWVudSgpCgogICAgfSksIC8vIDTkuKrov57mjqXngrkKICAgIG1ha2VOb2RlUG9ydCgiVCIsIGdvLlNwb3QuVG9wLCBmYWxzZSwgdHJ1ZSksIG1ha2VOb2RlUG9ydCgiTCIsIGdvLlNwb3QuTGVmdCwgdHJ1ZSwgdHJ1ZSksIG1ha2VOb2RlUG9ydCgiUiIsIGdvLlNwb3QuUmlnaHQsIHRydWUsIHRydWUpLCBtYWtlTm9kZVBvcnQoIkIiLCBnby5TcG90LkJvdHRvbSwgdHJ1ZSwgZmFsc2UpLCB7CiAgICAgIG1vdXNlRW50ZXI6IGZ1bmN0aW9uIG1vdXNlRW50ZXIoZSwgbm9kZSkgewogICAgICAgIHNob3dOb2RlUG9ydChub2RlLCB0cnVlKTsKICAgICAgfSwKICAgICAgbW91c2VMZWF2ZTogZnVuY3Rpb24gbW91c2VMZWF2ZShlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIGZhbHNlKTsKICAgICAgfQogICAgfSk7CiAgfQogIC8qKg0KICAgKiDmk43kvZzoioLngrnmoLflvI/mqKHmnb8NCiAgICogQHJldHVybnMgeyp9DQogICAqLwoKCiAgZnVuY3Rpb24gYXBwcm92YWxOb2RlVGVtcGxhdGUoKSB7CiAgICB2YXIgX0c2OwoKICAgIHJldHVybiBHKGdvLk5vZGUsICJTcG90IiwgewogICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyCiAgICB9LCBuZXcgZ28uQmluZGluZygibG9jYXRpb24iLCAibG9jIiwgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSwgewogICAgICBzZWxlY3RhYmxlOiB0cnVlLAogICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogbWFrZU5vZGVTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSgpCiAgICB9LCBuZXcgZ28uQmluZGluZygiYW5nbGUiKS5tYWtlVHdvV2F5KCksIC8vIHRoZSBtYWluIG9iamVjdCBpcyBhIFBhbmVsIHRoYXQgc3Vycm91bmRzIGEgVGV4dEJsb2NrIHdpdGggYSBTaGFwZQogICAgRyhnby5QYW5lbCwgIkF1dG8iLCB7CiAgICAgIG5hbWU6ICJQQU5FTCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJSb3VuZGVkUmVjdGFuZ2xlIiwgLy8gZGVmYXVsdCBmaWd1cmUKICAgIHsKICAgICAgcG9ydElkOiAiIiwKICAgICAgLy8gdGhlIGRlZmF1bHQgcG9ydDogaWYgbm8gc3BvdCBvbiBsaW5rIGRhdGEsIHVzZSBjbG9zZXN0IHNpZGUKICAgICAgbmFtZTogIlBJUEUiLAogICAgICBmcm9tTGlua2FibGU6IHRydWUsCiAgICAgIHRvTGlua2FibGU6IHRydWUsCiAgICAgIGN1cnNvcjogInBvaW50ZXIiLAogICAgICBmaWxsOiAid2hpdGUiLAogICAgICAvLyBkZWZhdWx0IGNvbG9yCiAgICAgIHN0cm9rZVdpZHRoOiAxLAogICAgICBzdHJva2U6ICIjRENERUUyIgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImZpZ3VyZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlIiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VEYXNoQXJyYXkiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZVdpZHRoIiksIG5ldyBnby5CaW5kaW5nKCJmaWxsIikpLCBHKGdvLlNoYXBlLCB7CiAgICAgIG1hcmdpbjogNSwKICAgICAgZmlsbDogJ2JsYWNrJywKICAgICAgc3Ryb2tlV2lkdGg6IDAsCiAgICAgIHdpZHRoOiAyMCwKICAgICAgaGVpZ2h0OiAyMCwKICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LAogICAgICBnZW9tZXRyeTogZ28uR2VvbWV0cnkucGFyc2UoZ2VvRnVuYygnYXBwcm92YWwnKSkKICAgIH0pLCBHKGdvLlRleHRCbG9jaywgKF9HNiA9IHsKICAgICAgZm9udDogImJvbGQgMTFwdCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIiwKICAgICAgbWFyZ2luOiA4LAogICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCwKICAgICAgc3Ryb2tlOiAiIzM0MzQzNCIsCiAgICAgIHRleHRBbGlnbjogImNlbnRlciIsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsCiAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBnby5TcG90LkNlbnRlcgogICAgfSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0c2LCAid3JhcCIsIGdvLlRleHRCbG9jay5XcmFwRml0KSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0c2LCAibWluU2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgMjcpKSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0c2LCAibWF4U2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgTmFOKSksIF9HNiksIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IikubWFrZVR3b1dheSgpKSwgLy8gdGhlIGxhYmVsIHNob3dzIHRoZSBub2RlIGRhdGEncyB0ZXh0CiAgICB7CiAgICAgIHRvb2xUaXA6IC8vIHRoaXMgdG9vbHRpcCBBZG9ybm1lbnQgaXMgc2hhcmVkIGJ5IGFsbCBub2RlcwogICAgICBHKGdvLkFkb3JubWVudCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgICAgZmlsbDogIiNGRkZGQ0MiCiAgICAgIH0pLCBHKGdvLlRleHRCbG9jaywgewogICAgICAgIG1hcmdpbjogNAogICAgICB9LCAvLyB0aGUgdG9vbHRpcCBzaG93cyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgbm9kZUluZm8oZGF0YSkKICAgICAgbmV3IGdvLkJpbmRpbmcoInRleHQiLCAiIiwgbm9kZUluZm8pKSkgLy8g57uR5a6a5LiK5LiL5paH6I+c5Y2VCiAgICAgIC8vIGNvbnRleHRNZW51OiBtYWtlUGFydENvbnRleHRNZW51KCkKCiAgICB9KSwgLy8gNOS4qui/nuaOpeeCuQogICAgbWFrZU5vZGVQb3J0KCJUIiwgZ28uU3BvdC5Ub3AsIGZhbHNlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJMIiwgZ28uU3BvdC5MZWZ0LCB0cnVlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJSIiwgZ28uU3BvdC5SaWdodCwgdHJ1ZSwgdHJ1ZSksIG1ha2VOb2RlUG9ydCgiQiIsIGdvLlNwb3QuQm90dG9tLCB0cnVlLCBmYWxzZSksIHsKICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24gbW91c2VFbnRlcihlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIHRydWUpOwogICAgICB9LAogICAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiBtb3VzZUxlYXZlKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgZmFsc2UpOwogICAgICB9CiAgICB9KTsKICB9CiAgLyoqDQogICAqIOmAieS4reiKgueCueeahOagt+W8jw0KICAgKiBAcmV0dXJucyB7Kn0NCiAgICovCgoKICBmdW5jdGlvbiBtYWtlTm9kZVNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlKCkgewogICAgcmV0dXJuIEcoZ28uQWRvcm5tZW50LCAiQXV0byIsIEcoZ28uU2hhcGUsIHsKICAgICAgZmlsbDogbnVsbCwKICAgICAgc3Ryb2tlOiAiZGVlcHNreWJsdWUiLAogICAgICBzdHJva2VXaWR0aDogMS41LAogICAgICBzdHJva2VEYXNoQXJyYXk6IFs0LCAyXQogICAgfSksIEcoZ28uUGxhY2Vob2xkZXIpKTsKICB9CiAgLyoqDQogICAqIOWIm+W7uui/nuaOpeeCuQ0KICAgKiBAcGFyYW0gbmFtZQ0KICAgKiBAcGFyYW0gc3BvdA0KICAgKiBAcGFyYW0gb3V0cHV0DQogICAqIEBwYXJhbSBpbnB1dA0KICAgKiBAcmV0dXJucyB7Kn0NCiAgICovCgoKICBmdW5jdGlvbiBtYWtlTm9kZVBvcnQobmFtZSwgc3BvdCwgb3V0cHV0LCBpbnB1dCkgewogICAgLy8gdGhlIHBvcnQgaXMgYmFzaWNhbGx5IGp1c3QgYSBzbWFsbCB0cmFuc3BhcmVudCBzcXVhcmUKICAgIHJldHVybiBHKGdvLlNoYXBlLCAiQ2lyY2xlIiwgewogICAgICBmaWxsOiBudWxsLAogICAgICAvLyBub3Qgc2VlbiwgYnkgZGVmYXVsdDsgc2V0IHRvIGEgdHJhbnNsdWNlbnQgZ3JheSBieSBzaG93U21hbGxQb3J0cywgZGVmaW5lZCBiZWxvdwogICAgICBzdHJva2U6IG51bGwsCiAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZSg3LCA3KSwKICAgICAgYWxpZ25tZW50OiBzcG90LAogICAgICAvLyBhbGlnbiB0aGUgcG9ydCBvbiB0aGUgbWFpbiBTaGFwZQogICAgICBhbGlnbm1lbnRGb2N1czogc3BvdCwKICAgICAgLy8ganVzdCBpbnNpZGUgdGhlIFNoYXBlCiAgICAgIHBvcnRJZDogbmFtZSwKICAgICAgLy8gZGVjbGFyZSB0aGlzIG9iamVjdCB0byBiZSBhICJwb3J0IgogICAgICBmcm9tU3BvdDogc3BvdCwKICAgICAgdG9TcG90OiBzcG90LAogICAgICAvLyBkZWNsYXJlIHdoZXJlIGxpbmtzIG1heSBjb25uZWN0IGF0IHRoaXMgcG9ydAogICAgICBmcm9tTGlua2FibGU6IG91dHB1dCwKICAgICAgdG9MaW5rYWJsZTogaW5wdXQsCiAgICAgIC8vIGRlY2xhcmUgd2hldGhlciB0aGUgdXNlciBtYXkgZHJhdyBsaW5rcyB0by9mcm9tIGhlcmUKICAgICAgY3Vyc29yOiAicG9pbnRlciIgLy8gc2hvdyBhIGRpZmZlcmVudCBjdXJzb3IgdG8gaW5kaWNhdGUgcG90ZW50aWFsIGxpbmsgcG9pbnQKCiAgICB9KTsKICB9CiAgLyoqDQogICAqIHRvb2x0aXDkuIrmmL7npLrnmoTkv6Hmga8NCiAgICogQHBhcmFtIGQNCiAgICogQHJldHVybnMge3N0cmluZ30NCiAgICovCgoKICBmdW5jdGlvbiBub2RlSW5mbyhkKSB7CiAgICByZXR1cm4gJ+WPjOWHu+WPr+e8lui+kSc7CiAgfQogIC8qKg0KICAgKiDlj7PplK7oj5zljZUNCiAgICogQHJldHVybnMgeyp9DQogICAqLwoKCiAgZnVuY3Rpb24gbWFrZVBhcnRDb250ZXh0TWVudSgpIHsKICAgIHJldHVybiBHKGdvLkFkb3JubWVudCwgIlZlcnRpY2FsIiwgbWFrZU1lbnVJdGVtKCLnvJbovpEiLCBmdW5jdGlvbiAoZSwgb2JqKSB7CiAgICAgIC8vIE9CSiBpcyB0aGlzIEJ1dHRvbgogICAgICB2YXIgY29udGV4dG1lbnUgPSBvYmoucGFydDsgLy8gdGhlIEJ1dHRvbiBpcyBpbiB0aGUgY29udGV4dCBtZW51IEFkb3JubWVudAoKICAgICAgdmFyIHBhcnQgPSBjb250ZXh0bWVudS5hZG9ybmVkUGFydDsgLy8gdGhlIGFkb3JuZWRQYXJ0IGlzIHRoZSBQYXJ0IHRoYXQgdGhlIGNvbnRleHQgbWVudSBhZG9ybnMKICAgICAgLy8gbm93IGNhbiBkbyBzb21ldGhpbmcgd2l0aCBQQVJULCBvciB3aXRoIGl0cyBkYXRhLCBvciB3aXRoIHRoZSBBZG9ybm1lbnQgKHRoZSBjb250ZXh0IG1lbnUpCgogICAgICBzaG93RWRpdE5vZGUocGFydCk7CiAgICB9KSwgbWFrZU1lbnVJdGVtKCLliarliIciLCBmdW5jdGlvbiAoZSwgb2JqKSB7CiAgICAgIGUuZGlhZ3JhbS5jb21tYW5kSGFuZGxlci5jdXRTZWxlY3Rpb24oKTsKICAgIH0sIGZ1bmN0aW9uIChvKSB7CiAgICAgIHJldHVybiBvLmRpYWdyYW0uY29tbWFuZEhhbmRsZXIuY2FuQ3V0U2VsZWN0aW9uKCk7CiAgICB9KSwgbWFrZU1lbnVJdGVtKCLlpI3liLYiLCBmdW5jdGlvbiAoZSwgb2JqKSB7CiAgICAgIGUuZGlhZ3JhbS5jb21tYW5kSGFuZGxlci5jb3B5U2VsZWN0aW9uKCk7CiAgICB9LCBmdW5jdGlvbiAobykgewogICAgICByZXR1cm4gby5kaWFncmFtLmNvbW1hbmRIYW5kbGVyLmNhbkNvcHlTZWxlY3Rpb24oKTsKICAgIH0pLCBtYWtlTWVudUl0ZW0oIuWIoOmZpCIsIGZ1bmN0aW9uIChlLCBvYmopIHsKICAgICAgZS5kaWFncmFtLmNvbW1hbmRIYW5kbGVyLmRlbGV0ZVNlbGVjdGlvbigpOwogICAgfSwgZnVuY3Rpb24gKG8pIHsKICAgICAgcmV0dXJuIG8uZGlhZ3JhbS5jb21tYW5kSGFuZGxlci5jYW5EZWxldGVTZWxlY3Rpb24oKTsKICAgIH0pKTsKICB9CiAgLyoqDQogICAqIOeUn+aIkOWPs+mUruiPnOWNlemhuQ0KICAgKiBAcGFyYW0gdGV4dA0KICAgKiBAcGFyYW0gYWN0aW9uDQogICAqIEBwYXJhbSB2aXNpYmxlUHJlZGljYXRlDQogICAqIEByZXR1cm5zIHsqfQ0KICAgKi8KCgogIGZ1bmN0aW9uIG1ha2VNZW51SXRlbSh0ZXh0LCBhY3Rpb24sIHZpc2libGVQcmVkaWNhdGUpIHsKICAgIHJldHVybiBHKCJDb250ZXh0TWVudUJ1dHRvbiIsIEcoZ28uVGV4dEJsb2NrLCB0ZXh0LCB7CiAgICAgIG1hcmdpbjogNSwKICAgICAgdGV4dEFsaWduOiAibGVmdCIsCiAgICAgIHN0cm9rZTogIiM1NTU1NTUiCiAgICB9KSwgewogICAgICBjbGljazogYWN0aW9uCiAgICB9LCAvLyBkb24ndCBib3RoZXIgd2l0aCBiaW5kaW5nIEdyYXBoT2JqZWN0LnZpc2libGUgaWYgdGhlcmUncyBubyBwcmVkaWNhdGUKICAgIHZpc2libGVQcmVkaWNhdGUgPyBuZXcgZ28uQmluZGluZygidmlzaWJsZSIsICIiLCB2aXNpYmxlUHJlZGljYXRlKS5vZk9iamVjdCgpIDoge30pOwogIH0KICAvKioNCiAgICog5piv5ZCm5pi+56S65q2l6aqk55qE6L+e5o6l54K5DQogICAqIEBwYXJhbSBub2RlDQogICAqIEBwYXJhbSBzaG93DQogICAqLwoKCiAgZnVuY3Rpb24gc2hvd05vZGVQb3J0KG5vZGUsIHNob3cpIHsKICAgIG5vZGUucG9ydHMuZWFjaChmdW5jdGlvbiAocG9ydCkgewogICAgICBpZiAocG9ydC5wb3J0SWQgIT09ICIiKSB7CiAgICAgICAgLy8gZG9uJ3QgY2hhbmdlIHRoZSBkZWZhdWx0IHBvcnQsIHdoaWNoIGlzIHRoZSBiaWcgc2hhcGUKICAgICAgICBwb3J0LmZpbGwgPSBzaG93ID8gInJnYmEoMjU1LDAsMCwuNSkiIDogbnVsbDsKICAgICAgfQogICAgfSk7CiAgfQogIC8qKg0KICAgKiDov57mjqXnur/nmoTpgInkuK3moLflvI8NCiAgICogQHJldHVybnMgeyp9DQogICAqLwoKCiAgZnVuY3Rpb24gbWFrZUxpbmtTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSgpIHsKICAgIHJldHVybiBHKGdvLkFkb3JubWVudCwgIkxpbmsiLCBHKGdvLlNoYXBlLCAvLyBpc1BhbmVsTWFpbiBkZWNsYXJlcyB0aGF0IHRoaXMgU2hhcGUgc2hhcmVzIHRoZSBMaW5rLmdlb21ldHJ5CiAgICB7CiAgICAgIGlzUGFuZWxNYWluOiB0cnVlLAogICAgICBmaWxsOiBudWxsLAogICAgICBzdHJva2U6ICJkZWVwc2t5Ymx1ZSIsCiAgICAgIHN0cm9rZVdpZHRoOiAwCiAgICB9KSAvLyB1c2Ugc2VsZWN0aW9uIG9iamVjdCdzIHN0cm9rZVdpZHRoCiAgICApOwogIH0KICAvKioNCiAgICog5a6a5LmJ6L+e5o6l57q/55qE5qC35byP5qih5p2/DQogICAqIEByZXR1cm5zIHsqfQ0KICAgKi8KCgogIGZ1bmN0aW9uIG1ha2VMaW5rVGVtcGxhdGUoKSB7CiAgICByZXR1cm4gRyhnby5MaW5rLCAvLyB0aGUgd2hvbGUgbGluayBwYW5lbAogICAgewogICAgICBzZWxlY3RhYmxlOiB0cnVlLAogICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogbWFrZUxpbmtTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSgpCiAgICB9LCB7CiAgICAgIHJlbGlua2FibGVGcm9tOiB0cnVlLAogICAgICByZWxpbmthYmxlVG86IHRydWUsCiAgICAgIHJlc2hhcGFibGU6IHRydWUKICAgIH0sIHsKICAgICAgcm91dGluZzogZ28uTGluay5Bdm9pZHNOb2RlcywKICAgICAgY3VydmU6IGdvLkxpbmsuSnVtcE92ZXIsCiAgICAgIGNvcm5lcjogNSwKICAgICAgdG9TaG9ydExlbmd0aDogNAogICAgfSwgRyhnby5TaGFwZSwgLy8g57q/5p2hCiAgICB7CiAgICAgIGlzUGFuZWxNYWluOiB0cnVlLAogICAgICBzdHJva2U6ICIjRDVENUQ1IiwKICAgICAgc3Ryb2tlV2lkdGg6IDMKICAgIH0pLCBHKGdvLlNoYXBlLCAvLyDnrq3lpLQKICAgIHsKICAgICAgdG9BcnJvdzogInN0YW5kYXJkIiwKICAgICAgc3Ryb2tlOiBudWxsLAogICAgICBmaWxsOiAnI0Q1RDVENScKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJzdHJva2UiKSwgbmV3IGdvLkJpbmRpbmcoImZpbGwiKSwgbmV3IGdvLkJpbmRpbmcoInpPcmRlciIpKSwgRyhnby5QYW5lbCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgIGZpbGw6IG51bGwsCiAgICAgIHN0cm9rZTogbnVsbAogICAgfSwgbmV3IGdvLkJpbmRpbmcoImZpbGwiLCAicEZpbGwiKSwgbmV3IGdvLkJpbmRpbmcoInpPcmRlciIpKSwgRyhnby5UZXh0QmxvY2ssIHsKICAgICAgdGV4dEFsaWduOiAiY2VudGVyIiwKICAgICAgZm9udDogIjEwcHQgaGVsdmV0aWNhLCBhcmlhbCwgc2Fucy1zZXJpZiIsCiAgICAgIHN0cm9rZTogIiM1NTU1NTUiLAogICAgICBtYXJnaW46IDQKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IiwgInRleHQiKSwgbmV3IGdvLkJpbmRpbmcoInpPcmRlciIpKSwgLy8gdGhlIGxhYmVsIHNob3dzIHRoZSBub2RlIGRhdGEncyB0ZXh0CiAgICB7CiAgICAgIHRvb2xUaXA6IC8vIHRoaXMgdG9vbHRpcCBBZG9ybm1lbnQgaXMgc2hhcmVkIGJ5IGFsbCBub2RlcwogICAgICBHKGdvLkFkb3JubWVudCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgICAgZmlsbDogIiNGRkZGQ0MiCiAgICAgIH0pLCBHKGdvLlRleHRCbG9jaywgewogICAgICAgIG1hcmdpbjogNAogICAgICB9LCAvLyB0aGUgdG9vbHRpcCBzaG93cyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgbm9kZUluZm8oZGF0YSkKICAgICAgbmV3IGdvLkJpbmRpbmcoInRleHQiLCAiIiwgbm9kZUluZm8pKSkgLy8gdGhpcyBjb250ZXh0IG1lbnUgQWRvcm5tZW50IGlzIHNoYXJlZCBieSBhbGwgbm9kZXMKICAgICAgLy8gY29udGV4dE1lbnU6IG1ha2VQYXJ0Q29udGV4dE1lbnUoKQoKICAgIH0pKTsKICB9CiAgLyoqDQogICAqIOa1geeoi+WbvuWFg+e0oOeahOWPjOWHu+S6i+S7tg0KICAgKiBAcGFyYW0gZXYNCiAgICovCgoKICBmdW5jdGlvbiBvbk9iamVjdERvdWJsZUNsaWNrZWQoZXYpIHsKICAgIHZhciBwYXJ0ID0gZXYuc3ViamVjdC5wYXJ0OwogICAgc2hvd0VkaXROb2RlKHBhcnQpOwogIH0KICAvKioNCiAgICog5rWB56iL5Zu+5aaC5p6c5pyJ5Y+Y5Yqo77yM5YiZ5o+Q56S655So5oi35L+d5a2YDQogICAqIEBwYXJhbSBlDQogICAqLwoKCiAgZnVuY3Rpb24gb25EaWFncmFtTW9kaWZpZWQoZSkgewogICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidG5TYXZlRmxvdyIpOwogICAgaWYgKGJ1dHRvbikgYnV0dG9uLmRpc2FibGVkID0gIV9kZXNpZ25lci5pc01vZGlmaWVkOwogICAgdmFyIGlkeCA9IGRvY3VtZW50LnRpdGxlLmluZGV4T2YoIioiKTsKCiAgICBpZiAoX2Rlc2lnbmVyLmlzTW9kaWZpZWQpIHsKICAgICAgaWYgKGlkeCA8IDApIGRvY3VtZW50LnRpdGxlICs9ICIqIjsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChpZHggPj0gMCkgZG9jdW1lbnQudGl0bGUgPSBkb2N1bWVudC50aXRsZS5zdWJzdHIoMCwgaWR4KTsKICAgIH0KICB9CiAgLyoqDQogICAqIOe8lui+keiKgueCueS/oeaBrw0KICAgKi8KCgogIGZ1bmN0aW9uIHNob3dFZGl0Tm9kZShub2RlKSB7CiAgICBfdGhpcy5zaG93RWRpdE5vZGUobm9kZSk7CgogICAgcmV0dXJuIG5vZGU7CiAgfQogIC8qKg0KICAgKiDmm7TmlrDoioLngrnkv6Hmga8NCiAgICogQHBhcmFtIG9sZERhdGENCiAgICogQHBhcmFtIG5ld0RhdGENCiAgICovCgoKICBmdW5jdGlvbiB1cGRhdGVOb2RlRGF0YShub2RlLCB0ZXh0KSB7CiAgICBfZGVzaWduZXIuc3RhcnRUcmFuc2FjdGlvbigidmFjYXRlIik7CgogICAgX2Rlc2lnbmVyLm1vZGVsLnNldERhdGFQcm9wZXJ0eShub2RlLmRhdGEsICJ0ZXh0IiwgdGV4dCk7CgogICAgX2Rlc2lnbmVyLmNvbW1pdFRyYW5zYWN0aW9uKCJ2YWNhdGUiKTsKICB9CiAgLyoqDQogICAqIOabtOaUueaJgOaciei/nue6v+S4remXtOeahOaWh+acrOiDjOaZr+iJsg0KICAgKi8KCgogIGZ1bmN0aW9uIHNldExpbmtUZXh0QmcoKSB7CiAgICBfZGVzaWduZXIubGlua3MuZWFjaChmdW5jdGlvbiAobGluaykgewogICAgICBfZGVzaWduZXIuc3RhcnRUcmFuc2FjdGlvbigidmFjYXRlIik7CgogICAgICBpZiAobGluay5kYXRhLnRleHQpIHsKICAgICAgICBfZGVzaWduZXIubW9kZWwuc2V0RGF0YVByb3BlcnR5KGxpbmsuZGF0YSwgInBGaWxsIiwgd2luZG93LmdvLkdyYXBoT2JqZWN0Lm1ha2UoZ28uQnJ1c2gsICJSYWRpYWwiLCB7CiAgICAgICAgICAwOiAicmdiKDI0MCwgMjQwLCAyNDApIiwKICAgICAgICAgIDAuMzogInJnYigyNDAsIDI0MCwgMjQwKSIsCiAgICAgICAgICAxOiAicmdiYSgyNDAsIDI0MCwgMjQwLCAwKSIKICAgICAgICB9KSk7CiAgICAgIH0KCiAgICAgIF9kZXNpZ25lci5jb21taXRUcmFuc2FjdGlvbigidmFjYXRlIik7CiAgICB9KTsKICB9CiAgLyoqIC0tLS0tLS0tcHJpdmF0ZSBtZXRob2QtLS0tLS0tLS0tLS0tLS0tLS1lbmQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiovCgoKICByZXR1cm4gdGhpczsKfQoKdmFyIF9kZWZhdWx0ID0gRmxvd0Rlc2lnbmVyOwpleHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDs="},{"version":3,"sources":["E:/boman-framwork/ruoyi-ui/src/utils/flow-desinger.js"],"names":["FlowDesigner","diagramDiv","event","G","go","GraphObject","make","_this","_designer","myPalette","_jsonNewStep","key","guid","text","remark","type","showEditNode","SelectionDeleted","LinkDrawn","externalobjectsdropped","LinkRelinked","initToolbar","div","moduleType","modelArr","category","Palette","maxSelectionCount","nodeTemplateMap","model","GraphLinksModel","nodeDataArray","displayFlow","flowData","Model","fromJson","pos","modelData","position","diagram","setLinkTextBg","createStep","jsonNewStep","loc","addNodeData","getFlowData","Point","stringify","toJson","checkData","errMsg","map","item","hasOwnProperty","init","divId","Diagram","allowDrop","allowTextEdit","allowHorizontalScroll","allowVerticalScroll","Shape","segmentIndex","cursor","desiredSize","Size","fill","stroke","addDiagramListener","onDiagramModified","onObjectDoubleClicked","e","subject","each","n","data","commandHandler","canDeleteSelection","selection","all","nodeOrLink","add","Node","locationSpot","Spot","Center","Binding","parse","makeTwoWay","selectable","selectionAdornmentTemplate","makeNodeSelectionAdornmentTemplate","Panel","name","portId","fromLinkable","toLinkable","strokeWidth","margin","width","height","alignment","TopRight","geometry","Geometry","geoFunc","TextBlock","font","wrap","WrapFit","textAlign","verticalAlignment","NaN","toolTip","Adornment","nodeInfo","makeNodePort","Top","Left","Right","Bottom","mouseEnter","node","showNodePort","mouseLeave","overflow","OverflowEllipsis","linkTemplate","makeLinkTemplate","r","Math","floor","random","Number","geoname","icons","operationNodeTemplate","approvalNodeTemplate","strokeDashArray","Placeholder","spot","output","input","alignmentFocus","fromSpot","toSpot","d","makePartContextMenu","makeMenuItem","obj","contextmenu","part","adornedPart","cutSelection","o","canCutSelection","copySelection","canCopySelection","deleteSelection","action","visiblePredicate","click","ofObject","show","ports","port","makeLinkSelectionAdornmentTemplate","isPanelMain","Link","relinkableFrom","relinkableTo","reshapable","routing","AvoidsNodes","curve","JumpOver","corner","toShortLength","toArrow","ev","button","document","getElementById","disabled","isModified","idx","title","indexOf","substr","updateNodeData","startTransaction","setDataProperty","commitTransaction","links","link","window","Brush"],"mappings":"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","sourcesContent":["import icons from './icon.js'\r\n\r\nfunction FlowDesigner(diagramDiv,event) {\r\n var G = go.GraphObject.make;\r\n var _this = {};\r\n var _designer = {};\r\n var myPalette = null\r\n var _jsonNewStep = { key: guid(), text: \"审批节点\", remark: '', type: 0 };\r\n\r\n /** 处理传入事件 */\r\n if(event.showEditNode){ //编辑节点\r\n _this.showEditNode = event.showEditNode\r\n }\r\n if(event.SelectionDeleted){ //删除事件\r\n _this.SelectionDeleted = event.SelectionDeleted\r\n }\r\n if(event.LinkDrawn){ //线的生成事件\r\n _this.LinkDrawn = event.LinkDrawn\r\n }\r\n if(event.externalobjectsdropped){ //节点的生成事件\r\n _this.externalobjectsdropped = event.externalobjectsdropped\r\n }\r\n\r\n if(event.LinkRelinked){ //连线修改\r\n _this.LinkRelinked = event.LinkRelinked\r\n }\r\n\r\n /** --------public method----------------------------------------**/\r\n /**\r\n * 初始化图例面板\r\n * 0审批节点 1开始节点 2结束节点 3操作节点 4服务节点\r\n * @returns {*}\r\n */\r\n this.initToolbar = function(div,moduleType){\r\n \r\n let modelArr = [\r\n // { key: guid(), text: \"开始\", figure: \"Terminator\", fill: \"#4fba4f\", type: 1 },\r\n { key: guid(), text: \"审批节点\", remark: '', type: 0, category:'Approval' },\r\n { key: guid(), text: \"操作节点\", remark: '', type: 4, category:'Operation' },\r\n { key: guid(), text: \"服务节点\", remark: '', type: 3, category:'Service' },\r\n { key: guid(), text: \"子流程节点\", remark: '', type: 6, category:'Subprocesses' }\r\n // { key: guid(), text: \"结束\", figure: \"Terminator\", fill: \"#CE0620\", type: 2 }\r\n ]\r\n if(!moduleType){\r\n modelArr = [{ key: guid(), text: \"审批节点\", remark: '', type: 0, category:'Approval' }]\r\n }\r\n if(!myPalette){\r\n var Palette =\r\n G(go.Palette, div, // 必须是DIV元素\r\n {\r\n maxSelectionCount: 3,\r\n nodeTemplateMap: _designer.nodeTemplateMap, // 跟设计图共同一套样式模板\r\n model: new go.GraphLinksModel(modelArr)\r\n });\r\n myPalette = Palette\r\n }else{\r\n myPalette.model.nodeDataArray = modelArr\r\n }\r\n\r\n return myPalette;\r\n };\r\n\r\n /**\r\n * 在设计面板中显示流程图\r\n * @param flowData 流程图json数据\r\n */\r\n this.displayFlow = function (flowData) {\r\n\r\n if(!flowData) return;\r\n\r\n _designer.model = go.Model.fromJson(flowData);\r\n\r\n var pos = _designer.model.modelData.position;\r\n \r\n // if (pos) _designer.initialPosition = go.Point.parse(pos);\r\n this.diagram = _designer\r\n // 更改所有连线中间的文本背景色\r\n setLinkTextBg();\r\n };\r\n\r\n /**\r\n * 创建新步骤\r\n */\r\n this.createStep = function() {\r\n var jsonNewStep = {key:_jsonNewStep.key, text:_jsonNewStep.text};\r\n jsonNewStep.loc = \"270 140\";// “新步骤”显示的位置\r\n _designer.model.addNodeData(jsonNewStep);\r\n };\r\n\r\n /**\r\n * 获取流程图数据\r\n * @returns {*}\r\n */\r\n this.getFlowData = function () {\r\n _designer.model.modelData.position = go.Point.stringify(_designer.position);\r\n return _designer.model.toJson();\r\n };\r\n\r\n /**\r\n * 检验流程图是否规范\r\n */\r\n this.checkData = function() {\r\n var errMsg = \"\";\r\n\r\n // 检查:每个步骤必须包含角色\r\n if (!_designer.model.nodeDataArray) return '请绘制流程图';\r\n\r\n // $.each(_designer.model.nodeDataArray, function(i, item) {\r\n // if (!item.hasOwnProperty(\"remark\") || item.remark === \"\") {\r\n // errMsg = \"请为步骤【\" + item.text + \"】设置备注~\";\r\n // return false;\r\n // }\r\n // });\r\n\r\n _designer.model.nodeDataArray.map(item => {\r\n if (!item.hasOwnProperty(\"remark\") || item.remark === \"\") {\r\n errMsg = \"请为步骤【\" + item.text + \"】设置备注~\";\r\n return false;\r\n }\r\n })\r\n\r\n\r\n return errMsg;\r\n };\r\n\r\n\r\n\r\n /** --------public method-------------end---------------------------**/\r\n\r\n this.diagram = init(diagramDiv);\r\n\r\n /** --------private method----------------------------------------**/\r\n\r\n /**\r\n * 初始化流程设计器\r\n * @param divId 设计器Div\r\n * \r\n * node type \r\n */\r\n function init(divId) {\r\n _designer = G(go.Diagram, divId, // must name or refer to the DIV HTML element\r\n { \r\n // grid: G(go.Panel, \"Grid\", 背景格\r\n // G(go.Shape, \"LineH\", { stroke: \"lightgray\", strokeWidth: 0.5 }),\r\n // G(go.Shape, \"LineH\", { stroke: \"gray\", strokeWidth: 0.5, interval: 10 }),\r\n // G(go.Shape, \"LineV\", { stroke: \"lightgray\", strokeWidth: 0.5 }),\r\n // G(go.Shape, \"LineV\", { stroke: \"gray\", strokeWidth: 0.5, interval: 10 })\r\n // ),\r\n allowDrop: true, // must be true to accept drops from the Palette\r\n allowTextEdit: false,\r\n allowHorizontalScroll: true,\r\n allowVerticalScroll: true,\r\n // \"clickCreatingTool.isDoubleClick\":false,\r\n // \"clickCreatingTool.archetypeNodeData\": {}, // 双击创建新步骤\r\n // \"draggingTool.dragsLink\": true,\r\n \"draggingTool.isGridSnapEnabled\": true,\r\n // \"linkingTool.isUnconnectedLinkValid\": true,\r\n \"linkingTool.portGravity\": 20,\r\n // \"relinkingTool.isUnconnectedLinkValid\": true,\r\n \"relinkingTool.portGravity\": 20,\r\n \"relinkingTool.fromHandleArchetype\":\r\n G(go.Shape, \"Diamond\", { segmentIndex: 0, cursor: \"pointer\", desiredSize: new go.Size(8, 8), fill: \"tomato\", stroke: \"darkred\" }),\r\n \"relinkingTool.toHandleArchetype\":\r\n G(go.Shape, \"Diamond\", { segmentIndex: -1, cursor: \"pointer\", desiredSize: new go.Size(8, 8), fill: \"darkred\", stroke: \"tomato\" }),\r\n \"linkReshapingTool.handleArchetype\":\r\n G(go.Shape, \"Diamond\", { desiredSize: new go.Size(7, 7), fill: \"lightblue\", stroke: \"deepskyblue\" }),\r\n \"undoManager.isEnabled\": false\r\n });\r\n\r\n // 流程图如果有变动,则提示用户保存\r\n _designer.addDiagramListener(\"Modified\", onDiagramModified);\r\n\r\n // 双击事件\r\n _designer.addDiagramListener(\"ObjectDoubleClicked\", onObjectDoubleClicked);\r\n\r\n // 移除事件\r\n _designer.addDiagramListener(\"SelectionDeleted\", function(e) {\r\n e.subject.each(function(n){\r\n _this.SelectionDeleted(n.data)\r\n });\r\n })\r\n\r\n //线的生成\r\n _designer.addDiagramListener(\"LinkDrawn\", function(e) {\r\n e.subject.data.key = guid()\r\n _this.LinkDrawn(e.subject.data)\r\n })\r\n\r\n\r\n //线的重绘\r\n _designer.addDiagramListener(\"LinkRelinked\", function(e) {\r\n _this.LinkRelinked(e.subject.data)\r\n })\r\n\r\n //添加监听节点生成事件\r\n _designer.addDiagramListener(\"externalobjectsdropped\", function(e) {\r\n // var jsonNewStep = {key:_jsonNewStep.key, text:_jsonNewStep.text};\r\n e.subject.each(function(n){\r\n //得到从Palette拖过来的节点\r\n _this.externalobjectsdropped(n.data)\r\n });\r\n // jsonNewStep.loc = \"-100 0\";// “新步骤”显示的位置\r\n // jsonNewStep.type = 0 \r\n // jsonNewStep.key = guid()\r\n // // _designer.model.addNodeData(jsonNewStep);\r\n // _this.externalobjectsdropped(jsonNewStep)\r\n })\r\n\r\n\r\n //监听节点或线的删除前事件\r\n _designer.commandHandler.canDeleteSelection = function(e) { \r\n\t\t\t//用例获取选中的节点或线 \r\n\t\t\treturn _designer.selection.all(function(nodeOrLink) { \r\n\t\t\t\t//判断是否是开始或者结束节点\r\n\t\t\t\tif(nodeOrLink.data.type === 1 || nodeOrLink.data.type === 2){ \r\n\t\t\t\t\treturn false; \r\n\t\t\t\t}else{ \r\n\t\t\t\t\treturn true; \r\n\t\t\t\t} \r\n\t\t\t}); \r\n }\r\n \r\n // var tool = _designer.toolManager.clickCreatingTool;\r\n // tool.insertPart = (loc) => {\r\n // var jsonNewStep = {key:_jsonNewStep.key, text:_jsonNewStep.text};\r\n // jsonNewStep.type = 0 \r\n // jsonNewStep.loc = `${loc.x} ${loc.y}`;\r\n // _designer.model.addNodeData(jsonNewStep);\r\n // _this.externalobjectsdropped(jsonNewStep)\r\n // }\r\n \r\n\r\n // 流程步骤的样式模板\r\n // _designer.nodeTemplate = approvalNodeTemplate();\r\n // _designer.nodeTemplate = operationNodeTemplate();\r\n // _designer.nodeTemplateMap.add('Approval',approvalNodeTemplate)\r\n\r\n // 服务节点\r\n _designer.nodeTemplateMap.add('Subprocesses',\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 28, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('subprocesses'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n )\r\n )\r\n\r\n // 服务节点\r\n _designer.nodeTemplateMap.add('Service',\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 28, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('service'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n )\r\n )\r\n\r\n // 审批节点\r\n _designer.nodeTemplateMap.add('Approval',\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 28, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('approval'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n )\r\n )\r\n\r\n // 操作节点\r\n _designer.nodeTemplateMap.add('Operation',\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 28, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('operation'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n ) \r\n )\r\n // 添加开始节点\r\n _designer.nodeTemplateMap.add(\"Start\",\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n G(go.Panel, \"Auto\",\r\n { name: \"Start\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"Circle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"Start\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"#5F7790\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#5F7790\",\r\n // geometryString: \"F M0 0 L100 0 B-90 180 100 25 25 25 L0 50 B90 180 0 25 25 25\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin:8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"white\",\r\n overflow:go.TextBlock.OverflowEllipsis\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),\r\n {\r\n toolTip: G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 },\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n )\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n ));\r\n \r\n // 添加结束节点\r\n _designer.nodeTemplateMap.add(\"End\",\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n G(go.Panel, \"Auto\",\r\n { name: \"End\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"Circle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"End\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"#5F7790\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#5F7790\",\r\n // geometryString: \"F M0 0 L100 0 Q175 25 100 50 L0 50 Q-75 25 0 0\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"white\"\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),\r\n {\r\n toolTip: G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 },\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n )\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n ));\r\n\r\n // 流程连接线的样式模板\r\n _designer.linkTemplate = makeLinkTemplate();\r\n \r\n return _designer\r\n }\r\n\r\n /**\r\n * 生成GUID\r\n * @returns {string}\r\n */\r\n function guid() {\r\n var r = Math.floor(Math.random() * (30000 - 1 + 1) + 1);\r\n return Number(r);\r\n }\r\n\r\n function geoFunc(geoname) {\r\n if (icons[geoname]) return icons[geoname];\r\n else return icons[\"approval\"]; // default icon\r\n }\r\n\r\n /**\r\n * 操作节点样式模板\r\n * @returns {*}\r\n */\r\n function operationNodeTemplate(){\r\n return G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 20, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('operation'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * 操作节点样式模板\r\n * @returns {*}\r\n */\r\n function approvalNodeTemplate(){\r\n return G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 20, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('approval'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * 选中节点的样式\r\n * @returns {*}\r\n */\r\n function makeNodeSelectionAdornmentTemplate(){\r\n return G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: null, stroke: \"deepskyblue\", strokeWidth: 1.5, strokeDashArray: [4, 2] }),\r\n G(go.Placeholder)\r\n );\r\n }\r\n\r\n /**\r\n * 创建连接点\r\n * @param name\r\n * @param spot\r\n * @param output\r\n * @param input\r\n * @returns {*}\r\n */\r\n function makeNodePort(name, spot, output, input) {\r\n // the port is basically just a small transparent square\r\n return G(go.Shape, \"Circle\",\r\n {\r\n fill: null, // not seen, by default; set to a translucent gray by showSmallPorts, defined below\r\n stroke: null,\r\n desiredSize: new go.Size(7, 7),\r\n alignment: spot, // align the port on the main Shape\r\n alignmentFocus: spot, // just inside the Shape\r\n portId: name, // declare this object to be a \"port\"\r\n fromSpot: spot,\r\n toSpot: spot, // declare where links may connect at this port\r\n fromLinkable: output,\r\n toLinkable: input, // declare whether the user may draw links to/from here\r\n cursor: \"pointer\" // show a different cursor to indicate potential link point\r\n });\r\n }\r\n\r\n /**\r\n * tooltip上显示的信息\r\n * @param d\r\n * @returns {string}\r\n */\r\n function nodeInfo(d) {\r\n return '双击可编辑';\r\n }\r\n\r\n /**\r\n * 右键菜单\r\n * @returns {*}\r\n */\r\n function makePartContextMenu(){\r\n return G(go.Adornment, \"Vertical\",\r\n makeMenuItem(\"编辑\",\r\n function(e, obj) { // OBJ is this Button\r\n var contextmenu = obj.part; // the Button is in the context menu Adornment\r\n var part = contextmenu.adornedPart; // the adornedPart is the Part that the context menu adorns\r\n // now can do something with PART, or with its data, or with the Adornment (the context menu)\r\n showEditNode(part);\r\n }),\r\n makeMenuItem(\"剪切\",\r\n function(e, obj) { e.diagram.commandHandler.cutSelection(); },\r\n function(o) { return o.diagram.commandHandler.canCutSelection(); }),\r\n makeMenuItem(\"复制\",\r\n function(e, obj) { e.diagram.commandHandler.copySelection(); },\r\n function(o) { return o.diagram.commandHandler.canCopySelection(); }),\r\n makeMenuItem(\"删除\",\r\n function(e, obj) { e.diagram.commandHandler.deleteSelection(); },\r\n function(o) { return o.diagram.commandHandler.canDeleteSelection(); })\r\n );\r\n }\r\n\r\n /**\r\n * 生成右键菜单项\r\n * @param text\r\n * @param action\r\n * @param visiblePredicate\r\n * @returns {*}\r\n */\r\n function makeMenuItem(text, action, visiblePredicate) {\r\n return G(\"ContextMenuButton\",\r\n G(go.TextBlock, text, {\r\n margin: 5,\r\n textAlign: \"left\",\r\n stroke: \"#555555\"\r\n }),\r\n { click: action },\r\n // don't bother with binding GraphObject.visible if there's no predicate\r\n visiblePredicate ? new go.Binding(\"visible\", \"\", visiblePredicate).ofObject() : {});\r\n }\r\n\r\n /**\r\n * 是否显示步骤的连接点\r\n * @param node\r\n * @param show\r\n */\r\n function showNodePort(node, show) {\r\n node.ports.each(function (port) {\r\n if (port.portId !== \"\") { // don't change the default port, which is the big shape\r\n port.fill = show ? \"rgba(255,0,0,.5)\" : null;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 连接线的选中样式\r\n * @returns {*}\r\n */\r\n function makeLinkSelectionAdornmentTemplate(){\r\n return G(go.Adornment, \"Link\",\r\n G(go.Shape,\r\n // isPanelMain declares that this Shape shares the Link.geometry\r\n { isPanelMain: true, fill: null, stroke: \"deepskyblue\", strokeWidth: 0 }) // use selection object's strokeWidth\r\n );\r\n }\r\n\r\n \r\n /**\r\n * 定义连接线的样式模板\r\n * @returns {*}\r\n */\r\n function makeLinkTemplate(){\r\n return G(go.Link, // the whole link panel\r\n { selectable: true, selectionAdornmentTemplate: makeLinkSelectionAdornmentTemplate() },\r\n { relinkableFrom: true, relinkableTo: true, reshapable: true },\r\n {\r\n routing: go.Link.AvoidsNodes,\r\n curve: go.Link.JumpOver,\r\n corner: 5,\r\n toShortLength: 4\r\n },\r\n G(go.Shape, // 线条\r\n { isPanelMain: true, stroke: \"#D5D5D5\", strokeWidth: 3 }),\r\n G(go.Shape, // 箭头\r\n { toArrow: \"standard\", stroke: null, fill: '#D5D5D5' }, new go.Binding(\"stroke\"), new go.Binding(\"fill\"), new go.Binding(\"zOrder\")),\r\n G(go.Panel, \"Auto\",\r\n G(go.Shape, {\r\n fill: null,\r\n stroke: null\r\n }, new go.Binding(\"fill\", \"pFill\"), new go.Binding(\"zOrder\")),\r\n G(go.TextBlock,\r\n {\r\n textAlign: \"center\",\r\n font: \"10pt helvetica, arial, sans-serif\",\r\n stroke: \"#555555\",\r\n margin: 4\r\n },\r\n new go.Binding(\"text\", \"text\"), new go.Binding(\"zOrder\")), // the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // this context menu Adornment is shared by all nodes\r\n // contextMenu: makePartContextMenu()\r\n }\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * 流程图元素的双击事件\r\n * @param ev\r\n */\r\n function onObjectDoubleClicked(ev) {\r\n var part = ev.subject.part;\r\n showEditNode(part);\r\n }\r\n\r\n /**\r\n * 流程图如果有变动,则提示用户保存\r\n * @param e\r\n */\r\n function onDiagramModified(e){\r\n var button = document.getElementById(\"btnSaveFlow\");\r\n if (button) button.disabled = !_designer.isModified;\r\n var idx = document.title.indexOf(\"*\");\r\n if (_designer.isModified) {\r\n if (idx < 0) document.title += \"*\";\r\n } else {\r\n if (idx >= 0) document.title = document.title.substr(0, idx);\r\n }\r\n }\r\n\r\n /**\r\n * 编辑节点信息\r\n */\r\n function showEditNode(node) {\r\n _this.showEditNode(node)\r\n return node\r\n }\r\n\r\n /**\r\n * 更新节点信息\r\n * @param oldData\r\n * @param newData\r\n */\r\n function updateNodeData(node, text) {\r\n _designer.startTransaction(\"vacate\");\r\n _designer.model.setDataProperty(node.data, \"text\", text);\r\n _designer.commitTransaction(\"vacate\");\r\n }\r\n\r\n /**\r\n * 更改所有连线中间的文本背景色\r\n */\r\n function setLinkTextBg() {\r\n _designer.links.each(function (link) {\r\n _designer.startTransaction(\"vacate\");\r\n if (link.data.text) {\r\n _designer.model.setDataProperty(link.data, \"pFill\", window.go.GraphObject.make(go.Brush, \"Radial\", {\r\n 0: \"rgb(240, 240, 240)\",\r\n 0.3: \"rgb(240, 240, 240)\",\r\n 1: \"rgba(240, 240, 240, 0)\"\r\n }));\r\n }\r\n _designer.commitTransaction(\"vacate\");\r\n });\r\n }\r\n\r\n /** --------private method------------------end----------------------**/\r\n\r\n return this;\r\n}\r\n\r\nexport default FlowDesigner\r\n"]}]}