e7cde724083bd0b9c0fa9858da669c1f.json 143 KB

1
  1. {"remainingRequest":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\babel-loader\\lib\\index.js!E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\src\\views\\goods\\manageG\\AddBaseData.vue?vue&type=script&lang=js&","dependencies":[{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\src\\views\\goods\\manageG\\AddBaseData.vue","mtime":1655374732000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\babel.config.js","mtime":1655374732000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\vue-loader\\lib\\index.js","mtime":1655715099000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KaW1wb3J0IEdvb2RzQ2F0ZWdvcnkgZnJvbSAiQC9jb21wb25lbnQvY29tbW9uL0dvb2RzQ2F0ZWdvcnkudnVlIjsKaW1wb3J0IEJyYW5kU2VsTW9kZWwgZnJvbSAiQC9jb21wb25lbnQvZ29vZHMvQnJhbmRTZWxNb2RlbC52dWUiOwppbXBvcnQgVGlueW1jZSBmcm9tICJAL2NvbXBvbmVudC9UaW55bWNlIjsKaW1wb3J0IFVwbG9hZFFpbml1IGZyb20gIkAvY29tcG9uZW50L2NvbW1vbi9VcGxvYWRRaW5pdS52dWUiOyAvLyDmlrDlop7liIbnsbsKCmltcG9ydCBBZGRDYXRlIGZyb20gIkAvY29tcG9uZW50L2dvb2RzL0FkZENhdGUudnVlIjsKaW1wb3J0IEFkZEJyYW5kIGZyb20gIi4vQWRkQnJhbmQiOwppbXBvcnQgU2VsZWN0U2hvcCBmcm9tICJAL2NvbXBvbmVudC9nb29kcy9TZWxlY3RTaG9wLnZ1ZSI7CmltcG9ydCB7IGdldEFsbFVuaXQsIGRlZmluZVNwZWMsIFNwZWNNYW5hZ2VnZXRBbGwsIGdldEdvb2RzQmFzaWNJbmZvQnlJZCwgZWRpdEdvb2RzQmFzaWMsIGFkZEdvb2RzQmFzaWMsIGdldEFsbENhdGVnb3J5UG9zdCB9IGZyb20gIkAvYXBpL2dvb2RzIjsKaW1wb3J0IHsgYWRkUGF1c2VTYXZlLCBkZWxQYXVzZVNhdmUsIGdldFBhdXNlU2F2ZSB9IGZyb20gIkAvYXBpL2NvbW1vbiI7CmltcG9ydCB7IGdldEFsbE1lcmNoYW50TGlzdCB9IGZyb20gIkAvYXBpL01lcmNoYW50cyI7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAiQWRkQmFzZURhdGEiLAogIGNvbXBvbmVudHM6IHsKICAgIC8vIEdvb2RzQ2F0ZWdvcnksCiAgICBCcmFuZFNlbE1vZGVsLAogICAgVGlueW1jZSwKICAgIFVwbG9hZFFpbml1LAogICAgQWRkQ2F0ZSwKICAgIEFkZEJyYW5kLAogICAgU2VsZWN0U2hvcAogIH0sCgogIGRhdGEoKSB7CiAgICBjb25zdCB2YWxpZGF0ZVVuaXQgPSAocnVsZSwgdmFsdWUsIGNhbGxiYWNrKSA9PiB7CiAgICAgIGlmICh2YWx1ZS51bml0TmFtZSA9PT0gIiIpIHsKICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoIuivt+iuvue9ruWfuuacrOWNleS9jSIpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9OwoKICAgIHJldHVybiB7CiAgICAgIC8vIOiuoemHj+WNleS9jQogICAgICBzZWxmX3NwZWNfdmFsOiAiIiwKICAgICAgLy8g6Ieq5a6a5LmJ5bGe5oCn5YC86L6T5YWl5qGGCiAgICAgIHNwZWNfbmFtZV9pbmRleDogMCwKICAgICAgLy8g5bGe5oCn5ZCNaW5kZXgKICAgICAgc2VsZl9zcGVjX2lucHV0OiBmYWxzZSwKICAgICAgLy8g5pi+56S66Ieq5a6a5LmJ5bGe5oCn5YC86L6T5YWl5qGGCiAgICAgIHNwZWNfbW9kZWw6IGZhbHNlLAogICAgICAvLyDpgInmi6nlsZ7mgKflgLzlvLnnqpcKICAgICAgc3BlY19pdGVtX2NoZWNrOiBbXSwKICAgICAgLy8g5bGe5oCn5YC85by556qX5Y2V6YCJdmFsdWUKICAgICAgaXNfaW5kZXRlcm1pbmF0ZV9zcGVjOiBmYWxzZSwKICAgICAgLy8g5om56YeP6YCJ5oup5bGe5oCn5YC8IOWFqOmAiemAieaLqeahhueKtuaAgQogICAgICBzcGVjX2NoZWNrX2FsbDogZmFsc2UsCiAgICAgIC8vIOWxnuaAp+WAvCDlhajpgInpgInmi6nmoYZ2YWx1ZQogICAgICBzcGVjX2RhdGE6IFtdLAogICAgICAvLyDlsZ7mgKfliJfooagKICAgICAgc3BlY19kYXRhX2NoaWxkOiBbXSwKICAgICAgLy8g5bGe5oCn5YC85YiX6KGoCiAgICAgIHNwZWNfdGFibGVfRGF0YTogW10sCiAgICAgIC8vIOinhOagvOaYjue7hgogICAgICBza3VfbGlzdDogWy8vIOWVhuWTgeWxnuaAp+WIl+ihqAogICAgICB7CiAgICAgICAgc3BlY19kYXRhX2NoaWxkOiBbXSwKICAgICAgICBncm91cFNwZWNJZDogIiIsCiAgICAgICAgc2VsZl9zcGVjX3ZhbDogIiIsCiAgICAgICAgc2VsZl9zcGVjX2lucHV0OiBmYWxzZSwKICAgICAgICBncm91cFNwZWNOYW1lOiAiIiwKICAgICAgICBwYXJhbXM6IFtdCiAgICAgIH1dLAogICAgICBhZGRfbW9kZWw6IGZhbHNlLAogICAgICAvLyDmlrDlu7rliIbnsbsKICAgICAgZGlhbG9nVGl0bGU6ICLmlrDlu7rliIbnsbsiLAogICAgICBwaWRfYXJyOiBbXSwKICAgICAgYWRkX0JyYW5kOiBmYWxzZSwKICAgICAgLy8g5paw5aKe5ZOB54mMCiAgICAgIHBhZ2VOYW1lOiAiIiwKICAgICAgLy8g5pqC5a2Y5pWw5o2u5Y+C5pWwCiAgICAgIGxvYWRpbmc6IGZhbHNlLAogICAgICBpbWdfbGlzdDogW10sCiAgICAgIC8vIOWFs+mUruivjQogICAgICBkeW5hbWljVGFnczogW10sCiAgICAgIGlucHV0VmlzaWJsZTogZmFsc2UsCiAgICAgIGlucHV0VmFsdWU6ICIiLAogICAgICAvLyDlhbPplK7or40gRU5ECiAgICAgIGFzc2lzdF9tb2RlbDogZmFsc2UsCiAgICAgIGVkaXRfYXNzaXN0X21vZGVsOiBmYWxzZSwKICAgICAgYXNzaXN0X2luZGV4OiAwLAogICAgICB1bml0X29wdGlvbnM6IFtdLAogICAgICAvLyDorqHph4/ljZXkvY3lvLnnqpcKICAgICAgYXNzaXN0X2Zvcm06IHsKICAgICAgICB1bml0TmFtZTogIiIsCiAgICAgICAgaXNNYXN0ZXI6IDQsCiAgICAgICAgaXNEZWZhdWx0OiA0LAogICAgICAgIHdlaWdodDogIiIsCiAgICAgICAgdW5pdElkOiAiIiwKICAgICAgICBiYXJDb2RlOiAiIiwKICAgICAgICBjb252ZXJzaW9uOiAiIgogICAgICB9LAogICAgICBzZWxfYnJhbmQ6IGZhbHNlLAogICAgICAvLyDmiZPlvIDlk4HniYzpgInmi6nlvLnnqpcKICAgICAgc2VsX3Nob3A6IGZhbHNlLAogICAgICAvLyDmiZPlvIDlupfpk7rpgInmi6nlvLnnqpcKICAgICAgbWFzdGVyX3VuaXRfbmFtZTogIiIsCiAgICAgIGJhc2VfZm9ybTogewogICAgICAgIC8vICDln7rmnKzkv6Hmga8KICAgICAgICBzcGVjVHlwZTogMSwKICAgICAgICAvLyDmmK/lkKblpJrop4TmoLwKICAgICAgICBkZWxVbml0SWRzOiBbXSwKICAgICAgICAvLyDovoXliqnljZXkvY3liKDpmaRkZWxVbml0SWRzICh1bml0SWQpCiAgICAgICAgZGVsU3BlY1NrdUlkczogW10sCiAgICAgICAgLy8g5bGe5oCn5Yig6ZmkZGVsU3BlY1NrdUlkc++8iOi/meS4queUqGlk77yJCiAgICAgICAgYnJhbmNoVW5pdDogW10sCiAgICAgICAgYnJhbmROYW1lOiAiIiwKICAgICAgICBjYXRlZ29yeVBhdGg6IFtdLAogICAgICAgIC8vIOWIhuexu+mAieaLqQogICAgICAgIGFzc2lzdENhdGVnb3J5UGF0aDogW10sCiAgICAgICAgLy/lia/liIbnsbsKICAgICAgICBub1NhbGVzU2hvcDogW10sCiAgICAgICAgdW5pdERhdGE6IFtdLAogICAgICAgIGlzRXE6IDQsCiAgICAgICAgLy/mmK/lkKbmmK/mioTnoIHllYblk4EKICAgICAgICBtYXN0ZXJVbml0OiB7CiAgICAgICAgICBpc0RlZmF1bHQ6IDUsCiAgICAgICAgICBpc01hc3RlcjogNSwKICAgICAgICAgIHdlaWdodDogIiIsCiAgICAgICAgICB1bml0TmFtZTogIiIsCiAgICAgICAgICB1bml0SWQ6ICIiLAogICAgICAgICAgYmFyQ29kZTogIiIKICAgICAgICB9LAogICAgICAgIGRlc2NyaWJlOiAiIiwKICAgICAgICBzdG9yYWdlOiAiIiwKICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgY29kZTogIiIsCiAgICAgICAgYmFyQ29kZTogIiIsCiAgICAgICAgLy8g5ZWG5ZOB5p2h56CBCiAgICAgICAgY2F0ZWdvcnlJZDogIiIsCiAgICAgICAgYXNzaXN0Q2F0ZWdvcnlJZDogIiIsCiAgICAgICAgZXhwaXJlVGltZTogIiIsCiAgICAgICAgYnJhbmRJZDogIiIsCiAgICAgICAgdGFnOiAiIiwKICAgICAgICBkZXNjcmlwdGlvbjogIiIsCiAgICAgICAgc2FsZXNTaG9wOiAiIiwKICAgICAgICBpbWFnZXM6IFtdLAogICAgICAgIG1lcmNoYW50SWQ6ICIiIC8v5ZWG5oi3SUQKCiAgICAgIH0sCiAgICAgIGJhc2VfcnVsZXM6IHsKICAgICAgICAvLyDln7rmnKzkv6Hmga/pqozor4EKICAgICAgICB0aXRsZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIuivt+i+k+WFpeWVhuWTgeWQjeensCIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9XSwKICAgICAgICBjYXRlZ29yeUlkOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup5ZWG5ZOB5YiG57G7IiwKICAgICAgICAgIHRyaWdnZXI6ICJjaGFuZ2UiCiAgICAgICAgfV0sCiAgICAgICAgZXhwaXJlVGltZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIuivt+i+k+WFpeWVhuWTgeS/nei0qOacnyIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9XSwKICAgICAgICBtYXN0ZXJVbml0OiBbewogICAgICAgICAgdmFsaWRhdG9yOiB2YWxpZGF0ZVVuaXQsCiAgICAgICAgICB0cmlnZ2VyOiAiY2hhbmdlIgogICAgICAgIH1dCiAgICAgIH0sCiAgICAgIGltYWdlc19ydWxlczogewogICAgICAgIGltYWdlczogW3sKICAgICAgICAgIHR5cGU6ICJhcnJheSIsCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLor7fkuIrkvKDllYblk4Hlm77niYciLAogICAgICAgICAgdHJpZ2dlcjogImNoYW5nZSIKICAgICAgICB9XQogICAgICB9LAogICAgICBiYXNlX2dvb2RzX2lkOiAwLAogICAgICBpc0VkaXRTcGVjOiA1LAogICAgICAvLyA1IOihqOekuuatpOWVhuWTgeS7juacqumHh+i0rei/h++8jOWFgeiuuOeUqOaIt+maj+aEj+e8lui+keWNleS9jeWSjOWxnuaAp++8mzQg6KGo56S65ZWG5ZOB5bey57uP6YeH6LSt6L+H77yM6ZqQ6JeP5re75Yqg5bGe5oCn5oyJ6ZKu77yM6YG/5YWNc2t1aWTph43nu4QKICAgICAgaXNOZXc6IDUsCiAgICAgIC8vIDUg5qCH56S66L+Z5piv5LiA5Liq5pyA6L+R5paw5aKe55qE5ZWG5ZOB77yM5Z+65pys5Y2V5L2N5Li65pyA5bCP5Y2V5L2N77yMNOagh+ekuui/meaYr+S5i+WJjeeahOiAgeaVsOaNru+8jOWfuuacrOWNleS9jeS4uuacgOWkp+WNleS9jTMKICAgICAgc2VsX21lcmNoYW50OiBmYWxzZSwKICAgICAgc2VsX2NpdGllczogW10sCiAgICAgIGNhdGVnb3J5X2RhdGE6IFtdLAogICAgICAvL+WVhuWTgeWIhuexu+WIl+ihqAogICAgICBjYXRlX3Byb3BzOiB7CiAgICAgICAgbGFiZWw6ICJ0aXRsZSIsCiAgICAgICAgdmFsdWU6ICJpZCIsCiAgICAgICAgY2hlY2tTdHJpY3RseTogdHJ1ZQogICAgICB9LAogICAgICBhc3Npc3RfY2F0ZTogW3sKICAgICAgICBhc3Npc3RDYXRlZ29yeVBhdGg6IFtdCiAgICAgIH1dLAogICAgICBwYWdlX3RhYnM6ICIxIiwKICAgICAgc3RlcF9hY3RpdmU6IDEKICAgIH07CiAgfSwKCiAgYXN5bmMgY3JlYXRlZCgpIHsKICAgIC8vIHRoaXMuZ2V0QWxsR29vZHNTdXBwb3J0KCk7CiAgICAvLyDllYblk4HliIbnsbvliJfooagKICAgIGF3YWl0IHRoaXMuZ2V0QWxsQ2F0ZWdvcnlQb3N0KCk7CiAgICB0aGlzLnBhZ2VOYW1lID0gdGhpcy4kcm91dGUubmFtZTsgLy8g5ZWG5oi3566h55CGCgogICAgYXdhaXQgdGhpcy5nZXRBbGxNZXJjaGFudExpc3QoKTsgLy8g5bGe5oCn566h55CGCgogICAgYXdhaXQgdGhpcy5TcGVjTWFuYWdlZ2V0QWxsKCk7CiAgICBhd2FpdCB0aGlzLmdldEFsbFVuaXQoKTsKCiAgICBpZiAodGhpcy4kcm91dGUucGFyYW1zLmlkKSB7CiAgICAgIHRoaXMuYmFzZV9nb29kc19pZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZDsKICAgICAgYXdhaXQgdGhpcy5nZXRHb29kc0Jhc2ljSW5mb0J5SWQoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIOiOt+WPluaaguWtmOS/oeaBrwogICAgICBhd2FpdCB0aGlzLmdldFBhdXNlU2F2ZSgpOwogICAgfQogIH0sCgogIGFzeW5jIGFjdGl2YXRlZCgpIHsKICAgIGlmICh0aGlzLiRfaXNJbml0KCkpIHJldHVybjsKICAgIHRoaXMucGFnZU5hbWUgPSB0aGlzLiRyb3V0ZS5uYW1lOwogICAgdGhpcy5zdGVwX2FjdGl2ZSA9IDE7CiAgICB0aGlzLnBhZ2VfdGFicyA9ICIxIjsKCiAgICBpZiAodGhpcy4kcm91dGUucGFyYW1zLmlkKSB7CiAgICAgIHRoaXMuYmFzZV9nb29kc19pZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZDsKICAgICAgYXdhaXQgdGhpcy5nZXRHb29kc0Jhc2ljSW5mb0J5SWQoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIOiOt+WPluaaguWtmOS/oeaBrwogICAgICBhd2FpdCB0aGlzLmdldFBhdXNlU2F2ZSgpOwogICAgfQogIH0sCgogIG1ldGhvZHM6IHsKICAgIC8vIOm7mOiupOWNleS9jWNoYW5nZQogICAgaXNEZWZhdWx0Q2hhbmdlKHZhbCwgaW5kZXgsIHNJbmRleCkgewogICAgICAvLyDlpJrop4TmoLzmlbDmja4KICAgICAgaWYgKHRoaXMuc3BlY190YWJsZV9EYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICBpZiAodmFsID09PSA1KSB7CiAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLnNwZWNfdGFibGVfRGF0YSk7CiAgICAgICAgICB0YXJnZXQuZm9yRWFjaCgoaXRlbSwgaW5kZXhTKSA9PiB7CiAgICAgICAgICAgIGl0ZW0uYmFyQ29kZS5mb3JFYWNoKChpdGVtQiwgaW5kZXhCKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGluZGV4UyAhPT0gc0luZGV4KSB7CiAgICAgICAgICAgICAgICBpdGVtQi5pc0RlZmF1bHQgPSA0OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaW5kZXhCICE9PSBpbmRleCkgewogICAgICAgICAgICAgICAgICBpdGVtQi5pc0RlZmF1bHQgPSA0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc3BlY190YWJsZV9EYXRhID0gdGFyZ2V0OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodmFsID09PSA1KSB7CiAgICAgICAgICBpZiAoaW5kZXggPT09ICJtYXN0ZXJVbml0IikgewogICAgICAgICAgICB0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0LmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgICAgICAgaXRlbS5pc0RlZmF1bHQgPSA0OwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQuaXNEZWZhdWx0ID0gNDsKICAgICAgICAgICAgdGhpcy5iYXNlX2Zvcm0uYnJhbmNoVW5pdC5mb3JFYWNoKChpdGVtLCBpbmRleFUpID0+IHsKICAgICAgICAgICAgICBpZiAoaW5kZXhVICE9PSBpbmRleCkgewogICAgICAgICAgICAgICAgaXRlbS5pc0RlZmF1bHQgPSA0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIC8vIOivt+axguWfuuacrOWNleS9jeaVsOaNrgogICAgYXN5bmMgZ2V0QWxsVW5pdCgpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEKICAgICAgfSA9IGF3YWl0IGdldEFsbFVuaXQoewogICAgICAgIHBhZ2U6IDEsCiAgICAgICAgcGFnZVNpemU6IDk5LAogICAgICAgIHNvdXJjZTogNAogICAgICB9KTsKICAgICAgdGhpcy51bml0X29wdGlvbnMgPSBkYXRhOwogICAgfSwKCiAgICBtb2RlbENsb3NlKCkgewogICAgICB0aGlzLmFkZF9tb2RlbCA9IGZhbHNlOwogICAgfSwKCiAgICAvLyDmiZPlvIDmlrDlop7lvLnnqpcKICAgIG9wZW5Nb2RlbCh0aXRsZSwgcm93KSB7CiAgICAgIHRoaXMuYWRkX21vZGVsID0gdHJ1ZTsKICAgICAgdGhpcy5kaWFsb2dUaXRsZSA9IHRpdGxlOwoKICAgICAgaWYgKHRpdGxlID09PSAi5paw5bu65a2Q5YiG57G7IikgewogICAgICAgIGxldCBsaW5rID0gcm93LmxpbmsgPyByb3cubGluay5zcGxpdCgiLCIpLm1hcChpdGVtID0+IHsKICAgICAgICAgIHJldHVybiBwYXJzZUludChpdGVtKTsKICAgICAgICB9KSA6IFtdOwogICAgICAgIGxpbmsucHVzaChyb3cuaWQpOwogICAgICAgIHRoaXMucGlkX2FyciA9IGxpbms7CiAgICAgIH0KICAgIH0sCgogICAgLy8g5paw5aKeL+e8lui+keWIhuexuwogICAgYXN5bmMgc3ViQ2F0ZWdvcnkoKSB7CiAgICAgIGF3YWl0IHRoaXMuZ2V0QWxsQ2F0ZWdvcnlQb3N0KCk7CiAgICB9LAoKICAgIC8vIOaWsOW7uuWTgeeJjAogICAgc3VibWl0QnJhbmQoKSB7CiAgICAgIHRoaXMuYWRkX0JyYW5kID0gZmFsc2U7CiAgICB9LAoKICAgIC8vIOa3u+WKoOaaguWtmAogICAgYXN5bmMgQWRkVGVtKCkgewogICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLnRoaXMuYmFzZV9mb3JtLAogICAgICAgIHNwZWNHcm91cDogdGhpcy5za3VfbGlzdCwKICAgICAgICBzcGVjTXVsdGlwbGU6IHRoaXMuc3BlY190YWJsZV9EYXRhLAogICAgICAgIHRhZzogdGhpcy5keW5hbWljVGFncywKICAgICAgICBhc3Npc3RfY2F0ZTogdGhpcy5hc3Npc3RfY2F0ZQogICAgICB9OwogICAgICBjb25zdCBkYXRhID0gYXdhaXQgYWRkUGF1c2VTYXZlKHsKICAgICAgICBrZXk6IHRoaXMucGFnZU5hbWUsCiAgICAgICAgZGF0YTogcGFyYW1zCiAgICAgIH0pOwogICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICB0eXBlOiAic3VjY2VzcyIsCiAgICAgICAgbWVzc2FnZTogIuaaguWtmOaIkOWKnyIKICAgICAgfSk7CiAgICAgIHRoaXMuJGNsb3NlQ3VycmVudEdvRWRpdCgiL2dvb2RzL21hbmFnZUcvQmFzZURhdGFMaXN0Iik7CiAgICB9LAoKICAgIC8vIOWIoOmZpOaaguWtmOS/oeaBrwogICAgYXN5bmMgZGVsUGF1c2VTYXZlKHR5cGUpIHsKICAgICAgY29uc3QgZGF0YSA9IGRlbFBhdXNlU2F2ZSh7CiAgICAgICAga2V5OiB0aGlzLnBhZ2VOYW1lCiAgICAgIH0pOwoKICAgICAgaWYgKHR5cGUpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgIG1lc3NhZ2U6ICLmuIXpmaTmmoLlrZjmiJDlip8iCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy4kY2xvc2VDdXJyZW50R29FZGl0KCIvZ29vZHMvbWFuYWdlRy9BZGRCYXNlRGF0YSIpOwogICAgICB9CiAgICB9LAoKICAgIC8vIOiOt+WPluaaguWtmOS/oeaBrwogICAgYXN5bmMgZ2V0UGF1c2VTYXZlKCkgewogICAgICBjb25zdCB7CiAgICAgICAgZGF0YQogICAgICB9ID0gYXdhaXQgZ2V0UGF1c2VTYXZlKHsKICAgICAgICBrZXk6IHRoaXMucGFnZU5hbWUKICAgICAgfSk7CiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShkYXRhKSA9PT0gInt9IikgcmV0dXJuOwogICAgICB0aGlzLmJhc2VfZm9ybSA9IHsgLi4uZGF0YSwKICAgICAgICBjYXRlZ29yeVBhdGg6IEFycmF5LmlzQXJyYXkoZGF0YS5jYXRlZ29yeVBhdGgpID8gZGF0YS5jYXRlZ29yeVBhdGggOiBbXQogICAgICB9OwogICAgICB0aGlzLmFzc2lzdF9jYXRlID0gZGF0YS5hc3Npc3RfY2F0ZSB8fCBbewogICAgICAgIGFzc2lzdENhdGVnb3J5UGF0aDogW10KICAgICAgfV07CiAgICAgIHRoaXMuc2t1X2xpc3QgPSBkYXRhLnNwZWNHcm91cCB8fCBbXTsKICAgICAgdGhpcy5zcGVjX3RhYmxlX0RhdGEgPSBkYXRhLnNwZWNNdWx0aXBsZSB8fCBbXTsKICAgICAgdGhpcy5keW5hbWljVGFncyA9IGRhdGEudGFnIHx8IFtdOwoKICAgICAgaWYgKGRhdGEuaW1hZ2VzKSB7CiAgICAgICAgdGhpcy5pbWdfbGlzdCA9IGRhdGEuaW1hZ2VzLm1hcChpdGVtID0+IHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIG5hbWU6ICIiLAogICAgICAgICAgICB1cmw6IGl0ZW0KICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6KeE5qC85piO57uG5Yig6ZmkCiAgICBzcGVjRGV0YWlsRGVsKHJvdywgaW5kZXgpIHsKICAgICAgaWYgKHJvdy5zcGVjR3JvdXBIYXNoICYmIHRoaXMuYmFzZV9mb3JtLmRlbFNwZWNTa3VJZHMuaW5kZXhPZihyb3cuc3BlY0dyb3VwSGFzaCkgPT09IC0xKSB7CiAgICAgICAgdGhpcy5iYXNlX2Zvcm0uZGVsU3BlY1NrdUlkcy5wdXNoKHJvdy5zcGVjR3JvdXBIYXNoKTsKICAgICAgfQoKICAgICAgdGhpcy5zcGVjX3RhYmxlX0RhdGEuc3BsaWNlKGluZGV4LCAxKTsKICAgICAgY29uc3Qgc3BlY05hbWVBcnIgPSByb3cuc3BlY05hbWUuaW5kZXhPZigiXyIpID8gcm93LnNwZWNOYW1lLnNwbGl0KCJfIikgOiByb3cuc3BlY05hbWU7IC8vIGNvbnNvbGUubG9nKCdzcGVjTmFtZUFycicsIHJvdy5zcGVjTmFtZSkKICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuc3BlY190YWJsZV9EYXRhJywgdGhpcy5zcGVjX3RhYmxlX0RhdGEpCgogICAgICBsZXQgaXNGYWxzZVZhbCA9ICIiOwoKICAgICAgZm9yIChsZXQgaSBpbiBzcGVjTmFtZUFycikgewogICAgICAgIGxldCBpdGVtUyA9IHNwZWNOYW1lQXJyW2ldOyAvLyBjb25zb2xlLmxvZyhpdGVtUykKICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnNwZWNfdGFibGVfRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5zcGVjTmFtZS5pbmRleE9mKGl0ZW1TKSA+IC0xKSkKCiAgICAgICAgaWYgKCF0aGlzLnNwZWNfdGFibGVfRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5zcGVjTmFtZS5pbmRleE9mKGl0ZW1TKSA+IC0xKSkgewogICAgICAgICAgaXNGYWxzZVZhbCA9IGl0ZW1TOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IC8vIGNvbnNvbGUubG9nKCdpc1N0YXksJywgaXNGYWxzZVZhbCkKICAgICAgLy8gY29uc29sZS5sb2codGhpcy5za3VfbGlzdCkKCgogICAgICBpZiAoaXNGYWxzZVZhbCkgewogICAgICAgIHRoaXMuc2t1X2xpc3QuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICAgIGNvbnN0IGluZGV4UCA9IGl0ZW0ucGFyYW1zLmZpbmRJbmRleChpdGVtUCA9PiBpdGVtUC5zcGVjTmFtZSA9PT0gaXNGYWxzZVZhbCk7CgogICAgICAgICAgaWYgKGluZGV4UCA+IC0xKSB7CiAgICAgICAgICAgIGl0ZW0ucGFyYW1zLnNwbGljZShpbmRleFAsIDEpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9LAoKICAgIC8vIGRkZWwodmFsKSB7CiAgICAvLyAgIHRoaXMuZnJvbS5jYXRlZ29yeVBhdGggPSB2YWw7CiAgICAvLyB9LAogICAgLy8g6KeE5qC85Zu+54mHCiAgICB1cGxvYWRTcGVjU3VjY2Vzcyh2YWwsIGluZGV4KSB7CiAgICAgIGxldCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLnNwZWNfdGFibGVfRGF0YSk7CiAgICAgIHRhcmdldFtpbmRleF0uc3BlY0ltYWdlID0gewogICAgICAgIG5hbWU6ICIiLAogICAgICAgIHVybDogdmFsCiAgICAgIH07CiAgICAgIHRoaXMuc3BlY190YWJsZV9EYXRhID0gdGFyZ2V0OwogICAgfSwKCiAgICAvLyDmt7vliqDop4TmoLzpobnnm64KICAgIGFkZFNrdVAoKSB7CiAgICAgIGlmICh0aGlzLmlzRWRpdFNwZWMgPT09IDUpIHsKICAgICAgICB0aGlzLnNrdV9saXN0LnB1c2goewogICAgICAgICAgc3BlY19kYXRhX2NoaWxkOiBbXSwKICAgICAgICAgIHNlbGZfc3BlY19pbnB1dDogZmFsc2UsCiAgICAgICAgICBzZWxmX3NwZWNfdmFsOiAiIiwKICAgICAgICAgIGdyb3VwU3BlY0lkOiAiIiwKICAgICAgICAgIGdyb3VwU3BlY05hbWU6ICIiLAogICAgICAgICAgcGFyYW1zOiBbXQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJGNvbmZpcm0oIuaWsOWinuinhOagvOS8muWvvOiHtOWOn+acieW6k+WtmOmHjee9rizor7fosKjmhY7mk43kvZwhIOaYr+WQpue7p+e7rT8iLCAi5o+Q56S6IiwgewogICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICLnu6fnu63mlrDlop4iLAogICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogIuWPlua2iCIsCiAgICAgICAgICB0eXBlOiAid2FybmluZyIKICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgIHRoaXMuc2t1X2xpc3QucHVzaCh7CiAgICAgICAgICAgIHNwZWNfZGF0YV9jaGlsZDogW10sCiAgICAgICAgICAgIHNlbGZfc3BlY19pbnB1dDogZmFsc2UsCiAgICAgICAgICAgIHNlbGZfc3BlY192YWw6ICIiLAogICAgICAgICAgICBncm91cFNwZWNJZDogIiIsCiAgICAgICAgICAgIGdyb3VwU3BlY05hbWU6ICIiLAogICAgICAgICAgICBwYXJhbXM6IFtdCiAgICAgICAgICB9KTsKICAgICAgICB9KS5jYXRjaCgoKSA9PiB7fSk7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6KeE5qC85piO5YiH5o2iCiAgICBncm91cFNwZWNJZENoYW5nZSh2YWwsIGluZGV4UykgewogICAgICBsZXQgdGFyZ2V0ID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5za3VfbGlzdCk7CiAgICAgIGNvbnN0IHNwZWNEYXRhSXRlbSA9IHRoaXMuc3BlY19kYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSB2YWwpOwogICAgICBjb25zdCBpc0hhdmUgPSB0YXJnZXQuZmluZChpdGVtID0+IGl0ZW0uZ3JvdXBTcGVjTmFtZSA9PT0gc3BlY0RhdGFJdGVtLnNwZWNOYW1lKTsKCiAgICAgIGlmIChpc0hhdmUpIHsKICAgICAgICB0YXJnZXRbaW5kZXhTXS5ncm91cFNwZWNJZCA9ICIiOwogICAgICAgIHRoaXMuc2t1X2xpc3QgPSB0YXJnZXQ7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKGDlsZ7mgKc644CQJHtzcGVjRGF0YUl0ZW0uc3BlY05hbWV944CR5bey5a2Y5ZyoYCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB0YXJnZXRbaW5kZXhTXS5ncm91cFNwZWNOYW1lID0gc3BlY0RhdGFJdGVtLnNwZWNOYW1lOwogICAgICB0YXJnZXRbaW5kZXhTXS5zcGVjX2RhdGFfY2hpbGQgPSBzcGVjRGF0YUl0ZW0uY2hpbGQgfHwgW107CiAgICAgIHRhcmdldFtpbmRleFNdLnBhcmFtcyA9IFtdOwogICAgICB0aGlzLnNrdV9saXN0ID0gdGFyZ2V0OyAvLyDph43mjpLop4TmoLznu4TlkIgKICAgICAgLy8gdGhpcy5zcGVjR3JvdXBSZXN0KCkKICAgICAgLy8gY29uc29sZS5sb2codGhpcy5za3VfbGlzdCkKICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zcGVjX3RhYmxlX0RhdGEpCiAgICB9LAoKICAgIC8vIOmHjeaOkuinhOagvOe7hOWQiAogICAgc3BlY0dyb3VwUmVzdCgpIHsKICAgICAgLy8g57yW6L6R6aG16Z2i5a2Y5YKo6K+m5oOF5o6l5Y+j6L+U5Zue6KeE5qC857uE5ZCIaWQKICAgICAgdGhpcy5zcGVjX3RhYmxlX0RhdGEuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICBpZiAoaXRlbS5zcGVjR3JvdXBIYXNoICYmIHRoaXMuYmFzZV9mb3JtLmRlbFNwZWNTa3VJZHMuaW5kZXhPZihpdGVtLnNwZWNHcm91cEhhc2gpID09PSAtMSkgewogICAgICAgICAgdGhpcy5iYXNlX2Zvcm0uZGVsU3BlY1NrdUlkcy5wdXNoKGl0ZW0uc3BlY0dyb3VwSGFzaCk7CiAgICAgICAgfQogICAgICB9KTsgLy8g5aSH5Lu95LiA5Lu96KeE5qC85piO57uG77yM55So5p2l5aGr5YWF6YeN5o6S6KeE5qC857uE5LmL5YmN55qE5pWw5o2uCgogICAgICBjb25zdCBjbG9uZVNwZWNHcm91cCA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHRoaXMuc3BlY190YWJsZV9EYXRhKTsKICAgICAgY29uc3Qgc2t1QXJyID0gdGhpcy5za3VfbGlzdC5tYXAoaXRlbSA9PiB7CiAgICAgICAgaXRlbS5wYXJhbXMgPSBpdGVtLnBhcmFtcy5tYXAoaXRlbVAgPT4gewogICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbVAsCiAgICAgICAgICAgIGdyb3VwU3BlY05hbWU6IGl0ZW0uZ3JvdXBTcGVjTmFtZQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gaXRlbS5wYXJhbXM7CiAgICAgIH0pOyAvLyBjb25zb2xlLmxvZygnc2t1QXJyOjonLCBza3VBcnIpCgogICAgICB0aGlzLnNwZWNfdGFibGVfRGF0YSA9IHRoaXMuZG9FeGNoYW5nZShza3VBcnIpOyAvLyBjb25zb2xlLmxvZyh0aGlzLnNwZWNfdGFibGVfRGF0YSkKCiAgICAgIHRoaXMuc3BlY190YWJsZV9EYXRhLmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgY29uc3QgaW5kZXggPSBjbG9uZVNwZWNHcm91cC5maW5kSW5kZXgoaXRlbUMgPT4gaXRlbUMuaWQgPT09IGl0ZW0uaWQpOwoKICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgaXRlbS5iYXJDb2RlID0gY2xvbmVTcGVjR3JvdXBbaW5kZXhdLmJhckNvZGU7CiAgICAgICAgICBpdGVtLnNwZWNJbWFnZSA9IGNsb25lU3BlY0dyb3VwW2luZGV4XS5zcGVjSW1hZ2U7CiAgICAgICAgICBpdGVtLmludmVudG9yeSA9IGNsb25lU3BlY0dyb3VwW2luZGV4XS5pbnZlbnRvcnk7CiAgICAgICAgICBpdGVtLmlzRWRpdFNwZWMgPSBjbG9uZVNwZWNHcm91cFtpbmRleF0uaXNFZGl0U3BlYyB8fCA1OwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAoKICAgIC8vIOinhOagvOe7hOWQiAogICAgZG9FeGNoYW5nZShkb3VibGVBcnJheXMpIHsKICAgICAgY29uc3QgbGVuID0gZG91YmxlQXJyYXlzLmxlbmd0aDsKICAgICAgbGV0IHVuaXREYXRhID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5iYXNlX2Zvcm0uYnJhbmNoVW5pdCk7CiAgICAgIHVuaXREYXRhLnVuc2hpZnQodGhpcy5iYXNlX2Zvcm0ubWFzdGVyVW5pdCk7CiAgICAgIGNvbnN0IGJhckNvZGVBcnIgPSB1bml0RGF0YS5tYXAoaXRlbSA9PiB7CiAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwKICAgICAgICAgIGJhckNvZGU6ICIiLAogICAgICAgICAgd2VpZ2h0OiAiIiwKICAgICAgICAgIGlzRGVmYXVsdDogNAogICAgICAgIH07CiAgICAgIH0pOwoKICAgICAgaWYgKGxlbiA+PSAyKSB7CiAgICAgICAgY29uc3QgbGVuMSA9IGRvdWJsZUFycmF5c1swXS5sZW5ndGg7CiAgICAgICAgY29uc3QgbGVuMiA9IGRvdWJsZUFycmF5c1sxXS5sZW5ndGg7CiAgICAgICAgY29uc3QgbmV3bGVuID0gbGVuMSAqIGxlbjI7CiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBBcnJheShuZXdsZW4pOwogICAgICAgIGxldCBpbmRleCA9IDA7CgogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7CiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlbjI7IGorKykgewogICAgICAgICAgICB0ZW1wW2luZGV4XSA9IHsKICAgICAgICAgICAgICBncm91cFNwZWNJZDogZG91YmxlQXJyYXlzWzBdW2ldLmdyb3VwU3BlY0lkICsgIl8iICsgZG91YmxlQXJyYXlzWzFdW2pdLmdyb3VwU3BlY0lkLAogICAgICAgICAgICAgIGdyb3VwU3BlY05hbWU6IGRvdWJsZUFycmF5c1swXVtpXS5ncm91cFNwZWNOYW1lICsgIl8iICsgZG91YmxlQXJyYXlzWzFdW2pdLmdyb3VwU3BlY05hbWUsCiAgICAgICAgICAgICAgaWQ6IGRvdWJsZUFycmF5c1swXVtpXS5pZCArICJfIiArIGRvdWJsZUFycmF5c1sxXVtqXS5pZCwKICAgICAgICAgICAgICBzcGVjTmFtZTogZG91YmxlQXJyYXlzWzBdW2ldLnNwZWNOYW1lICsgIl8iICsgZG91YmxlQXJyYXlzWzFdW2pdLnNwZWNOYW1lLAogICAgICAgICAgICAgIHNwZWNJbWFnZTogewogICAgICAgICAgICAgICAgbmFtZTogIiIsCiAgICAgICAgICAgICAgICB1cmw6ICIiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBiYXJDb2RlOiB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZShiYXJDb2RlQXJyKQogICAgICAgICAgICB9OwogICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbGV0IG5ld0FycmF5ID0gbmV3IEFycmF5KGxlbiAtIDEpOwogICAgICAgIG5ld0FycmF5WzBdID0gdGVtcDsKCiAgICAgICAgaWYgKGxlbiA+IDIpIHsKICAgICAgICAgIGxldCBfY291bnQgPSAxOwoKICAgICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgbmV3QXJyYXlbX2NvdW50XSA9IGRvdWJsZUFycmF5c1tpXTsKICAgICAgICAgICAgX2NvdW50Kys7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5kb0V4Y2hhbmdlKG5ld0FycmF5KTsKICAgICAgfSBlbHNlIGlmIChsZW4gPiAwKSB7CiAgICAgICAgcmV0dXJuIGRvdWJsZUFycmF5c1swXS5tYXAoaXRlbSA9PiB7CiAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgICBiYXJDb2RlOiB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZShiYXJDb2RlQXJyKSwKICAgICAgICAgICAgc3BlY0ltYWdlOiB7CiAgICAgICAgICAgICAgbmFtZTogIiIsCiAgICAgICAgICAgICAgdXJsOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgfSwKCiAgICAvLyDoh6rlrprkuYnlsZ7mgKflgLzovpPlhaXmoYbnoa7lrpogIOa3u+WKoOiHquWumuS5ieWxnuaApwogICAgYXN5bmMgc2VsZlNwZWNDb25maXJtKGluZGV4KSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHRoaXMuc2t1X2xpc3QpOwoKICAgICAgaWYgKCF0YXJnZXRbaW5kZXhdLnNlbGZfc3BlY192YWwpIHsKICAgICAgICB0YXJnZXRbaW5kZXhdLnNlbGZfc3BlY19pbnB1dCA9IGZhbHNlOwogICAgICAgIHRoaXMuc2t1X2xpc3QgPSB0YXJnZXQ7CiAgICAgICAgcmV0dXJuOwogICAgICB9IC8vIOajgOafpeW9k+WJjeWxnuaAp+WAvOaYr+WQpuW3suiiq+mAieaLqQoKCiAgICAgIGNvbnN0IGlzSGF2ZSA9IHRhcmdldFtpbmRleF0ucGFyYW1zLmZpbmQoaXRlbSA9PiBpdGVtLnNwZWNOYW1lID09PSB0YXJnZXRbaW5kZXhdLnNlbGZfc3BlY192YWwpOwoKICAgICAgaWYgKGlzSGF2ZSkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZyhg5bGe5oCn5YC8OuOAkCR7dGFyZ2V0W2luZGV4XS5zZWxmX3NwZWNfdmFsfeOAkeW3suWtmOWcqGApOwogICAgICAgIHRhcmdldFtpbmRleF0uc2VsZl9zcGVjX3ZhbCA9ICIiOwogICAgICAgIHRhcmdldFtpbmRleF0uc2VsZl9zcGVjX2lucHV0ID0gZmFsc2U7CiAgICAgICAgdGhpcy5za3VfbGlzdCA9IHRhcmdldDsKICAgICAgICByZXR1cm47CiAgICAgIH0gLy8g5bGe5oCn5YC85pyq6KKr6YCJ5oupIOWBmuaOpeWPo+ivt+axggoKCiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBkZWZpbmVTcGVjKHsKICAgICAgICBzcGVjTmFtZTogdGFyZ2V0W2luZGV4XS5zZWxmX3NwZWNfdmFsLAogICAgICAgIHBpZDogdGFyZ2V0W2luZGV4XS5ncm91cFNwZWNJZCwKICAgICAgICBoaWRkZW46IDQKICAgICAgfSk7CiAgICAgIHRhcmdldFtpbmRleF0uc2VsZl9zcGVjX2lucHV0ID0gZmFsc2U7CiAgICAgIHRhcmdldFtpbmRleF0ucGFyYW1zLnB1c2goewogICAgICAgIHNwZWNOYW1lOiBkYXRhLnNwZWNOYW1lLAogICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgIGdyb3VwU3BlY0lkOiB0YXJnZXRbaW5kZXhdLmdyb3VwU3BlY0lkCiAgICAgIH0pOwogICAgICB0YXJnZXRbaW5kZXhdLnNlbGZfc3BlY192YWwgPSAiIjsKICAgICAgdGhpcy5za3VfbGlzdCA9IHRhcmdldDsgLy8g6YeN5o6S6KeE5qC857uE5ZCICgogICAgICB0aGlzLnNwZWNHcm91cFJlc3QoKTsKICAgIH0sCgogICAgLy8g5paw5aKe6KeE5qC85YC8CiAgICBhZGRTcGVjVmFsKGluZGV4UykgewogICAgICB0aGlzLnNwZWNfbW9kZWwgPSB0cnVlOwogICAgICB0aGlzLnNwZWNfZGF0YV9jaGlsZCA9IHRoaXMuc2t1X2xpc3RbaW5kZXhTXS5zcGVjX2RhdGFfY2hpbGQ7CiAgICAgIHRoaXMuc3BlY19uYW1lX2luZGV4ID0gaW5kZXhTOwogICAgICB0aGlzLnNwZWNfaXRlbV9jaGVjayA9IHRoaXMuc2t1X2xpc3RbaW5kZXhTXS5wYXJhbXMubWFwKGl0ZW0gPT4gaXRlbS5pZCk7IC8vIOS9v+eUqOWxnuaAp+WAvOWNlemAieaWueazle+8jOS4uuS6huiuvue9ruWFqOmAiemAieaLqeahhueKtuaAgQoKICAgICAgdGhpcy5zcGVjSXRlbUNoYW5nZSh0aGlzLnNwZWNfaXRlbV9jaGVjayk7CiAgICB9LAoKICAgIC8vIOmAieaLqeWxnuaAp+WAvAogICAgc2VsU3BlY1ZhbCgpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5za3VfbGlzdCk7CiAgICAgIGNvbnN0IHNwZWN2YWwgPSB0aGlzLnNwZWNfZGF0YV9jaGlsZC5maWx0ZXIoaXRlbSA9PiB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3BlY19pdGVtX2NoZWNrLmZpbmRJbmRleChpdGVtUyA9PiBpdGVtUyA9PT0gaXRlbS5pZCkgPiAtMTsKICAgICAgfSkubWFwKGl0ZW0gPT4gewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBzcGVjTmFtZTogaXRlbS5zcGVjTmFtZSwKICAgICAgICAgIGlkOiBpdGVtLmlkLAogICAgICAgICAgZ3JvdXBTcGVjSWQ6IGl0ZW0ucGlkCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIHRhcmdldFt0aGlzLnNwZWNfbmFtZV9pbmRleF0ucGFyYW1zID0gdGhpcy4kX2NvbW1vbi51bmlxdWUodGFyZ2V0W3RoaXMuc3BlY19uYW1lX2luZGV4XS5wYXJhbXMuY29uY2F0KHNwZWN2YWwpLCBbImlkIl0pOwogICAgICB0aGlzLnNrdV9saXN0ID0gdGFyZ2V0OwogICAgICB0aGlzLnNwZWNfbW9kZWwgPSBmYWxzZTsgLy8g6YeN5o6S6KeE5qC857uE5ZCICgogICAgICB0aGlzLnNwZWNHcm91cFJlc3QoKTsKICAgIH0sCgogICAgLy8g5bGe5oCn5YC85YWo6YCJCiAgICBjaGVja0FsbFNwZWNDaGFuZ2UodmFsKSB7CiAgICAgIHRoaXMuaXNfaW5kZXRlcm1pbmF0ZV9zcGVjID0gZmFsc2U7CgogICAgICBpZiAodmFsKSB7CiAgICAgICAgdGhpcy5zcGVjX2l0ZW1fY2hlY2sgPSB0aGlzLnNwZWNfZGF0YV9jaGlsZC5tYXAoaXRlbSA9PiB7CiAgICAgICAgICByZXR1cm4gaXRlbS5pZDsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNwZWNfaXRlbV9jaGVjayA9IFtdOwogICAgICB9CiAgICB9LAoKICAgIC8vIOWxnuaAp+WAvOWNlemAiQogICAgc3BlY0l0ZW1DaGFuZ2UodmFsKSB7CiAgICAgIGxldCBjaGVja2VkQ291bnQgPSB2YWwubGVuZ3RoOwogICAgICB0aGlzLnNwZWNfY2hlY2tfYWxsID0gY2hlY2tlZENvdW50ID09PSB0aGlzLnNwZWNfZGF0YV9jaGlsZC5sZW5ndGg7CiAgICAgIHRoaXMuaXNfaW5kZXRlcm1pbmF0ZV9zcGVjID0gY2hlY2tlZENvdW50ID4gMCAmJiBjaGVja2VkQ291bnQgPCB0aGlzLnNwZWNfZGF0YV9jaGlsZC5sZW5ndGg7CiAgICB9LAoKICAgIC8vIOWIoOmZpOinhOagvOWAvAogICAgZGVsU3BlY1ZhbChpbmRleEMsIGluZGV4UywgaXRlbUMpIHsKICAgICAgdGhpcy4kY29uZmlybSgi56Gu5a6a6KaB5Yig6Zmk6K+l6KeE5qC85YC85ZCXPyIsICLmj5DnpLoiLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICLnoa7lrpoiLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICLlj5bmtogiLAogICAgICAgIHR5cGU6ICJ3YXJuaW5nIgogICAgICB9KS50aGVuKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAodGhpcy5iYXNlX2dvb2RzX2lkKSB7CiAgICAgICAgICB0aGlzLmJhc2VfZm9ybS5kZWxTcGVjU2t1SWRzID0gdGhpcy5zcGVjX3RhYmxlX0RhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zcGVjTmFtZS5pbmRleE9mKGl0ZW1DLnNwZWNOYW1lKSA+IC0xKS5tYXAoaXRlbU0gPT4gewogICAgICAgICAgICByZXR1cm4gaXRlbU0uc3BlY0dyb3VwSGFzaDsKICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5zcGVjX3RhYmxlX0RhdGEgPSB0aGlzLnNwZWNfdGFibGVfRGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNwZWNOYW1lLmluZGV4T2YoaXRlbUMuc3BlY05hbWUpID09PSAtMSk7CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5za3VfbGlzdCk7CiAgICAgICAgdGFyZ2V0W2luZGV4U10ucGFyYW1zLnNwbGljZShpbmRleEMsIDEpOwogICAgICAgIHRoaXMuc2t1X2xpc3QgPSB0YXJnZXQ7CiAgICAgIH0pOwogICAgfSwKCiAgICAvLyDliKDpmaTop4TmoLznu4QKICAgIGRlbEdyb3VwU3BlY0lkKGluZGV4UykgewogICAgICB0aGlzLiRjb25maXJtKCLnoa7lrpropoHliKDpmaTor6Xop4TmoLznu4TlkJc/IiwgIuaPkOekuiIsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogIuehruWumiIsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogIuWPlua2iCIsCiAgICAgICAgdHlwZTogIndhcm5pbmciCiAgICAgIH0pLnRoZW4oYXN5bmMgKCkgPT4gewogICAgICAgIHRoaXMuc2t1X2xpc3Quc3BsaWNlKGluZGV4UywgMSk7IC8vIOmHjeaOkuinhOagvOe7hOWQiAoKICAgICAgICB0aGlzLnNwZWNHcm91cFJlc3QoKTsKICAgICAgfSk7CiAgICB9LAoKICAgIC8vIOiOt+WPluWxnuaAp+WIl+ihqAogICAgYXN5bmMgU3BlY01hbmFnZWdldEFsbCgpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEsCiAgICAgICAgcGFnZVRvdGFsCiAgICAgIH0gPSBhd2FpdCBTcGVjTWFuYWdlZ2V0QWxsKHsKICAgICAgICBwYWdlOiAxLAogICAgICAgIHBhZ2VTaXplOiAxMDAKICAgICAgfSk7CiAgICAgIHRoaXMuc3BlY19kYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNwZWNOYW1lICE9PSAi6K6h6YeP5Y2V5L2NIik7IC8vIHRoaXMudW5pdF9vcHRpb25zID0gZGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5zcGVjTmFtZSA9PT0gJ+iuoemHj+WNleS9jScpLmNoaWxkCiAgICB9LAoKICAgIC8vIOmAieaLqeWbvueJhwogICAgdXBsb2FkU3VjY2Vzcyh2YWwsIHJlcywgZmlsZSwgZmlsZUxpc3QpIHsKICAgICAgY29uc3QgaW1nQXJyID0gZmlsZUxpc3QubWFwKGl0ZW0gPT4gewogICAgICAgIHJldHVybiBpdGVtLmNvbnRlbnQ7CiAgICAgIH0pOwoKICAgICAgaWYgKHRoaXMuYmFzZV9mb3JtLmltYWdlcy5sZW5ndGgpIHsKICAgICAgICB0aGlzLmJhc2VfZm9ybS5pbWFnZXMgPSB0aGlzLmJhc2VfZm9ybS5pbWFnZXMuY29uY2F0KGltZ0Fycik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5iYXNlX2Zvcm0uaW1hZ2VzID0gaW1nQXJyOwogICAgICB9CgogICAgICB0aGlzLmltZ19saXN0ID0gdGhpcy5iYXNlX2Zvcm0uaW1hZ2VzLm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbmFtZTogIiIsCiAgICAgICAgICBjb250ZW50OiBpdGVtCiAgICAgICAgfTsKICAgICAgfSk7CgogICAgICBpZiAodGhpcy5pbWdfbGlzdC5sZW5ndGggPiAxMCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi5Zu+54mH5pyA5aSa5Y+q6IO96YCJ5oup5Y2B5bygIik7CiAgICAgICAgdGhpcy5pbWdfbGlzdCA9IHRoaXMuaW1nX2xpc3Quc2xpY2UoMCwgMTApOwogICAgICB9CiAgICB9LAoKICAgIC8vIOWbvueJh+aLluaLveaOkuW6jwogICAgaW1nU29ydENoYW5nZShsaXN0KSB7CiAgICAgIHRoaXMuYmFzZV9mb3JtLmltYWdlcyA9IGxpc3QubWFwKGl0ZW0gPT4gewogICAgICAgIHJldHVybiBpdGVtLmNvbnRlbnQ7CiAgICAgIH0pOwogICAgfSwKCiAgICB1cGxvYWRSZW1vdmUoZmlsZSwgZmlsZUxpc3QpIHsKICAgICAgdGhpcy5iYXNlX2Zvcm0uaW1hZ2VzID0gZmlsZUxpc3QubWFwKGl0ZW0gPT4gewogICAgICAgIHJldHVybiBpdGVtLmNvbnRlbnQ7CiAgICAgIH0pOwogICAgfSwKCiAgICAvLyDlhbPplK7or43liKDpmaQKICAgIGhhbmRsZUNsb3NlKHRhZykgewogICAgICB0aGlzLmR5bmFtaWNUYWdzLnNwbGljZSh0aGlzLmR5bmFtaWNUYWdzLmluZGV4T2YodGFnKSwgMSk7CiAgICB9LAoKICAgIC8vIOWFs+mUruivjeaYvuekuui+k+WFpeahhgogICAgc2hvd0lucHV0KCkgewogICAgICB0aGlzLmlucHV0VmlzaWJsZSA9IHRydWU7CiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsKICAgICAgICB0aGlzLiRyZWZzLnNhdmVUYWdJbnB1dC4kcmVmcy5pbnB1dC5mb2N1cygpOwogICAgICB9KTsKICAgIH0sCgogICAgLy8g5YWz6ZSu6K+N5pi+56S66L6T5YWl56Gu5a6aCiAgICBoYW5kbGVJbnB1dENvbmZpcm0oKSB7CiAgICAgIGxldCBpbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlOwoKICAgICAgaWYgKGlucHV0VmFsdWUpIHsKICAgICAgICB0aGlzLmR5bmFtaWNUYWdzLnB1c2goaW5wdXRWYWx1ZSk7CiAgICAgIH0KCiAgICAgIHRoaXMuaW5wdXRWaXNpYmxlID0gZmFsc2U7CiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgfSwKCiAgICAvLyDlhbPplK7or41FTkQKICAgIC8vIOiuvue9ruiuoemHj+WNleS9jQogICAgLy8g5Yig6Zmk6L6F5Yqp5Y2V5L2NCiAgICBkZWxGdVVuaXQocm93LCBpdCkgewogICAgICBpZiAocm93LnVuaXRJZCAmJiB0aGlzLmJhc2VfZm9ybS5kZWxVbml0SWRzLmluZGV4T2Yocm93LnVuaXRJZCkgPT09IC0xKSB7CiAgICAgICAgdGhpcy5iYXNlX2Zvcm0uZGVsVW5pdElkcy5wdXNoKHJvdy51bml0SWQpOwogICAgICB9CgogICAgICB0aGlzLnNwZWNfdGFibGVfRGF0YSA9IHRoaXMuc3BlY190YWJsZV9EYXRhLm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgYmFyQ29kZTogaXRlbS5iYXJDb2RlLmZpbHRlcihpdGVtID0+IGl0ZW0udW5pdElkICE9PSByb3cudW5pdElkKQogICAgICAgIH07CiAgICAgIH0pOwogICAgICB0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0LnNwbGljZShpdCwgMSk7CiAgICB9LAoKICAgIC8vIOaWsOWinui+heWKqeWNleS9jQogICAgYWRkRnVVbml0KCkgewogICAgICB0aGlzLmFzc2lzdF9tb2RlbCA9IHRydWU7CiAgICAgIHRoaXMuZWRpdF9hc3Npc3RfbW9kZWwgPSBmYWxzZTsKICAgICAgdGhpcy5hc3Npc3RfZm9ybSA9IHsKICAgICAgICB1bml0TmFtZTogIiIsCiAgICAgICAgaXNNYXN0ZXI6IDQsCiAgICAgICAgdW5pdElkOiAiIiwKICAgICAgICBjb252ZXJzaW9uOiAiIgogICAgICB9OwogICAgfSwKCiAgICAvLyDkv67mlLnpmYTljZXkvY0KICAgIEVkaXRGdVVuaXQoaXQpIHsKICAgICAgdGhpcy5hc3Npc3RfbW9kZWwgPSB0cnVlOwogICAgICB0aGlzLmVkaXRfYXNzaXN0X21vZGVsID0gdHJ1ZTsKICAgICAgdGhpcy5hc3Npc3RfZm9ybSA9IHRoaXMuYmFzZV9mb3JtLmJyYW5jaFVuaXRbaXRdOwogICAgICB0aGlzLmFzc2lzdF9pbmRleCA9IGl0OwogICAgfSwKCiAgICAvLyDlvLnnqpfmj5DkuqQKICAgIHN1YkFzc2lzdCgpIHsKICAgICAgaWYgKCF0aGlzLmFzc2lzdF9mb3JtLmNvbnZlcnNpb24pIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuivt+i+k+WFpeWNleS9jeS7tuaNoueul+WFs+ezuyIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKCF0aGlzLmFzc2lzdF9mb3JtLnVuaXROYW1lKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fpgInmi6novoXliqnljZXkvY0iKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmICghdGhpcy5lZGl0X2Fzc2lzdF9tb2RlbCkgewogICAgICAgIHRoaXMuYXNzaXN0X2Zvcm0ud2VpZ2h0ID0gdGhpcy5iYXNlX2Zvcm0ubWFzdGVyVW5pdC53ZWlnaHQgKiB0aGlzLmFzc2lzdF9mb3JtLmNvbnZlcnNpb247CiAgICAgICAgdGhpcy5iYXNlX2Zvcm0uYnJhbmNoVW5pdC5wdXNoKHRoaXMuYXNzaXN0X2Zvcm0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuYmFzZV9mb3JtLmJyYW5jaFVuaXRbdGhpcy5hc3Npc3RfaW5kZXhdID0gdGhpcy5hc3Npc3RfZm9ybTsKICAgICAgfQoKICAgICAgdGhpcy5hc3Npc3RfbW9kZWwgPSBmYWxzZTsKICAgICAgdGhpcy5zcGVjX3RhYmxlX0RhdGEgPSB0aGlzLnNwZWNfdGFibGVfRGF0YS5tYXAoaXRlbSA9PiB7CiAgICAgICAgaXRlbS5iYXJDb2RlLnB1c2godGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5hc3Npc3RfZm9ybSkpOwogICAgICAgIHJldHVybiB7IC4uLml0ZW0KICAgICAgICB9OwogICAgICB9KTsKICAgIH0sCgogICAgY2hhbmdlV2VpZ2h0KCkgewogICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0KTsKICAgICAgdGFyZ2V0LmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgaXRlbS53ZWlnaHQgPSB0aGlzLmJhc2VfZm9ybS5tYXN0ZXJVbml0LndlaWdodCAqIGl0ZW0uY29udmVyc2lvbjsKICAgICAgfSk7CiAgICAgIHRoaXMuYmFzZV9mb3JtLmJyYW5jaFVuaXQgPSB0YXJnZXQ7CiAgICB9LAoKICAgIC8vIOWfuuacrOWNleS9jeWIh+aNogogICAgbWFzdGVyVW5pdENoYW5nZSh7CiAgICAgIHZhbHVlLAogICAgICAkZXZlbnQKICAgIH0pIHsKICAgICAgLy8g57yW6L6R6aG16Z2i5oqK5Yig6ZmkIOeahOWNleS9jUlE5a2Y5YKo5LiL5p2lCiAgICAgIGlmICghIXRoaXMuYmFzZV9nb29kc19pZCkgewogICAgICAgIGNvbnN0IHVuaXREYXRhID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5iYXNlX2Zvcm0udW5pdERhdGEpOwogICAgICAgIHRoaXMuYmFzZV9mb3JtLmRlbFVuaXRJZHMgPSB1bml0RGF0YS5tYXAoaXRlbSA9PiBpdGVtLnVuaXRJZCk7CgogICAgICAgIGlmICh0aGlzLmJhc2VfZm9ybS5zcGVjVHlwZSA9PT0gMSkgewogICAgICAgICAgY29uc3Qgc3BlY011bHRpcGxlID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5iYXNlX2Zvcm0uc3BlY011bHRpcGxlKTsKICAgICAgICAgIHRoaXMuYmFzZV9mb3JtLmRlbFNwZWNTa3VJZHMgPSBzcGVjTXVsdGlwbGUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7CiAgICAgICAgfSAvL+aKiuaJgOacieeahOWNleS9jeWIoOmZpO+8jOmHjeaWsOiuvue9ruS4gOS4quaWsOeahOS4u+WNleS9jQoKCiAgICAgICAgaWYgKHRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQuaWQpIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLmJhc2VfZm9ybS5tYXN0ZXJVbml0LmlkOwogICAgICAgIH0KICAgICAgfQoKICAgICAgY29uc3QgdmFsID0gdmFsdWU7CiAgICAgIHRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQudW5pdE5hbWUgPSB0aGlzLnVuaXRfb3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gdmFsKS51bml0TmFtZTsgLy8g6YeN572u6L6F5Yqp5Y2V5L2NCgogICAgICB0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0ID0gW107CiAgICAgIHRoaXMuc3BlY190YWJsZV9EYXRhID0gdGhpcy5zcGVjX3RhYmxlX0RhdGEubWFwKGl0ZW0gPT4gewogICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5iYXJDb2RlLmZpbmRJbmRleChpdGVtRiA9PiBpdGVtRi5pc01hc3RlciA9PT0gNSk7CiAgICAgICAgY29uc3QgYmFyT2JqID0geyAuLi50aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLmJhc2VfZm9ybS5tYXN0ZXJVbml0KSwKICAgICAgICAgIGJhckNvZGU6IGl0ZW0uYmFyQ29kZVtpbmRleF0uYmFyQ29kZSB8fCAiIgogICAgICAgIH07CiAgICAgICAgdGhpcy4kc2V0KGl0ZW0uYmFyQ29kZSwgaW5kZXgsIGJhck9iaik7CiAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgIH0pOwogICAgfSwKCiAgICAvLyDovoXliqnljZXkvY3liIfmjaIKICAgIGJyYW5jaFVuaXRDaGFuZ2UodmFsKSB7CiAgICAgIHRoaXMuYXNzaXN0X2Zvcm0udW5pdE5hbWUgPSB0aGlzLnVuaXRfb3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gdmFsKS51bml0TmFtZTsKICAgIH0sCgogICAgLy8g6I635Y+W6K+m5oOFCiAgICBhc3luYyBnZXRHb29kc0Jhc2ljSW5mb0J5SWQoKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBnZXRHb29kc0Jhc2ljSW5mb0J5SWQodGhpcy5iYXNlX2dvb2RzX2lkKTsKICAgICAgdGhpcy5pc0VkaXRTcGVjID0gZGF0YS5pc0VkaXRTcGVjOwogICAgICBjb25zdCB1bml0RGF0YSA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKGRhdGEudW5pdERhdGEpOwogICAgICBjb25zdCBtYXN0ZXJVbml0ID0gdW5pdERhdGEuZmluZChpdGVtID0+IGl0ZW0uaXNNYXN0ZXIgPT09IDUpIHx8IHt9OwogICAgICBjb25zdCBicmFuY2hVbml0ID0gdW5pdERhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc01hc3RlciA9PT0gNCk7CiAgICAgIHRoaXMuaXNOZXcgPSBtYXN0ZXJVbml0LmlzTmV3IHx8IDQ7CiAgICAgIHRoaXMuYmFzZV9mb3JtID0geyAuLi5kYXRhLAogICAgICAgIG5vU2FsZXNTaG9wOiBkYXRhLm5vU2FsZXNTaG9wID8gZGF0YS5ub1NhbGVzU2hvcC5zcGxpdCgiLCIpLm1hcChpdGVtID0+IHBhcnNlSW50KGl0ZW0pKSA6IFtdLAogICAgICAgIG1hc3RlclVuaXQ6IG1hc3RlclVuaXQsCiAgICAgICAgZGVsVW5pdElkczogW10sCiAgICAgICAgZGVsU3BlY1NrdUlkczogW10sCiAgICAgICAgc3BlY1R5cGU6IGRhdGEuc3BlY1R5cGUsCiAgICAgICAgYnJhbmNoVW5pdDogYnJhbmNoVW5pdCwKICAgICAgICBjYXRlZ29yeVBhdGg6IGRhdGEuY2F0ZWdvcnlQYXRoID8gZGF0YS5jYXRlZ29yeVBhdGguc3BsaXQoIiwiKS5tYXAoaXRlbSA9PiB7CiAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaXRlbSk7CiAgICAgICAgfSkgOiBbXSwKICAgICAgICBhc3Npc3RDYXRlZ29yeVBhdGg6IGRhdGEuYXNzaXN0Q2F0ZWdvcnlQYXRoIHx8IFtdCiAgICAgIH07CgogICAgICBpZiAoZGF0YS5hc3Npc3RDYXRlZ29yeVBhdGggJiYgZGF0YS5hc3Npc3RDYXRlZ29yeVBhdGgubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5hc3Npc3RfY2F0ZSA9IGRhdGEuYXNzaXN0Q2F0ZWdvcnlQYXRoLm1hcChpdGVtID0+IHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGFzc2lzdENhdGVnb3J5UGF0aDogaXRlbS5zcGxpdCgiLCIpLm1hcChpdGVtZSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGl0ZW1lKTsKICAgICAgICAgICAgfSkKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hc3Npc3RfY2F0ZSA9IFt7CiAgICAgICAgICBhc3Npc3RDYXRlZ29yeVBhdGg6IFtdCiAgICAgICAgfV07CiAgICAgIH0KCiAgICAgIHRoaXMuaW1nX2xpc3QgPSBkYXRhLmltYWdlcy5tYXAoaXRlbSA9PiB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG5hbWU6ICIiLAogICAgICAgICAgdXJsOiBpdGVtCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIHRoaXMuZHluYW1pY1RhZ3MgPSBkYXRhLnRhZyA/IGRhdGEudGFnLnNwbGl0KCIsIikgOiBbXTsKICAgICAgdGhpcy5iYXNlX2Zvcm0uYnJhbmROYW1lID0gZGF0YS5icmFuZFRpdGxlOyAvLyDlpJrop4TmoLzmlbDmja4KCiAgICAgIGlmIChwYXJzZUludCh0aGlzLmJhc2VfZm9ybS5zcGVjVHlwZSkgPT09IDIpIHsKICAgICAgICB0aGlzLnNrdV9saXN0ID0gZGF0YS5zcGVjR3JvdXAubWFwKGl0ZW0gPT4gewogICAgICAgICAgY29uc3Qgc3BlY0RhdGEgPSB0aGlzLnNwZWNfZGF0YS5maW5kKGl0ZW1GID0+IGl0ZW1GLmlkID09PSBpdGVtLmdyb3VwU3BlYy5zcGVjSWQpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc3BlY19kYXRhX2NoaWxkOiBzcGVjRGF0YSA/IHNwZWNEYXRhLmNoaWxkIDogW10sCiAgICAgICAgICAgIGdyb3VwU3BlY0lkOiBpdGVtLmdyb3VwU3BlYy5zcGVjSWQsCiAgICAgICAgICAgIGdyb3VwU3BlY05hbWU6IGl0ZW0uZ3JvdXBTcGVjLnNwZWNOYW1lLAogICAgICAgICAgICBzZWxmX3NwZWNfdmFsOiAiIiwKICAgICAgICAgICAgc2VsZl9zcGVjX2lucHV0OiBmYWxzZSwKICAgICAgICAgICAgcGFyYW1zOiBpdGVtLnBhcmFtcy5tYXAoaXRlbUMgPT4gewogICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBpZDogaXRlbUMuc3BlY1ZhbHVlSWQsCiAgICAgICAgICAgICAgICBzcGVjTmFtZTogaXRlbUMuc3BlY1ZhbHVlTmFtZSwKICAgICAgICAgICAgICAgIGdyb3VwU3BlY0lkOiBpdGVtLmdyb3VwU3BlYy5zcGVjSWQKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLnNwZWNfdGFibGVfRGF0YSA9IGRhdGEuc3BlY011bHRpcGxlLm1hcChpdGVtID0+IHsKICAgICAgICAgIGxldCBiYXJDb2RlQSA9IFtdOwoKICAgICAgICAgIGZvciAobGV0IGIgaW4gaXRlbS5iYXJDb2RlKSB7CiAgICAgICAgICAgIGxldCB1bml0QiA9IGRhdGEudW5pdERhdGEuZmluZChpdGVtRiA9PiBwYXJzZUludChpdGVtRi51bml0SWQpID09PSBwYXJzZUludChiKSk7CgogICAgICAgICAgICBpZiAodW5pdEIpIHsKICAgICAgICAgICAgICBiYXJDb2RlQS5wdXNoKHsgLi4udW5pdEIsCiAgICAgICAgICAgICAgICBiYXJDb2RlOiBpdGVtLmJhckNvZGVbYl0sCiAgICAgICAgICAgICAgICB3ZWlnaHQ6IGl0ZW0ud2VpZ2h0W2JdLAogICAgICAgICAgICAgICAgaXNEZWZhdWx0OiBpdGVtLmlzRGVmYXVsdFtiXQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmFyQ29kZTogYmFyQ29kZUEsCiAgICAgICAgICAgIGlzRWRpdFNwZWM6IGl0ZW0uaXNFZGl0U3BlYywKICAgICAgICAgICAgaW52ZW50b3J5OiBpdGVtLmludmVudG9yeSAtIDAsCiAgICAgICAgICAgIHNwZWNHcm91cEhhc2g6IGl0ZW0uc3BlY0dyb3VwSGFzaCwKICAgICAgICAgICAgaWRfRDogaXRlbS5pZCwKICAgICAgICAgICAgdW5pdElkOiBpdGVtLnVuaXRJZCwKICAgICAgICAgICAgc3BlY05hbWU6IGl0ZW0uc3BlY0dyb3VwLm1hcChpdGVtUCA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1QLnNwZWNWYWx1ZU5hbWU7CiAgICAgICAgICAgIH0pLmpvaW4oIl8iKSwKICAgICAgICAgICAgaWQ6IGl0ZW0uc3BlY0dyb3VwLm1hcChpdGVtUCA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1QLnNwZWNWYWx1ZUlkOwogICAgICAgICAgICB9KS5qb2luKCJfIiksCiAgICAgICAgICAgIGdyb3VwU3BlY0lkOiBpdGVtLnNwZWNHcm91cC5tYXAoaXRlbVAgPT4gewogICAgICAgICAgICAgIHJldHVybiBpdGVtUC5zcGVjSWQ7CiAgICAgICAgICAgIH0pLmpvaW4oIl8iKSwKICAgICAgICAgICAgZ3JvdXBTcGVjTmFtZTogaXRlbS5zcGVjR3JvdXAubWFwKGl0ZW1QID0+IHsKICAgICAgICAgICAgICByZXR1cm4gaXRlbVAuc3BlY05hbWU7CiAgICAgICAgICAgIH0pLmpvaW4oIl8iKSwKICAgICAgICAgICAgc3BlY0ltYWdlOiB7CiAgICAgICAgICAgICAgbmFtZTogIiIsCiAgICAgICAgICAgICAgdXJsOiBpdGVtLnNwZWNJbWFnZQogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9CiAgICB9LAoKICAgIC8vIOWPkeW4g+WVhuWTgQogICAgYXN5bmMgc3VibWl0R29vZHMoKSB7CiAgICAgIGlmICghdGhpcy5iYXNlX2Zvcm0udGl0bGUudHJpbSgpKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLllYblk4HlkI3np7DkuI3og73kuLrnqboiKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmICghdGhpcy5iYXNlX2Zvcm0uY2F0ZWdvcnlQYXRoLmxlbmd0aCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi5ZWG5ZOB5YiG57G75LiN6IO95Li656m6Iik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAoIXRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQudW5pdElkKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fpgInmi6nln7rmnKzljZXkvY0iKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIHRoaXMuJHJlZnNbImJhc2VfZm9ybSJdLnZhbGlkYXRlKGFzeW5jIHZhbGlkID0+IHsKICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgIGxldCBzcGVjR3JvdXAgPSBbXTsKICAgICAgICAgIGxldCBzcGVjTXVsdGlwbGUgPSBbXTsKCiAgICAgICAgICBpZiAoIXRoaXMuYmFzZV9mb3JtLmltYWdlcy5sZW5ndGgpIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fkuIrkvKDllYblk4Hlm77niYciKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICh0aGlzLmJhc2VfZm9ybS5tYXN0ZXJVbml0LndlaWdodCA8IDApIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLllYblk4Hph43ph4/kuI3og73kuLrotJ/mlbAiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICh0aGlzLnNwZWNfdGFibGVfRGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIC8vIOWkmuinhOagvAogICAgICAgICAgICB0aGlzLmJhc2VfZm9ybS5zcGVjVHlwZSA9IDI7CiAgICAgICAgICAgIHNwZWNHcm91cCA9IHRoaXMuc2t1X2xpc3QubWFwKGl0ZW0gPT4gewogICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBncm91cFNwZWM6IHsKICAgICAgICAgICAgICAgICAgc3BlY05hbWU6IGl0ZW0uZ3JvdXBTcGVjTmFtZSwKICAgICAgICAgICAgICAgICAgc3BlY0lkOiBpdGVtLmdyb3VwU3BlY0lkCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcGFyYW1zOiBpdGVtLnBhcmFtcy5tYXAoaXRlbSA9PiB7CiAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgc3BlY1ZhbHVlSWQ6IGl0ZW0uaWQsCiAgICAgICAgICAgICAgICAgICAgc3BlY1ZhbHVlTmFtZTogaXRlbS5zcGVjTmFtZQogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgc3BlY011bHRpcGxlID0gdGhpcy5zcGVjX3RhYmxlX0RhdGEubWFwKChpdGVtLCBpbmRleCkgPT4gewogICAgICAgICAgICAgIGxldCBzcGVjVmFsID0gW107IC8vIOWxnuaAp2lkCgogICAgICAgICAgICAgIGxldCBzcGVjSWQgPSBbXTsgLy8g5bGe5oCn57uEaWQKCiAgICAgICAgICAgICAgbGV0IHNwZWNOYW1lID0gW107IC8vIOWxnuaAp+e7hOWQjQoKICAgICAgICAgICAgICBsZXQgc3BlY1ZhbHVlTmFtZSA9IFtdOyAvLyDlsZ7mgKflkI0KCiAgICAgICAgICAgICAgaWYgKChpdGVtLmlkICsgIiIpLmluZGV4T2YoIl8iKSA+IC0xKSB7CiAgICAgICAgICAgICAgICBzcGVjVmFsID0gaXRlbS5pZC5zcGxpdCgiXyIpOwogICAgICAgICAgICAgICAgc3BlY0lkID0gaXRlbS5ncm91cFNwZWNJZC5zcGxpdCgiXyIpOwogICAgICAgICAgICAgICAgc3BlY1ZhbHVlTmFtZSA9IGl0ZW0uc3BlY05hbWUuc3BsaXQoIl8iKTsKICAgICAgICAgICAgICAgIHNwZWNOYW1lID0gaXRlbS5ncm91cFNwZWNOYW1lLnNwbGl0KCJfIik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNwZWNWYWwgPSBbaXRlbS5pZF07CiAgICAgICAgICAgICAgICBzcGVjSWQgPSBbaXRlbS5ncm91cFNwZWNJZF07CiAgICAgICAgICAgICAgICBzcGVjTmFtZSA9IFtpdGVtLmdyb3VwU3BlY05hbWVdOwogICAgICAgICAgICAgICAgc3BlY1ZhbHVlTmFtZSA9IFtpdGVtLnNwZWNOYW1lXTsKICAgICAgICAgICAgICB9IC8vIOadoeeggQoKCiAgICAgICAgICAgICAgbGV0IGJhckNvZGVPID0ge307CiAgICAgICAgICAgICAgbGV0IGlzRGVmYXVsdE8gPSB7fTsKICAgICAgICAgICAgICBsZXQgd2VpZ2h0TyA9IHt9OwogICAgICAgICAgICAgIGl0ZW0uYmFyQ29kZS5mb3JFYWNoKGl0ZW1CID0+IHsKICAgICAgICAgICAgICAgIGJhckNvZGVPW2l0ZW1CLnVuaXRJZF0gPSBpdGVtQi5iYXJDb2RlOwogICAgICAgICAgICAgICAgaXNEZWZhdWx0T1tpdGVtQi51bml0SWRdID0gaXRlbUIuaXNEZWZhdWx0OwogICAgICAgICAgICAgICAgd2VpZ2h0T1tpdGVtQi51bml0SWRdID0gaXRlbUIud2VpZ2h0OwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGxldCByZXR1cm5QYXJhbXMgPSB7CiAgICAgICAgICAgICAgICBzcGVjSW1hZ2U6IGl0ZW0uc3BlY0ltYWdlLnVybCwKICAgICAgICAgICAgICAgIHNwZWNHcm91cDogc3BlY1ZhbC5tYXAoKGl0ZW1WLCBpbmRleFYpID0+IHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICBzcGVjSWQ6IHNwZWNJZFtpbmRleFZdLAogICAgICAgICAgICAgICAgICAgIHNwZWNOYW1lOiBzcGVjTmFtZVtpbmRleFZdLAogICAgICAgICAgICAgICAgICAgIHNwZWNWYWx1ZU5hbWU6IHNwZWNWYWx1ZU5hbWVbaW5kZXhWXSwKICAgICAgICAgICAgICAgICAgICBzcGVjVmFsdWVJZDogaXRlbVYKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgYmFyQ29kZTogYmFyQ29kZU8sCiAgICAgICAgICAgICAgICBpc0RlZmF1bHQ6IGlzRGVmYXVsdE8sCiAgICAgICAgICAgICAgICB3ZWlnaHQ6IHdlaWdodE8KICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGFyYW1zLmlkKSB7CiAgICAgICAgICAgICAgICByZXR1cm5QYXJhbXMuc3BlY0dyb3VwSGFzaCA9IGl0ZW0uc3BlY0dyb3VwSGFzaDsKICAgICAgICAgICAgICAgIHJldHVyblBhcmFtcy5pZCA9IGl0ZW0uaWRfRDsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIHJldHVybiByZXR1cm5QYXJhbXM7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5iYXNlX2Zvcm0uc3BlY1R5cGUgPSAxOwogICAgICAgICAgfQoKICAgICAgICAgIGxldCB1bml0RGF0YUQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0KTsKICAgICAgICAgIHVuaXREYXRhRC51bnNoaWZ0KHRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQpOwogICAgICAgICAgY29uc3QgdW5pdERhdGFBID0gdW5pdERhdGFELm1hcChpdGVtID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMuYmFzZV9mb3JtLnNwZWNUeXBlID09PSAyKSB7CiAgICAgICAgICAgICAgaXRlbS5iYXJDb2RlID0gIiI7CiAgICAgICAgICAgICAgaXRlbS5pc0RlZmF1bHQgPSA0OwogICAgICAgICAgICAgIGl0ZW0ud2VpZ2h0ID0gIiI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VfZm9ybS5kZWxTcGVjU2t1SWRzLmluZGV4T2YoaXRlbS5zcGVjR3JvdXBIYXNoKSAhPT0gLTEgJiYgdGhpcy5iYXNlX2Zvcm0uc3BlY1R5cGUgPT09IDEpIHsKICAgICAgICAgICAgICBkZWxldGUgaXRlbS5pZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgICB9KTsgLy8g5Ymv5YiG57G75pWw5o2u57uE6KOFCgogICAgICAgICAgbGV0IGFzc2lzdENhdGVnb3J5UGF0aCA9IFtdOwogICAgICAgICAgbGV0IGFzc2lzdENhdGVnb3J5SWQgPSBbXTsgLy8g6L+H5ruk5Y+q5pyJ6YCJ5oup5YiG57G755qE5pWw5o2uCgogICAgICAgICAgY29uc3QgYXNzaXN0Q2F0ZSA9IHRoaXMuYXNzaXN0X2NhdGUuZmlsdGVyKGl0ZW0gPT4gISFpdGVtLmFzc2lzdENhdGVnb3J5UGF0aC5sZW5ndGgpOwogICAgICAgICAgYXNzaXN0Q2F0ZS5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgICAgICBhc3Npc3RDYXRlZ29yeVBhdGgucHVzaChpdGVtLmFzc2lzdENhdGVnb3J5UGF0aC5qb2luKCIsIikpOwogICAgICAgICAgICBhc3Npc3RDYXRlZ29yeUlkLnB1c2goaXRlbS5hc3Npc3RDYXRlZ29yeVBhdGhbaXRlbS5hc3Npc3RDYXRlZ29yeVBhdGgubGVuZ3RoIC0gMV0pOwogICAgICAgICAgfSk7CiAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7CiAgICAgICAgICAgIG1lcmNoYW50SWQ6IHRoaXMuYmFzZV9mb3JtLm1lcmNoYW50SWQsCiAgICAgICAgICAgIGNhdGVnb3J5UGF0aDogdGhpcy5iYXNlX2Zvcm0uY2F0ZWdvcnlQYXRoLmpvaW4oIiwiKSwKICAgICAgICAgICAgYXNzaXN0Q2F0ZWdvcnlQYXRoOiBhc3Npc3RDYXRlZ29yeVBhdGgsCiAgICAgICAgICAgIGNhdGVnb3J5SWQ6IHRoaXMuYmFzZV9mb3JtLmNhdGVnb3J5SWQsCiAgICAgICAgICAgIGFzc2lzdENhdGVnb3J5SWQ6IGFzc2lzdENhdGVnb3J5SWQuam9pbigiLCIpLAogICAgICAgICAgICB0aXRsZTogdGhpcy5iYXNlX2Zvcm0udGl0bGUsCiAgICAgICAgICAgIHN0b3JhZ2U6IHRoaXMuYmFzZV9mb3JtLnN0b3JhZ2UsCiAgICAgICAgICAgIGRlbFVuaXRJZHM6IHRoaXMuYmFzZV9mb3JtLmRlbFVuaXRJZHMsCiAgICAgICAgICAgIGRlbFNwZWNTa3VJZHM6IHRoaXMuYmFzZV9mb3JtLmRlbFNwZWNTa3VJZHMsCiAgICAgICAgICAgIHNwZWNUeXBlOiB0aGlzLmJhc2VfZm9ybS5zcGVjVHlwZSwKICAgICAgICAgICAgc3BlY0dyb3VwOiBzcGVjR3JvdXAsCiAgICAgICAgICAgIHNwZWNNdWx0aXBsZTogc3BlY011bHRpcGxlLAogICAgICAgICAgICB1bml0RGF0YTogdW5pdERhdGFBLAogICAgICAgICAgICBkZXNjcmliZTogdGhpcy5iYXNlX2Zvcm0uZGVzY3JpYmUsCiAgICAgICAgICAgIGNvZGU6IHRoaXMuYmFzZV9mb3JtLmNvZGUsCiAgICAgICAgICAgIGJhckNvZGU6IHRoaXMuYmFzZV9mb3JtLmJhckNvZGUsCiAgICAgICAgICAgIGV4cGlyZVRpbWU6IHRoaXMuYmFzZV9mb3JtLmV4cGlyZVRpbWUsCiAgICAgICAgICAgIGlzRXE6IHRoaXMuYmFzZV9mb3JtLmlzRXEsCiAgICAgICAgICAgIGJyYW5kSWQ6IHRoaXMuYmFzZV9mb3JtLmJyYW5kSWQsCiAgICAgICAgICAgIHRhZzogdGhpcy5keW5hbWljVGFncy5qb2luKCIsIiksCiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmJhc2VfZm9ybS5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgbm9TYWxlc1Nob3A6IHRoaXMuYmFzZV9mb3JtLm5vU2FsZXNTaG9wLmpvaW4oIiwiKSwKICAgICAgICAgICAgaW1hZ2VzOiB0aGlzLmJhc2VfZm9ybS5pbWFnZXMKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgbGV0IHRhcmdldCA9IHt9OwoKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXJhbXMuaWQpIHsKICAgICAgICAgICAgICB0YXJnZXQgPSBhd2FpdCBlZGl0R29vZHNCYXNpYyh0aGlzLmJhc2VfZ29vZHNfaWQsIHBhcmFtcyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGFyZ2V0ID0gYXdhaXQgYWRkR29vZHNCYXNpYyhwYXJhbXMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb25zdCBkYXRhID0gdGFyZ2V0OwogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgICAgIG1lc3NhZ2U6ICLmj5DkuqTmiJDlip8iCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBhd2FpdCB0aGlzLmRlbFBhdXNlU2F2ZSgpOwogICAgICAgICAgICB0aGlzLiRjbG9zZUN1cnJlbnRHb0VkaXQoYC9nb29kcy9tYW5hZ2VHL0Jhc2VEYXRhTGlzdGApOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAoKICAgIC8vIOWVhuWTgeWIhuexu+mAieaLqQogICAgY2F0ZWdvcnlDaGFuZ2UodmFsLCByb3cpIHsKICAgICAgLy8gdGhpcy5iYXNlX2Zvcm0uY2F0ZWdvcnlQYXRoID0gcm93OwogICAgICB0aGlzLmJhc2VfZm9ybS5jYXRlZ29yeUlkID0gdmFsW3ZhbC5sZW5ndGggLSAxXTsgLy8gdGhpcy5iYXNlX2Zvcm0uY2F0ZWdvcnlQYXRoLnB1c2godGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUoZ29vZHNJdGVtKSk7CiAgICB9LAoKICAgIC8vIOWTgeeJjOmAieaLqQogICAgYnJhbmRDb25maXJtKHZhbCkgewogICAgICBpZiAodmFsLmxlbmd0aCA+IDEpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup5LiA5Liq5ZOB54mM77yBIgogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgdGhpcy5iYXNlX2Zvcm0uYnJhbmROYW1lID0gdmFsWzBdLnRpdGxlOwogICAgICB0aGlzLmJhc2VfZm9ybS5icmFuZElkID0gdmFsWzBdLmlkOwogICAgfSwKCiAgICBhc3luYyBnZXRBbGxNZXJjaGFudExpc3QoKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBnZXRBbGxNZXJjaGFudExpc3QoKTsKICAgICAgdGhpcy5zZWxfY2l0aWVzID0gZGF0YTsKICAgIH0sCgogICAgLy8g5ZWG5ZOB5YiG57G75YiX6KGoCiAgICBhc3luYyBnZXRBbGxDYXRlZ29yeVBvc3QoKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBnZXRBbGxDYXRlZ29yeVBvc3QoewogICAgICAgIGVuYWJsZVN0YXR1czogNQogICAgICB9KTsKCiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShkYXRhKSA9PT0gInt9IikgewogICAgICAgIHRoaXMuY2F0ZWdvcnlfZGF0YSA9IFtdOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuY2F0ZWdvcnlfZGF0YSA9IGRhdGE7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6Ieq5a6a5LmJ6YCJ5oup5Y2z5pS55Y+YCiAgICBjbGlja0NoYW5nZShldmVudCkgewogICAgICBldmVudC50YXJnZXQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmZpcnN0Q2hpbGQuY2xpY2soKTsKICAgIH0sCgogICAgZGVsQXNzaXN0Q2F0ZShpbmRleCkgewogICAgICB0aGlzLmFzc2lzdF9jYXRlLnNwbGljZShpbmRleCwgMSk7CiAgICB9LAoKICAgIGFkZEFzc2lzdENhdGUoKSB7CiAgICAgIHRoaXMuYXNzaXN0X2NhdGUucHVzaCh7CiAgICAgICAgYXNzaXN0Q2F0ZWdvcnlQYXRoOiBbXQogICAgICB9KTsKICAgIH0sCgogICAgLy8g5LiL5LiA5q2lCiAgICB0YWdOZXh0KCkgewogICAgICBpZiAodGhpcy5wYWdlX3RhYnMgPT09ICIxIikgewogICAgICAgIHRoaXMuJHJlZnNbImJhc2VfZm9ybSJdLnZhbGlkYXRlKHZhbGlkID0+IHsKICAgICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgICBpZiAoIXRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQudW5pdElkKSB7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fpgInmi6nln7rmnKzljZXkvY0iKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMucGFnZV90YWJzID0gIjIiOwogICAgICAgICAgICB0aGlzLnN0ZXBfYWN0aXZlID0gMjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VfdGFicyA9PT0gIjIiKSB7CiAgICAgICAgaWYgKCF0aGlzLmJhc2VfZm9ybS5pbWFnZXMubGVuZ3RoKSB7CiAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuivt+S4iuS8oOWVhuWTgeWbvueJhyIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5wYWdlX3RhYnMgPSAiMyI7CiAgICAgICAgdGhpcy5zdGVwX2FjdGl2ZSA9IDM7CiAgICAgIH0KICAgIH0sCgogICAgLy8g5LiK5LiA5q2lCiAgICB0YWdMYXN0KCkgewogICAgICBpZiAodGhpcy5wYWdlX3RhYnMgPT09ICIzIikgewogICAgICAgIHRoaXMuc3RlcF9hY3RpdmUgPSAyOwogICAgICAgIHRoaXMucGFnZV90YWJzID0gIjIiOwogICAgICB9IGVsc2UgaWYgKHRoaXMucGFnZV90YWJzID09PSAiMiIpIHsKICAgICAgICB0aGlzLnBhZ2VfdGFicyA9ICIxIjsKICAgICAgICB0aGlzLnN0ZXBfYWN0aXZlID0gMTsKICAgICAgfQogICAgfSwKCiAgICB0YWJDbGljaygpIHsKICAgICAgaWYgKHRoaXMucGFnZV90YWJzID09PSAiMSIpIHsKICAgICAgICB0aGlzLnN0ZXBfYWN0aXZlID0gMTsKICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VfdGFicyA9PT0gIjIiKSB7CiAgICAgICAgdGhpcy5zdGVwX2FjdGl2ZSA9IDI7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdlX3RhYnMgPT09ICIzIikgewogICAgICAgIHRoaXMuc3RlcF9hY3RpdmUgPSAzOwogICAgICB9CiAgICB9LAoKICAgIC8vIOaKhOeggeWVhuWTgeWIh+aNogogICAgaXNFcUNoYW5nZSh2YWwpIHsKICAgICAgaWYgKHRoaXMuaXNFZGl0U3BlYyAhPT0gNCAmJiB2YWwgPT09IDUpIHsKICAgICAgICB0aGlzLmJhc2VfZm9ybS5tYXN0ZXJVbml0ID0gewogICAgICAgICAgaXNEZWZhdWx0OiA1LAogICAgICAgICAgaXNNYXN0ZXI6IDUsCiAgICAgICAgICB3ZWlnaHQ6ICIiLAogICAgICAgICAgdW5pdE5hbWU6ICIiLAogICAgICAgICAgdW5pdElkOiAiIiwKICAgICAgICAgIGJhckNvZGU6ICIiCiAgICAgICAgfTsKICAgICAgICB0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0ID0gW107CiAgICAgIH0KICAgIH0KCiAgfQp9Ow=="},{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgyBA;AACA;AACA;AACA,6D,CACA;;AACA;AACA;AACA;AACA,SACAA,UADA,EAEAC,UAFA,EAGAC,gBAHA,EAIAC,qBAJA,EAKAC,cALA,EAMAC,aANA,EAOAC,kBAPA,QAQA,aARA;AASA;AACA;AACA;EACAC,mBADA;EAEAC;IACA;IACAC,aAFA;IAGAC,OAHA;IAIAC,WAJA;IAKAC,OALA;IAMAC,QANA;IAOAC;EAPA,CAFA;;EAWAC;IACA;MACA;QACAC;MACA,CAFA,MAEA;QACAA;MACA;IACA,CANA;;IAOA;MACA;MACAC,iBAFA;MAEA;MACAC,kBAHA;MAGA;MACAC,sBAJA;MAIA;MACAC,iBALA;MAKA;MACAC,mBANA;MAMA;MACAC,4BAPA;MAOA;MACAC,qBARA;MAQA;MACAC,aATA;MASA;MACAC,mBAVA;MAUA;MACAC,mBAXA;MAWA;MACAC,WACA;MACA;QACAF,mBADA;QAEAG,eAFA;QAGAX,iBAHA;QAIAE,sBAJA;QAKAU,iBALA;QAMAC;MANA,CAFA,CAZA;MAuBAC,gBAvBA;MAuBA;MACAC,mBAxBA;MAyBAC,WAzBA;MA0BAC,gBA1BA;MA0BA;MACAC,YA3BA;MA2BA;MACAC,cA5BA;MA6BAC,YA7BA;MA8BA;MACAC,eA/BA;MAgCAC,mBAhCA;MAiCAC,cAjCA;MAkCA;MACAC,mBAnCA;MAoCAC,wBApCA;MAqCAC,eArCA;MAsCAC,gBAtCA;MAuCA;MACAC;QACAC,YADA;QAEAC,WAFA;QAGAC,YAHA;QAIAC,UAJA;QAKAC,UALA;QAMAC,WANA;QAOAC;MAPA,CAxCA;MAiDAC,gBAjDA;MAiDA;MACAC,eAlDA;MAkDA;MACAC,oBAnDA;MAoDAC;QACA;QACAC,WAFA;QAEA;QACAC,cAHA;QAGA;QACAC,iBAJA;QAIA;QACAC,cALA;QAMAC,aANA;QAOAC,gBAPA;QAOA;QACAC,sBARA;QAQA;QACAC,eATA;QAUAC,YAVA;QAWAC,OAXA;QAWA;QACAC;UACAnB,YADA;UAEAD,WAFA;UAGAE,UAHA;UAIAH,YAJA;UAKAI,UALA;UAMAC;QANA,CAZA;QAoBAiB,YApBA;QAqBAC,WArBA;QAsBAC,SAtBA;QAuBAC,QAvBA;QAwBApB,WAxBA;QAwBA;QACAqB,cAzBA;QA0BAC,oBA1BA;QA2BAC,cA3BA;QA4BAC,WA5BA;QA6BAC,OA7BA;QA8BAC,eA9BA;QA+BAC,aA/BA;QAgCAC,UAhCA;QAiCAC,cAjCA,CAiCA;;MAjCA,CApDA;MAuFAC;QACA;QACAX,QACA;UAAAY;UAAAC;UAAAC;QAAA,CADA,CAFA;QAKAZ,aACA;UAAAU;UAAAC;UAAAC;QAAA,CADA,CALA;QAQAV,aACA;UAAAQ;UAAAC;UAAAC;QAAA,CADA,CARA;QAWAjB;UAAAkB;UAAAD;QAAA;MAXA,CAvFA;MAqGAE;QACAP,SACA;UACAQ,aADA;UAEAL,cAFA;UAGAC,kBAHA;UAIAC;QAJA,CADA;MADA,CArGA;MA+GAI,gBA/GA;MAgHAC,aAhHA;MAgHA;MACAC,QAjHA;MAiHA;MACAC,mBAlHA;MAmHAC,cAnHA;MAoHAC,iBApHA;MAoHA;MACAC;QACAC,cADA;QAEAC,WAFA;QAGAC;MAHA,CArHA;MA0HAC,cACA;QACAnC;MADA,CADA,CA1HA;MA+HAoC,cA/HA;MAgIAC;IAhIA;EAkIA,CArJA;;EAsJA;IACA;IACA;IACA;IACA,iCAJA,CAMA;;IACA,gCAPA,CAQA;;IACA;IACA;;IACA;MACA;MACA;IACA,CAHA,MAGA;MACA;MACA;IACA;EACA,CAxKA;;EAyKA;IACA;IACA;IACA;IACA;;IACA;MACA;MACA;IACA,CAHA,MAGA;MACA;MACA;IACA;EACA,CArLA;;EAsLAC;IACA;IACAC;MACA;MACA;QACA;UACA;UACAC;YACAC;cACA;gBACAC;cACA,CAFA,MAEA;gBACA;kBACAA;gBACA;cACA;YACA,CARA;UASA,CAVA;UAWA;QACA;MACA,CAhBA,MAgBA;QACA;UACA;YACA;cACAD;YACA,CAFA;UAGA,CAJA,MAIA;YACA;YACA;cACA;gBACAA;cACA;YACA,CAJA;UAKA;QACA;MACA;IACA,CApCA;;IAqCA;IACA;MACA;QAAAzF;MAAA;QACA2F,OADA;QAEAC,YAFA;QAGAC;MAHA;MAMA;IACA,CA9CA;;IA+CAC;MACA;IACA,CAjDA;;IAkDA;IACAC;MACA;MACA;;MACA;QACA,sBACAC;UACA;QACA,CAFA,CADA,GAIA,EAJA;QAKAC;QACA;MACA;IACA,CA/DA;;IAgEA;IACA;MACA;IACA,CAnEA;;IAoEA;IACAC;MACA;IACA,CAvEA;;IAwEA;IACA;MACA,iBACA,iBADA;QAEAC,wBAFA;QAGAC,kCAHA;QAIAvC,qBAJA;QAKAsB;MALA;MAOA;QACAkB,kBADA;QAEArG;MAFA;MAIA;QACAwE,eADA;QAEAJ;MAFA;MAIA;IACA,CA1FA;;IA2FA;IACA;MACA;QACAiC;MADA;;MAIA;QACA;UACA7B,eADA;UAEAJ;QAFA;QAIA;MACA;IACA,CAxGA;;IAyGA;IACA;MACA;QAAApE;MAAA;QACAqG;MADA;MAIA;MACA,mBACA,OADA;QAEAtD,iDACA/C,iBADA,GAEA;MAJA;MAMA;QAAAgD;MAAA;MACA;MACA;MACA;;MACA;QACA;UACA;YACAxD,QADA;YAEA8G;UAFA;QAIA,CALA;MAMA;IACA,CAlIA;;IAoIA;IACAC;MACA,IACAP,qBACA,8DAFA,EAGA;QACA;MACA;;MACA;MACA,gDACAA,uBADA,GAEAA,YAFA,CARA,CAWA;MACA;;MACA;;MACA;QACA,2BADA,CAEA;QACA;;QACA,IACA,2BACAP,yCADA,CADA,EAIA;UACAe;UACA;QACA;MACA,CA1BA,CA2BA;MACA;;;MACA;QACA;UACA,qCACAC,sCADA;;UAGA;YACAhB;UACA;QACA,CAPA;MAQA;IACA,CA5KA;;IA6KA;IACA;IACA;IACA;IACAiB;MACA;MACAlB;QACAhG,QADA;QAEA8G;MAFA;MAIA;IACA,CAxLA;;IAyLA;IACAK;MACA;QACA;UACAjG,mBADA;UAEAN,sBAFA;UAGAF,iBAHA;UAIAW,eAJA;UAKAC,iBALA;UAMAC;QANA;MAQA,CATA,MASA;QACA,cACA,4BADA,EAEA,IAFA,EAGA;UACA6F,yBADA;UAEAC,sBAFA;UAGArC;QAHA,CAHA,EASAsC,IATA,CASA;UACA;YACApG,mBADA;YAEAN,sBAFA;YAGAF,iBAHA;YAIAW,eAJA;YAKAC,iBALA;YAMAC;UANA;QAQA,CAlBA,EAmBAgG,KAnBA,CAmBA,QAnBA;MAoBA;IACA,CA1NA;;IA2NA;IACAC;MACA;MACA;MACA,2BACAvB,oDADA;;MAGA;QACAD;QACA;QACA;QACA;MACA;;MACAA;MACAA;MACAA;MACA,uBAfA,CAgBA;MACA;MACA;MACA;IACA,CAhPA;;IAiPA;IACAyB;MACA;MACA;QACA,IACAxB,sBACA,+DAFA,EAGA;UACA;QACA;MACA,CAPA,EAFA,CAUA;;MACA;MACA;QACAA;UACA,SACA,QADA;YAEA3E;UAFA;QAIA,CALA;QAMA;MACA,CARA,EAZA,CAqBA;;MACA,+CAtBA,CAuBA;;MAEA;QACA,uCACAoG,6BADA;;QAGA;UACAzB;UACAA;UACAA;UACAA;QACA;MACA,CAVA;IAWA,CAtRA;;IAuRA;IACA0B;MACA;MACA;MACAjE;MACA;QACA,SACA,OADA;UAEAd,WAFA;UAGAF,UAHA;UAIAD;QAJA;MAMA,CAPA;;MAQA;QACA;QACA;QACA;QACA;QACA;;QACA;UACA;YACAmF;cACAvG,aACAwG,iCACA,GADA,GAEAA,8BAJA;cAKAvG,eACAuG,mCACA,GADA,GAEAA,gCARA;cASAC,uDATA;cAUAC,UACAF,8BACA,GADA,GAEAA,2BAbA;cAcAG;gBACAhI,QADA;gBAEA8G;cAFA,CAdA;cAkBAlE;YAlBA;YAoBAqF;UACA;QACA;;QACA;QACAC;;QACA;UACA;;UACA;YACAA;YACAC;UACA;QACA;;QACA;MACA,CAzCA,MAyCA;QACA;UACA,SACA,OADA;YAEAvF,4CAFA;YAGAoF;cACAhI,QADA;cAEA8G;YAFA;UAHA;QAQA,CATA;MAUA,CAXA,MAWA;QACA;MACA;IACA,CA3VA;;IA4VA;IACA;MACA;;MAEA;QACAd;QACA;QACA;MACA,CAPA,CAQA;;;MACA,yCACAC,qDADA;;MAGA;QACA,sBACA,yCADA;QAGAD;QACAA;QACA;QACA;MACA,CApBA,CAqBA;;;MACA;QAAAxF;MAAA;QACAuH,qCADA;QAEAK,8BAFA;QAGAC;MAHA;MAKArC;MACAA;QACA+B,uBADA;QAEAD,WAFA;QAGAzG;MAHA;MAKA2E;MACA,uBAlCA,CAmCA;;MACA;IACA,CAlYA;;IAmYA;IACAsC;MACA;MACA;MACA;MACA,wDACArC,eADA,EAJA,CAOA;;MACA;IACA,CA7YA;;IA8YA;IACAsC;MACA;MACA,qCACAC,MADA,CACAvC;QACA,OACA,+DADA;MAGA,CALA,EAMAwC,GANA,CAMAxC;QACA;UACA8B,uBADA;UAEAD,WAFA;UAGAzG;QAHA;MAKA,CAZA;MAaA2E,2DACAA,mDADA,EAEA,MAFA;MAIA;MACA,wBApBA,CAqBA;;MACA;IACA,CAtaA;;IAuaA;IACA0C;MACA;;MACA;QACA;UACA;QACA,CAFA;MAGA,CAJA,MAIA;QACA;MACA;IACA,CAjbA;;IAkbA;IACAC;MACA;MACA;MACA,6BACAC,8DADA;IAEA,CAxbA;;IAybA;IACAC;MACA;QACAzB,uBADA;QAEAC,sBAFA;QAGArC;MAHA,GAIAsC,IAJA,CAIA;QACA;UACA,oDACAkB,MADA,CACAvC,kDADA,EAEAwC,GAFA,CAEAK;YACA;UACA,CAJA;QAKA;;QACA,mDACA7C,oDADA;QAGA;QACAD;QACA;MACA,CAlBA;IAmBA,CA9cA;;IA+cA;IACA+C;MACA;QACA3B,uBADA;QAEAC,sBAFA;QAGArC;MAHA,GAIAsC,IAJA,CAIA;QACA,gCADA,CAEA;;QACA;MACA,CARA;IASA,CA1dA;;IA4dA;IACA;MACA;QAAA9G;QAAAwI;MAAA;QACA7C,OADA;QAEAC;MAFA;MAKA,+DANA,CAOA;IACA,CAreA;;IAseA;IACA6C;MACA;QACA;MACA,CAFA;;MAGA;QACA;MACA,CAFA,MAEA;QACA;MACA;;MACA;QACA;UACAjJ,QADA;UAEAkJ;QAFA;MAIA,CALA;;MAMA;QACA;QACA;MACA;IACA,CA1fA;;IA2fA;IACAC;MACA;QACA;MACA,CAFA;IAGA,CAhgBA;;IAigBAC;MACA;QACA;MACA,CAFA;IAGA,CArgBA;;IAsgBA;IACAC;MACA;IACA,CAzgBA;;IA0gBA;IACAC;MACA;MACA;QACA;MACA,CAFA;IAGA,CAhhBA;;IAihBA;IACAC;MACA;;MACA;QACA;MACA;;MACA;MACA;IACA,CAzhBA;;IA0hBA;IACA;IACA;IACAC;MACA,IACAhD,cACA,oDAFA,EAGA;QACA;MACA;;MACA;QACA,SACA,OADA;UAEA5D;QAFA;MAIA,CALA;MAMA;IACA,CA3iBA;;IA4iBA;IACA6G;MACA;MACA;MACA;QACAlH,YADA;QAEAC,WAFA;QAGAG,UAHA;QAIAE;MAJA;IAMA,CAtjBA;;IAujBA;IACA6G;MACA;MACA;MACA;MACA;IACA,CA7jBA;;IA8jBA;IACAC;MACA;QACA;QACA;MACA;;MACA;QACA;QACA;MACA;;MACA;QACA,0BACA,8DADA;QAEA;MACA,CAJA,MAIA;QACA;MACA;;MACA;MACA;QACA1D;QACA,SACA;QADA;MAGA,CALA;IAMA,CAtlBA;;IAulBA2D;MACA;MACA5D;QACAC;MACA,CAFA;MAGA;IACA,CA7lBA;;IA8lBA;IACA4D;MAAApE;MAAAqE;IAAA;MACA;MACA;QACA;QAEA;;QACA;UACA,6CACA,2BADA;UAGA;QACA,CATA,CAWA;;;QACA;UACA;QACA;MACA;;MAEA;MACA,4DACA7D,uBADA,EAEA1D,QAFA,CApBA,CAuBA;;MACA;MACA;QACA;QACA,iBACA,qDADA;UAEAK;QAFA;QAIA;QACA;MACA,CARA;IASA,CAjoBA;;IAkoBA;IACAmH;MACA,mDACA9D,uBADA,EAEA1D,QAFA;IAGA,CAvoBA;;IAwoBA;IACA;MACA;QAAA/B;MAAA;MAEA;MACA;MACA;MACA;MACA;MACA,mBACA,OADA;QAEAiD,gCACAjD,uDADA,GAEA,EAJA;QAKAoD,sBALA;QAMAT,cANA;QAOAC,iBAPA;QAQAF,uBARA;QASAG,sBATA;QAUAE,kCACA/C;UACA;QACA,CAFA,CADA,GAIA,EAdA;QAeAgD;MAfA;;MAiBA;QACA;UACA;YACAA;cACA;YACA,CAFA;UADA;QAKA,CANA;MAOA,CARA,MAQA;QACA,oBACA;UACAA;QADA,CADA;MAKA;;MAEA;QACA;UACAxD,QADA;UAEA8G;QAFA;MAIA,CALA;MAMA;MACA,2CAhDA,CAiDA;;MACA;QACA;UACA,qCACAkD,2CADA;UAGA;YACA9I,+CADA;YAEAG,kCAFA;YAGAC,sCAHA;YAIAZ,iBAJA;YAKAE,sBALA;YAMAW;cACA;gBACAuG,qBADA;gBAEAC,6BAFA;gBAGA1G;cAHA;YAKA,CANA;UANA;QAcA,CAlBA;QAmBA;UACA;;UACA;YACA,+BACA2I,+CADA;;YAGA;cACAC,gBACA,QADA;gBAEArH,wBAFA;gBAGAF,sBAHA;gBAIAD;cAJA;YAMA;UACA;;UACA;YACAG,iBADA;YAEAsC,2BAFA;YAGAgF,6BAHA;YAIAC,iCAJA;YAKAC,aALA;YAMAzH,mBANA;YAOAoF,yBACAU,GADA,CACAxB;cACA;YACA,CAHA,EAIAoD,IAJA,CAIA,GAJA,CAPA;YAYAvC,mBACAW,GADA,CACAxB;cACA;YACA,CAHA,EAIAoD,IAJA,CAIA,GAJA,CAZA;YAiBAhJ,4BACAoH,GADA,CACAxB;cACA;YACA,CAHA,EAIAoD,IAJA,CAIA,GAJA,CAjBA;YAsBA/I,8BACAmH,GADA,CACAxB;cACA;YACA,CAHA,EAIAoD,IAJA,CAIA,GAJA,CAtBA;YA2BArC;cACAhI,QADA;cAEA8G;YAFA;UA3BA;QAgCA,CA/CA;MAgDA;IACA,CAhwBA;;IAiwBA;IACA;MACA;QACA;QACA;MACA;;MACA;QACA;QACA;MACA;;MACA;QACA;QACA;MACA;;MACA;QACA;UACA;UACA;;UAEA;YACA;YACA;UACA;;UACA;YACA;YACA;UACA;;UACA;YACA;YACA;YACAH;cACA;gBACA2D;kBACAvC,4BADA;kBAEAwC;gBAFA,CADA;gBAKAhJ;kBACA;oBACAiJ,oBADA;oBAEAC;kBAFA;gBAIA,CALA;cALA;YAYA,CAbA;YAcA7D;cACA,iBADA,CACA;;cACA,gBAFA,CAEA;;cACA,kBAHA,CAGA;;cACA,uBAJA,CAIA;;cACA;gBACA8D;gBACAH;gBACAE;gBACA1C;cACA,CALA,MAKA;gBACA2C;gBACAH;gBACAxC;gBACA0C;cACA,CAfA,CAgBA;;;cACA;cACA;cACA;cACAxE;gBACA0E;gBACAC;gBACAC;cACA,CAJA;cAKA;gBACA7C,6BADA;gBAEArB;kBACA;oBACA4D,sBADA;oBAEAxC,0BAFA;oBAGA0C,oCAHA;oBAIAD;kBAJA;gBAMA,CAPA,CAFA;gBAUA5H,iBAVA;gBAWAH,qBAXA;gBAYAC;cAZA;;cAcA;gBACAoI;gBACAA;cACA;;cACA;YACA,CA5CA;UA6CA,CA9DA,MA8DA;YACA;UACA;;UACA;UACAC;UACA;YACA;cACA9E;cACAA;cACAA;YACA;;YACA,IACA,6DACA,EADA,IAEA,6BAHA,EAIA;cACA;YACA;;YACA;UACA,CAdA,EA/EA,CA8FA;;UACA;UACA,0BAhGA,CAiGA;;UACA,2CACAA,wCADA;UAGA+E;YACAxH;YACAU,sBACA+B,2DADA;UAGA,CALA;UAMA;YACAxB,qCADA;YAEAlB,mDAFA;YAGAC,sCAHA;YAIAS,qCAJA;YAKAC,4CALA;YAMAH,2BANA;YAOAD,+BAPA;YAQAX,qCARA;YASAC,2CATA;YAUAF,iCAVA;YAWAyD,oBAXA;YAYAC,0BAZA;YAaAlD,mBAbA;YAcAG,iCAdA;YAeAG,yBAfA;YAgBApB,+BAhBA;YAiBAuB,qCAjBA;YAkBAR,yBAlBA;YAmBAS,+BAnBA;YAoBAC,+BApBA;YAqBAC,uCArBA;YAsBAb,iDAtBA;YAuBAe;UAvBA;UAyBA;UACA;;UACA;YACA;cACAwB;YACA,CAFA,MAEA;cACAA;YACA;;YACA;YACA;YAEA;cACAhB,eADA;cAEAJ;YAFA;YAIA;YACA;UACA,CAfA,CAeA;YACA;UACA;QACA;MACA,CA1JA;IA2JA,CA16BA;;IA26BA;IACAqG;MACA;MACA,gDAFA,CAGA;IACA,CAh7BA;;IAi7BA;IACAC;MACA;QACA;UACAlG,aADA;UAEAJ;QAFA;QAIA;MACA;;MACA;MACA;IACA,CA57BA;;IA67BA;MACA;QAAApE;MAAA;MACA;IACA,CAh8BA;;IAi8BA;IACA;MACA;QAAAA;MAAA;QACA2K;MADA;;MAIA;QACA;MACA,CAFA,MAEA;QACA;MACA;IACA,CA58BA;;IA68BA;IACAC;MACAC;IACA,CAh9BA;;IAi9BAC;MACA;IACA,CAn9BA;;IAo9BAC;MACA;QACA/H;MADA;IAGA,CAx9BA;;IAy9BA;IACAgI;MACA;QACA;UACA;YACA;cACA;cACA;YACA;;YACA;YACA;UACA;QACA,CATA;MAUA,CAXA,MAWA;QACA;UACA;UACA;QACA;;QACA;QACA;MACA;IACA,CA9+BA;;IA++BA;IACAC;MACA;QACA;QACA;MACA,CAHA,MAGA;QACA;QACA;MACA;IACA,CAx/BA;;IAy/BAC;MACA;QACA;MACA,CAFA,MAEA;QACA;MACA,CAFA,MAEA;QACA;MACA;IACA,CAjgCA;;IAkgCA;IACAC;MACA;QACA;UACAlJ,YADA;UAEAD,WAFA;UAGAE,UAHA;UAIAH,YAJA;UAKAI,UALA;UAMAC;QANA;QAQA;MACA;IACA;;EA/gCA;AAtLA","names":["getAllUnit","defineSpec","SpecManagegetAll","getGoodsBasicInfoById","editGoodsBasic","addGoodsBasic","getAllCategoryPost","name","components","BrandSelModel","Tinymce","UploadQiniu","AddCate","AddBrand","SelectShop","data","callback","self_spec_val","spec_name_index","self_spec_input","spec_model","spec_item_check","is_indeterminate_spec","spec_check_all","spec_data","spec_data_child","spec_table_Data","sku_list","groupSpecId","groupSpecName","params","add_model","dialogTitle","pid_arr","add_Brand","pageName","loading","img_list","dynamicTags","inputVisible","inputValue","assist_model","edit_assist_model","assist_index","unit_options","assist_form","unitName","isMaster","isDefault","weight","unitId","barCode","conversion","sel_brand","sel_shop","master_unit_name","base_form","specType","delUnitIds","delSpecSkuIds","branchUnit","brandName","categoryPath","assistCategoryPath","noSalesShop","unitData","isEq","masterUnit","describe","storage","title","code","categoryId","assistCategoryId","expireTime","brandId","tag","description","salesShop","images","merchantId","base_rules","required","message","trigger","validator","images_rules","type","base_goods_id","isEditSpec","isNew","sel_merchant","sel_cities","category_data","cate_props","label","value","checkStrictly","assist_cate","page_tabs","step_active","methods","isDefaultChange","target","item","itemB","page","pageSize","source","modelClose","openModel","row","link","submitBrand","specGroup","specMultiple","key","url","specDetailDel","isFalseVal","itemP","uploadSpecSuccess","addSkuP","confirmButtonText","cancelButtonText","then","catch","groupSpecIdChange","specGroupRest","itemC","doExchange","temp","doubleArrays","id","specName","specImage","index","newArray","_count","pid","hidden","addSpecVal","selSpecVal","filter","map","checkAllSpecChange","specItemChange","checkedCount","delSpecVal","itemM","delGroupSpecId","pageTotal","uploadSuccess","content","imgSortChange","uploadRemove","handleClose","showInput","handleInputConfirm","delFuUnit","addFuUnit","EditFuUnit","subAssist","changeWeight","masterUnitChange","$event","branchUnitChange","itemF","barCodeA","inventory","specGroupHash","id_D","join","groupSpec","specId","specValueId","specValueName","specVal","barCodeO","isDefaultO","weightO","returnParams","unitDataD","assistCate","categoryChange","brandConfirm","enableStatus","clickChange","event","delAssistCate","addAssistCate","tagNext","tagLast","tabClick","isEqChange"],"sourceRoot":"src/views/goods/manageG","sources":["AddBaseData.vue"],"sourcesContent":["<!--添加基础资料-->\n<template>\n <ContainerTit>\n <div slot=\"headr\">\n <el-button class=\"bottom-btn\" @click=\"tagLast\">上一步</el-button>\n <el-button\n v-if=\"page_tabs !== '3'\"\n class=\"bottom-btn\"\n type=\"primary\"\n @click=\"tagNext\"\n >\n 下一步\n </el-button>\n <el-button\n v-if=\"page_tabs === '3'\"\n class=\"bottom-btn\"\n type=\"primary\"\n :loading=\"loading\"\n @click=\"submitGoods\"\n >\n 完成,提交发布\n </el-button>\n </div>\n <div class=\"order_top\">\n <div class=\"order_top_content\">\n <el-steps :active=\"step_active\" align-center>\n <el-step title=\"商品信息\" icon=\"el-icon-document\"></el-step>\n <el-step title=\"商品图集\" icon=\"el-icon-picture-outline\"></el-step>\n <el-step title=\"商品属性\" icon=\"el-icon-document\"></el-step>\n </el-steps>\n </div>\n </div>\n <div class=\"order_midden\">\n <div class=\"goods-tab-view\">\n <div class=\"btn-view\">\n <el-button v-if=\"!base_goods_id\" @click=\"delPauseSave(1)\">\n 清空缓存\n </el-button>\n <el-button v-if=\"!base_goods_id\" @click=\"AddTem\">暂存</el-button>\n <el-button\n v-if=\"$route.name !== 'BaseDataDetail'\"\n type=\"primary\"\n :loading=\"loading\"\n @click=\"submitGoods\"\n >\n 保存\n </el-button>\n </div>\n <el-tabs v-model=\"page_tabs\" @tab-click=\"tabClick\">\n <el-tab-pane label=\"商品信息\" name=\"1\"></el-tab-pane>\n <el-tab-pane label=\"商品图集\" name=\"2\"></el-tab-pane>\n <el-tab-pane label=\"商品属性\" name=\"3\"></el-tab-pane>\n </el-tabs>\n </div>\n <div class=\"detail-tab-item\">\n <el-form\n v-show=\"page_tabs === '1'\"\n ref=\"base_form\"\n :model=\"base_form\"\n label-width=\"120px\"\n :rules=\"base_rules\"\n size=\"small\"\n >\n <div class=\"detail-tab-main\">\n <el-row>\n <el-col :span=\"24\">\n <p class=\"order_midden_left_text\">\n <span class=\"el-icon-arrow-right\"></span>\n <span>商品信息</span>\n </p>\n </el-col>\n <el-col :span=\"12\">\n <el-form-item label=\"商品名称:\" prop=\"title\">\n <el-input\n v-model=\"base_form.title\"\n style=\"width: 100%\"\n placeholder=\"请输入商品名称\"\n ></el-input>\n </el-form-item>\n <el-form-item label=\"商品分类:\" prop=\"categoryId\">\n <el-cascader\n v-model=\"base_form.categoryPath\"\n clearable\n style=\"width: calc(100% - 100px)\"\n placeholder=\"请选择商品分类\"\n :options=\"category_data\"\n :props=\"cate_props\"\n @change=\"categoryChange\"\n >\n <div slot-scope=\"scope\" @click=\"clickChange\">\n {{ scope.data.title }}\n </div>\n </el-cascader>\n <el-button size=\"mini\" type=\"text\" @click=\"add_model = true\">\n 【新建分类】\n </el-button>\n </el-form-item>\n <el-form-item label=\"副分类:\">\n <div v-for=\"(item, index) in assist_cate\" :key=\"index\">\n <el-cascader\n v-model=\"item.assistCategoryPath\"\n clearable\n style=\"width: calc(100% - 120px)\"\n placeholder=\"请选择商品分类\"\n :options=\"category_data\"\n :props=\"cate_props\"\n >\n <div slot-scope=\"scope\" @click=\"clickChange\">\n {{ scope.data.title }}\n </div>\n </el-cascader>\n <el-button\n v-if=\"index === 0\"\n size=\"mini\"\n type=\"text\"\n @click=\"addAssistCate\"\n >\n 【添加】\n </el-button>\n <el-button\n v-if=\"assist_cate.length > 1\"\n size=\"mini\"\n type=\"text\"\n @click=\"delAssistCate(index)\"\n >\n 【删除】\n </el-button>\n </div>\n </el-form-item>\n <el-form-item label=\"商品品牌:\" prop=\"brandId\">\n <el-input\n v-model=\"base_form.brandName\"\n readonly\n style=\"width: calc(100% - 100px)\"\n placeholder=\"请选择商品品牌\"\n >\n <i\n slot=\"suffix\"\n class=\"el-input__icon el-icon-search\"\n @click=\"sel_brand = true\"\n ></i>\n </el-input>\n <el-button size=\"mini\" type=\"text\" @click=\"add_Brand = true\">\n 【新建品牌】\n </el-button>\n </el-form-item>\n <el-form-item\n v-if=\"shelfLifeSetUp === 5\"\n label=\"保质期:\"\n prop=\"expireTime\"\n >\n <el-input-number\n v-model=\"base_form.expireTime\"\n style=\"width: calc(100% - 30px)\"\n :controls=\"false\"\n :min=\"1\"\n placeholder=\"请输入商品保质期\"\n ></el-input-number>\n 天\n </el-form-item>\n <el-form-item label=\"抄码商品:\" prop=\"describe\">\n <el-switch\n v-model=\"base_form.isEq\"\n class=\"switchStyle\"\n :disabled=\"isEditSpec === 4\"\n active-text=\"是\"\n inactive-text=\"否\"\n active-color=\"#2153D4\"\n inactive-color=\"#879BBA\"\n :active-value=\"5\"\n :inactive-value=\"4\"\n @change=\"isEqChange\"\n ></el-switch>\n </el-form-item>\n <el-form-item label=\"关键词:\" prop=\"tag\">\n <el-tag\n v-for=\"tag in dynamicTags\"\n :key=\"tag\"\n closable\n :disable-transitions=\"false\"\n @close=\"handleClose(tag)\"\n >\n {{ tag }}\n </el-tag>\n <el-input\n v-if=\"inputVisible\"\n ref=\"saveTagInput\"\n v-model=\"inputValue\"\n class=\"input-new-tag\"\n size=\"small\"\n @keyup.enter.native=\"handleInputConfirm\"\n @blur=\"handleInputConfirm\"\n ></el-input>\n <el-button\n v-else\n class=\"button-new-tag\"\n size=\"small\"\n style=\"\n width: 80px;\n height: 28px;\n font-size: 14px;\n border-radius: 3px;\n line-height: 3px;\n \"\n @click=\"showInput\"\n >\n + 新增\n </el-button>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\">\n <el-form-item label=\"商品编码:\" prop=\"code\">\n <el-input\n v-model=\"base_form.code\"\n style=\"width: 100%\"\n disabled\n placeholder=\"商品编码自动生成\"\n ></el-input>\n </el-form-item>\n <el-form-item label=\"货架编码:\" prop=\"code\">\n <el-input\n v-model=\"base_form.storage\"\n style=\"width: 100%\"\n placeholder=\"货架编码\"\n ></el-input>\n </el-form-item>\n <el-form-item label=\"禁止销售店铺:\">\n <SelectShop\n v-model=\"base_form.noSalesShop\"\n width=\"530\"\n :multiple=\"true\"\n :enable=\"true\"\n />\n </el-form-item>\n <el-form-item label=\"商品卖点:\" prop=\"describe\">\n <el-input\n v-model=\"base_form.describe\"\n style=\"width: 100%\"\n placeholder=\"请输入商品卖点\"\n ></el-input>\n </el-form-item>\n <el-form-item label=\"商户:\">\n <el-select\n v-if=\"!base_goods_id\"\n v-model=\"base_form.merchantId\"\n placeholder=\"选择商户\"\n style=\"width: 100%\"\n clearable\n >\n <el-option\n v-for=\"(item, index) in sel_cities\"\n :key=\"index\"\n :label=\"item.name\"\n :value=\"item.id\"\n ></el-option>\n </el-select>\n <el-input\n v-else\n v-model=\"base_form.merchantName\"\n style=\"width: 100%\"\n disabled\n ></el-input>\n </el-form-item>\n </el-col>\n </el-row>\n </div>\n <div class=\"detail-tab-main\">\n <div class=\"order_midden_left_text\">\n <span class=\"el-icon-arrow-right\"></span>\n <span>商品单位</span>\n <el-button\n size=\"mini\"\n type=\"text\"\n @click=\"$router.push('/goods/manageG/UnitMeasurement')\"\n >\n 【单位管理】\n </el-button>\n <el-button size=\"mini\" type=\"text\" @click=\"getAllUnit\">\n 【刷新】\n </el-button>\n <span class=\"desc-span\">\n (在商品【采购之后】,基本单位不允许修改,基本单位为最小度量单位)\n </span>\n </div>\n <el-form-item prop=\"masterUnit\">\n <div slot=\"label\">\n <span style=\"color: #e60000\">*</span>\n <span>基本单位</span>\n <el-tooltip\n effect=\"dark\"\n content=\"基本单位与辅助单位之间须有固定的换算关系,例如:1箱牛奶=24盒,【单位关系】为24,基本单位为【盒】,辅助单位为【箱】\"\n placement=\"top-start\"\n >\n <i class=\"el-icon-info\"></i>\n </el-tooltip>\n :\n </div>\n <vxe-select\n v-model=\"base_form.masterUnit.unitId\"\n :disabled=\"isEditSpec === 4\"\n placeholder=\"请选择基本单位\"\n @change=\"masterUnitChange\"\n >\n <vxe-option\n v-for=\"(itemU, indexU) in unit_options\"\n :key=\"indexU\"\n :label=\"itemU.unitName\"\n :disabled=\"\n base_form.isEq === 5 &&\n itemU.unitName !== 'KG' &&\n itemU.unitName !== '斤'\n \"\n :value=\"itemU.id\"\n ></vxe-option>\n </vxe-select>\n <div v-if=\"!spec_table_Data.length\" style=\"display: inline-block\">\n <vxe-input\n v-model=\"base_form.masterUnit.barCode\"\n style=\"width: 200px; margin: 0 12px\"\n placeholder=\"请输入商品条码\"\n ></vxe-input>\n <vxe-input\n v-model=\"base_form.masterUnit.weight\"\n type=\"number\"\n style=\"width: 200px\"\n placeholder=\"请输入商品重量\"\n @blur=\"changeWeight\"\n >\n <template #suffix>\n <span style=\"color: #2d405e\">g</span>\n </template>\n </vxe-input>\n <span style=\"margin-left: 24px\">默认单位:</span>\n <el-switch\n v-model=\"base_form.masterUnit.isDefault\"\n class=\"switchStyle\"\n active-color=\"#2153D4\"\n inactive-color=\"#879BBA\"\n active-text=\"是\"\n inactive-text=\"否\"\n :inactive-value=\"4\"\n :active-value=\"5\"\n @change=\"isDefaultChange($event, 'masterUnit')\"\n ></el-switch>\n </div>\n </el-form-item>\n <el-form-item prop=\"branchUnit\" label=\"辅助单位:\">\n <div\n v-for=\"(itemA, indext) in base_form.branchUnit\"\n :key=\"indext\"\n :style=\"{\n display: !spec_table_Data.length ? 'block' : 'inline-block',\n }\"\n >\n <el-tag\n :closable=\"isEditSpec === 5 || base_form.isEq === 5\"\n :disable-transitions=\"false\"\n @close=\"delFuUnit(itemA, indext)\"\n >\n <span v-if=\"itemA.isNew === 4\">\n 1{{ base_form.masterUnit.unitName }}={{ itemA.conversion\n }}{{ itemA.unitName }}\n </span>\n <span v-else>\n 1{{ itemA.unitName }}={{ itemA.conversion\n }}{{ base_form.masterUnit.unitName }}\n </span>\n </el-tag>\n <div\n v-if=\"!spec_table_Data.length\"\n style=\"display: inline-block\"\n >\n <el-input\n v-model=\"itemA.barCode\"\n style=\"width: 200px; margin: 0 10px\"\n placeholder=\"请输入商品条码\"\n ></el-input>\n <el-input\n v-model=\"itemA.weight\"\n style=\"width: 200px\"\n placeholder=\"请输入商品重量\"\n >\n <el-button slot=\"append\">g</el-button>\n </el-input>\n <span style=\"margin-left: 10px; font-size: 12px\">\n 默认单位:\n </span>\n <el-switch\n v-model=\"itemA.isDefault\"\n class=\"switchStyle\"\n active-color=\"#2153D4\"\n inactive-color=\"#879BBA\"\n active-text=\"是\"\n inactive-text=\"否\"\n :inactive-value=\"4\"\n :active-value=\"5\"\n @change=\"isDefaultChange($event, indext)\"\n ></el-switch>\n </div>\n </div>\n <el-button\n v-if=\"\n base_form.isEq === 4 ||\n (base_form.isEq === 5 && base_form.branchUnit.length < 1)\n \"\n :disabled=\"!base_form.masterUnit.unitName\"\n type=\"text\"\n @click=\"addFuUnit\"\n >\n <i\n style=\"font-size: 14px; margin-right: 10px\"\n class=\"iconfont icon-xinzeng\"\n ></i>\n <span>新增单位</span>\n </el-button>\n </el-form-item>\n </div>\n </el-form>\n <el-form v-show=\"page_tabs === '2'\" label-width=\"120px\" size=\"small\">\n <div class=\"detail-tab-main\">\n <div class=\"order_midden_left_text\">\n <span class=\"el-icon-arrow-right\"></span>\n <span>商品图集</span>\n <span class=\"desc-span\">\n (建议上传尺寸375px*375px,格式:jpg,jpeg,png;\n 大小:建议小于1M。)\n </span>\n </div>\n <el-form-item prop=\"images\" label-width=\"20px\">\n <UploadQiniu\n :limit=\"10\"\n :file-list=\"img_list\"\n @uploadSuccess=\"uploadSuccess\"\n @imgSortChange=\"imgSortChange\"\n @handleRemove=\"uploadRemove\"\n />\n </el-form-item>\n <div class=\"order_midden_left_text\">\n <span class=\"el-icon-arrow-right\"></span>\n <span>商品详情</span>\n </div>\n <Tinymce v-model=\"base_form.description\" :height=\"300\" />\n </div>\n </el-form>\n <el-form v-show=\"page_tabs === '3'\" label-width=\"120px\" size=\"small\">\n <div class=\"detail-tab-main\">\n <div class=\"order_midden_left_text\">\n <span class=\"el-icon-arrow-right\"></span>\n <span>商品属性</span>\n <el-button\n size=\"mini\"\n type=\"text\"\n @click=\"$router.push('/goods/manageG/SpecManage')\"\n >\n 【属性管理】\n </el-button>\n <el-button size=\"mini\" type=\"text\" @click=\"SpecManagegetAll\">\n 【刷新】\n </el-button>\n <span v-if=\"isEditSpec === 5\" class=\"desc-span\">\n (在该商品【采购之前】若不设置商品属性,在该商品【采购之后】,属性不允许重新设置,请谨慎操作!)\n </span>\n <span v-else class=\"desc-span\">\n (请确认当前属性是否有库存,一旦删除该属性无法售卖;新增规格会导致原有库存重置;请谨慎操作!)\n </span>\n </div>\n <div v-if=\"!sku_list.length\">\n <el-button type=\"primary\" @click=\"addSkuP\">添加属性</el-button>\n </div>\n <div v-for=\"(itemS, indexS) in sku_list\" :key=\"indexS\">\n <el-form-item prop=\"groupSpecId\" label=\"属性名:\">\n <el-select\n v-model=\"itemS.groupSpecId\"\n style=\"width: 100%\"\n filterable\n :disabled=\"isEditSpec === 4\"\n placeholder=\"请选择属性\"\n @change=\"groupSpecIdChange($event, indexS)\"\n >\n <el-option\n v-for=\"(itemU, indexU) in spec_data\"\n :key=\"indexU\"\n :label=\"itemU.specName\"\n :value=\"itemU.id\"\n ></el-option>\n </el-select>\n <el-button\n v-if=\"isEditSpec === 5\"\n type=\"text\"\n size=\"mini\"\n @click=\"delGroupSpecId(indexS)\"\n >\n 删除\n </el-button>\n <el-button\n v-if=\"indexS === 0 && isEditSpec === 5\"\n type=\"text\"\n @click=\"addSkuP\"\n >\n <i\n style=\"font-size: 14px; margin-right: 5px\"\n class=\"iconfont icon-xinzeng\"\n ></i>\n 添加属性\n </el-button>\n </el-form-item>\n <el-form-item label=\"属性值:\" prop=\"params\">\n <el-tag\n v-for=\"(itemC, indexC) in itemS.params\"\n :key=\"indexC\"\n :closable=\"isEditSpec === 5\"\n :disable-transitions=\"false\"\n @close=\"delSpecVal(indexC, indexS, itemC)\"\n >\n {{ itemC.specName }}\n </el-tag>\n <el-button\n :disabled=\"!itemS.groupSpecId\"\n type=\"text\"\n @click=\"addSpecVal(indexS)\"\n >\n + 选择属性值\n </el-button>\n <el-input\n v-if=\"itemS.self_spec_input\"\n v-model=\"itemS.self_spec_val\"\n size=\"small\"\n style=\"width: 200px\"\n placeholder=\"请输入内容\"\n >\n <el-button\n slot=\"append\"\n icon=\"el-icon-check\"\n @click=\"selfSpecConfirm(indexS)\"\n ></el-button>\n </el-input>\n <el-button\n v-else\n :disabled=\"!itemS.groupSpecId\"\n type=\"text\"\n @click=\"itemS.self_spec_input = true\"\n >\n + 新增属性值\n </el-button>\n </el-form-item>\n </div>\n <!-- 规格明细-->\n <div v-show=\"spec_table_Data.length > 0\">\n <p class=\"order_midden_left_text\">\n <span class=\"el-icon-arrow-right\"></span>\n <span>规格明细</span>\n </p>\n <el-table :data=\"spec_table_Data\">\n <el-table-column width=\"50\" type=\"index\"></el-table-column>\n <el-table-column\n v-for=\"(item, index) in sku_list\"\n :key=\"index\"\n prop=\"specName\"\n min-width=\"100px\"\n :label=\"item.groupSpecName\"\n >\n <template slot-scope=\"scope\">\n {{\n scope.row.specName.indexOf(\"_\") > -1\n ? scope.row.specName.split(\"_\")[index] || \"\"\n : scope.row.specName\n }}\n </template>\n </el-table-column>\n <el-table-column\n prop=\"specImage\"\n label=\"规格图片\"\n min-width=\"140px\"\n >\n <template slot-scope=\"scope\">\n <UploadQiniu\n :width=\"50\"\n is-btn=\"picture\"\n :file-list=\"\n scope.row.specImage.url ? [scope.row.specImage] : []\n \"\n @uploadSuccess=\"uploadSpecSuccess($event, scope.$index)\"\n ></UploadQiniu>\n </template>\n </el-table-column>\n <el-table-column label=\"商品条码\" min-width=\"200px\">\n <template slot-scope=\"scope\">\n <div\n v-for=\"(itemU, indexU) in scope.row.barCode\"\n :key=\"indexU\"\n style=\"padding-bottom: 5px\"\n >\n <span>{{ itemU.unitName }}:</span>\n <el-input\n v-model=\"itemU.barCode\"\n style=\"width: 160px\"\n size=\"small\"\n placeholder=\"请输入商品条码\"\n ></el-input>\n </div>\n </template>\n </el-table-column>\n <el-table-column label=\"商品重量\" min-width=\"200px\">\n <template slot-scope=\"scope\">\n <div\n v-for=\"(itemU, indexU) in scope.row.barCode\"\n :key=\"indexU\"\n style=\"padding-bottom: 5px\"\n >\n <span>{{ itemU.unitName }}:</span>\n <el-input\n v-model=\"itemU.weight\"\n style=\"width: 160px\"\n size=\"small\"\n placeholder=\"请输入商品重量 (g)\"\n >\n <el-button slot=\"append\">g</el-button>\n </el-input>\n </div>\n </template>\n </el-table-column>\n <el-table-column label=\"默认属性\" min-width=\"140px\">\n <template slot-scope=\"scope\">\n <div\n v-for=\"(itemU, indexU) in scope.row.barCode\"\n :key=\"indexU\"\n style=\"padding-bottom: 5px\"\n >\n <span>{{ itemU.unitName }}:</span>\n <el-switch\n v-model=\"itemU.isDefault\"\n active-color=\"#36B365\"\n inactive-color=\"#ff4949\"\n active-text=\"是\"\n inactive-text=\"否\"\n :inactive-value=\"4\"\n :active-value=\"5\"\n @change=\"isDefaultChange($event, indexU, scope.$index)\"\n ></el-switch>\n </div>\n </template>\n </el-table-column>\n <el-table-column\n v-if=\"!!base_goods_id\"\n prop=\"inventory\"\n min-width=\"120px\"\n label=\"库存\"\n >\n <template slot-scope=\"scope\">\n {{\n scope.row.isEditSpec === 5\n ? \"无记录\"\n : scope.row.inventory\n }}\n </template>\n </el-table-column>\n <el-table-column label=\"操作\" min-width=\"80px\">\n <template slot-scope=\"scope\">\n <el-button\n :disabled=\"scope.row.isEditSpec === 4\"\n type=\"text\"\n @click=\"specDetailDel(scope.row, scope.$index)\"\n >\n 删除\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n </div>\n </div>\n </el-form>\n </div>\n </div>\n <el-dialog\n :close-on-press-escape=\"false\"\n :close-on-click-modal=\"false\"\n :title=\"edit_assist_model ? '修改辅助单位' : '新增辅助单位'\"\n :visible.sync=\"assist_model\"\n width=\"40%\"\n >\n <el-form\n style=\"text-align: center\"\n :model=\"assist_form\"\n size=\"small\"\n inline\n >\n <div v-if=\"isNew === 4\">\n <el-form-item prop=\"conversion\">\n 1\n {{ base_form.masterUnit.unitName }}\n =\n </el-form-item>\n <el-form-item prop=\"unitName\">\n <el-input-number\n v-model=\"assist_form.conversion\"\n :controls=\"false\"\n ></el-input-number>\n <el-select\n v-model=\"assist_form.unitId\"\n placeholder=\"请选择辅助单位\"\n @change=\"branchUnitChange\"\n >\n <el-option\n v-for=\"(item, index) in unit_options\"\n :key=\"index\"\n :label=\"item.unitName\"\n :value=\"item.id\"\n :disabled=\"item.unitName === base_form.masterUnit.unitName\"\n ></el-option>\n </el-select>\n </el-form-item>\n </div>\n <div v-else>\n <el-form-item prop=\"conversion\">\n 1\n <el-select\n v-model=\"assist_form.unitId\"\n placeholder=\"请选择辅助单位\"\n @change=\"branchUnitChange\"\n >\n <template v-for=\"(item, index) in unit_options\">\n <el-option\n :key=\"index\"\n :label=\"item.unitName\"\n :value=\"item.id\"\n :disabled=\"item.unitName === base_form.masterUnit.unitName\"\n ></el-option>\n </template>\n </el-select>\n =\n </el-form-item>\n <el-form-item prop=\"unitName\">\n <el-input-number\n v-model=\"assist_form.conversion\"\n :controls=\"false\"\n ></el-input-number>\n {{ base_form.masterUnit.unitName }}\n </el-form-item>\n </div>\n </el-form>\n <span slot=\"footer\" class=\"dialog-footer\">\n <el-button @click=\"assist_model = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"subAssist\">确 定</el-button>\n </span>\n </el-dialog>\n <!-- 属性值 -->\n <el-dialog title=\"属性值\" :visible.sync=\"spec_model\" width=\"40%\">\n <el-checkbox\n v-model=\"spec_check_all\"\n :indeterminate=\"is_indeterminate_spec\"\n @change=\"checkAllSpecChange\"\n >\n 全选\n </el-checkbox>\n <div style=\"margin: 15px 0\"></div>\n <el-checkbox-group v-model=\"spec_item_check\" @change=\"specItemChange\">\n <el-checkbox\n v-for=\"(item, index) in spec_data_child\"\n :key=\"index\"\n :label=\"item.id\"\n >\n {{ item.specName }}\n </el-checkbox>\n </el-checkbox-group>\n <span slot=\"footer\" class=\"dialog-footer\">\n <el-button @click=\"spec_model = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"selSpecVal\">确 定</el-button>\n </span>\n </el-dialog>\n <BrandSelModel\n v-if=\"sel_brand\"\n :is-check=\"false\"\n :is-show-add=\"true\"\n :dialog-visible=\"sel_brand\"\n :enable=\"true\"\n @close=\"sel_brand = false\"\n @confirm=\"brandConfirm\"\n />\n <!----------------- 添加分类 ----------->\n <AddCate\n v-if=\"add_model\"\n :dialog-title=\"dialogTitle\"\n :is-show=\"add_model\"\n :pid-path=\"pid_arr\"\n @confirm=\"subCategory\"\n @cancel=\"modelClose\"\n />\n <!-- 新建品牌-->\n <el-drawer\n class=\"edit-drawer\"\n size=\"50%\"\n :visible.sync=\"add_Brand\"\n direction=\"rtl\"\n >\n <AddBrand v-if=\"add_Brand\" @submitBrand=\"submitBrand\" />\n </el-drawer>\n </ContainerTit>\n</template>\n\n<script>\n import GoodsCategory from \"@/component/common/GoodsCategory.vue\";\n import BrandSelModel from \"@/component/goods/BrandSelModel.vue\";\n import Tinymce from \"@/component/Tinymce\";\n import UploadQiniu from \"@/component/common/UploadQiniu.vue\";\n // 新增分类\n import AddCate from \"@/component/goods/AddCate.vue\";\n import AddBrand from \"./AddBrand\";\n import SelectShop from \"@/component/goods/SelectShop.vue\";\n import {\n getAllUnit,\n defineSpec,\n SpecManagegetAll,\n getGoodsBasicInfoById,\n editGoodsBasic,\n addGoodsBasic,\n getAllCategoryPost,\n } from \"@/api/goods\";\n import { addPauseSave, delPauseSave, getPauseSave } from \"@/api/common\";\n import { getAllMerchantList } from \"@/api/Merchants\";\n export default {\n name: \"AddBaseData\",\n components: {\n // GoodsCategory,\n BrandSelModel,\n Tinymce,\n UploadQiniu,\n AddCate,\n AddBrand,\n SelectShop,\n },\n data() {\n const validateUnit = (rule, value, callback) => {\n if (value.unitName === \"\") {\n callback(new Error(\"请设置基本单位\"));\n } else {\n callback();\n }\n };\n return {\n // 计量单位\n self_spec_val: \"\", // 自定义属性值输入框\n spec_name_index: 0, // 属性名index\n self_spec_input: false, // 显示自定义属性值输入框\n spec_model: false, // 选择属性值弹窗\n spec_item_check: [], // 属性值弹窗单选value\n is_indeterminate_spec: false, // 批量选择属性值 全选选择框状态\n spec_check_all: false, // 属性值 全选选择框value\n spec_data: [], // 属性列表\n spec_data_child: [], // 属性值列表\n spec_table_Data: [], // 规格明细\n sku_list: [\n // 商品属性列表\n {\n spec_data_child: [],\n groupSpecId: \"\",\n self_spec_val: \"\",\n self_spec_input: false,\n groupSpecName: \"\",\n params: [],\n },\n ],\n add_model: false, // 新建分类\n dialogTitle: \"新建分类\",\n pid_arr: [],\n add_Brand: false, // 新增品牌\n pageName: \"\", // 暂存数据参数\n loading: false,\n img_list: [],\n // 关键词\n dynamicTags: [],\n inputVisible: false,\n inputValue: \"\",\n // 关键词 END\n assist_model: false,\n edit_assist_model: false,\n assist_index: 0,\n unit_options: [],\n // 计量单位弹窗\n assist_form: {\n unitName: \"\",\n isMaster: 4,\n isDefault: 4,\n weight: \"\",\n unitId: \"\",\n barCode: \"\",\n conversion: \"\",\n },\n sel_brand: false, // 打开品牌选择弹窗\n sel_shop: false, // 打开店铺选择弹窗\n master_unit_name: \"\",\n base_form: {\n // 基本信息\n specType: 1, // 是否多规格\n delUnitIds: [], // 辅助单位删除delUnitIds (unitId)\n delSpecSkuIds: [], // 属性删除delSpecSkuIds(这个用id)\n branchUnit: [],\n brandName: \"\",\n categoryPath: [], // 分类选择\n assistCategoryPath: [], //副分类\n noSalesShop: [],\n unitData: [],\n isEq: 4, //是否是抄码商品\n masterUnit: {\n isDefault: 5,\n isMaster: 5,\n weight: \"\",\n unitName: \"\",\n unitId: \"\",\n barCode: \"\",\n },\n describe: \"\",\n storage: \"\",\n title: \"\",\n code: \"\",\n barCode: \"\", // 商品条码\n categoryId: \"\",\n assistCategoryId: \"\",\n expireTime: \"\",\n brandId: \"\",\n tag: \"\",\n description: \"\",\n salesShop: \"\",\n images: [],\n merchantId: \"\", //商户ID\n },\n base_rules: {\n // 基本信息验证\n title: [\n { required: true, message: \"请输入商品名称\", trigger: \"blur\" },\n ],\n categoryId: [\n { required: true, message: \"请选择商品分类\", trigger: \"change\" },\n ],\n expireTime: [\n { required: true, message: \"请输入商品保质期\", trigger: \"blur\" },\n ],\n masterUnit: [{ validator: validateUnit, trigger: \"change\" }],\n },\n\n images_rules: {\n images: [\n {\n type: \"array\",\n required: true,\n message: \"请上传商品图片\",\n trigger: \"change\",\n },\n ],\n },\n base_goods_id: 0,\n isEditSpec: 5, // 5 表示此商品从未采购过,允许用户随意编辑单位和属性;4 表示商品已经采购过,隐藏添加属性按钮,避免skuid重组\n isNew: 5, // 5 标示这是一个最近新增的商品,基本单位为最小单位,4标示这是之前的老数据,基本单位为最大单位3\n sel_merchant: false,\n sel_cities: [],\n category_data: [], //商品分类列表\n cate_props: {\n label: \"title\",\n value: \"id\",\n checkStrictly: true,\n },\n assist_cate: [\n {\n assistCategoryPath: [],\n },\n ],\n page_tabs: \"1\",\n step_active: 1,\n };\n },\n async created() {\n // this.getAllGoodsSupport();\n // 商品分类列表\n await this.getAllCategoryPost();\n this.pageName = this.$route.name;\n\n // 商户管理\n await this.getAllMerchantList();\n // 属性管理\n await this.SpecManagegetAll();\n await this.getAllUnit();\n if (this.$route.params.id) {\n this.base_goods_id = this.$route.params.id;\n await this.getGoodsBasicInfoById();\n } else {\n // 获取暂存信息\n await this.getPauseSave();\n }\n },\n async activated() {\n if (this.$_isInit()) return;\n this.pageName = this.$route.name;\n this.step_active = 1;\n this.page_tabs = \"1\";\n if (this.$route.params.id) {\n this.base_goods_id = this.$route.params.id;\n await this.getGoodsBasicInfoById();\n } else {\n // 获取暂存信息\n await this.getPauseSave();\n }\n },\n methods: {\n // 默认单位change\n isDefaultChange(val, index, sIndex) {\n // 多规格数据\n if (this.spec_table_Data.length > 0) {\n if (val === 5) {\n const target = this.$_common.deepClone(this.spec_table_Data);\n target.forEach((item, indexS) => {\n item.barCode.forEach((itemB, indexB) => {\n if (indexS !== sIndex) {\n itemB.isDefault = 4;\n } else {\n if (indexB !== index) {\n itemB.isDefault = 4;\n }\n }\n });\n });\n this.spec_table_Data = target;\n }\n } else {\n if (val === 5) {\n if (index === \"masterUnit\") {\n this.base_form.branchUnit.forEach((item) => {\n item.isDefault = 4;\n });\n } else {\n this.base_form.masterUnit.isDefault = 4;\n this.base_form.branchUnit.forEach((item, indexU) => {\n if (indexU !== index) {\n item.isDefault = 4;\n }\n });\n }\n }\n }\n },\n // 请求基本单位数据\n async getAllUnit() {\n const { data } = await getAllUnit({\n page: 1,\n pageSize: 99,\n source: 4,\n });\n\n this.unit_options = data;\n },\n modelClose() {\n this.add_model = false;\n },\n // 打开新增弹窗\n openModel(title, row) {\n this.add_model = true;\n this.dialogTitle = title;\n if (title === \"新建子分类\") {\n let link = row.link\n ? row.link.split(\",\").map((item) => {\n return parseInt(item);\n })\n : [];\n link.push(row.id);\n this.pid_arr = link;\n }\n },\n // 新增/编辑分类\n async subCategory() {\n await this.getAllCategoryPost();\n },\n // 新建品牌\n submitBrand() {\n this.add_Brand = false;\n },\n // 添加暂存\n async AddTem() {\n const params = {\n ...this.base_form,\n specGroup: this.sku_list,\n specMultiple: this.spec_table_Data,\n tag: this.dynamicTags,\n assist_cate: this.assist_cate,\n };\n const data = await addPauseSave({\n key: this.pageName,\n data: params,\n });\n this.$message({\n type: \"success\",\n message: \"暂存成功\",\n });\n this.$closeCurrentGoEdit(\"/goods/manageG/BaseDataList\");\n },\n // 删除暂存信息\n async delPauseSave(type) {\n const data = delPauseSave({\n key: this.pageName,\n });\n\n if (type) {\n this.$message({\n type: \"success\",\n message: \"清除暂存成功\",\n });\n this.$closeCurrentGoEdit(\"/goods/manageG/AddBaseData\");\n }\n },\n // 获取暂存信息\n async getPauseSave() {\n const { data } = await getPauseSave({\n key: this.pageName,\n });\n\n if (JSON.stringify(data) === \"{}\") return;\n this.base_form = {\n ...data,\n categoryPath: Array.isArray(data.categoryPath)\n ? data.categoryPath\n : [],\n };\n this.assist_cate = data.assist_cate || [{ assistCategoryPath: [] }];\n this.sku_list = data.specGroup || [];\n this.spec_table_Data = data.specMultiple || [];\n this.dynamicTags = data.tag || [];\n if (data.images) {\n this.img_list = data.images.map((item) => {\n return {\n name: \"\",\n url: item,\n };\n });\n }\n },\n\n // 规格明细删除\n specDetailDel(row, index) {\n if (\n row.specGroupHash &&\n this.base_form.delSpecSkuIds.indexOf(row.specGroupHash) === -1\n ) {\n this.base_form.delSpecSkuIds.push(row.specGroupHash);\n }\n this.spec_table_Data.splice(index, 1);\n const specNameArr = row.specName.indexOf(\"_\")\n ? row.specName.split(\"_\")\n : row.specName;\n // console.log('specNameArr', row.specName)\n // console.log('this.spec_table_Data', this.spec_table_Data)\n let isFalseVal = \"\";\n for (let i in specNameArr) {\n let itemS = specNameArr[i];\n // console.log(itemS)\n // console.log(this.spec_table_Data.find(item => item.specName.indexOf(itemS) > -1))\n if (\n !this.spec_table_Data.find(\n (item) => item.specName.indexOf(itemS) > -1\n )\n ) {\n isFalseVal = itemS;\n break;\n }\n }\n // console.log('isStay,', isFalseVal)\n // console.log(this.sku_list)\n if (isFalseVal) {\n this.sku_list.forEach((item) => {\n const indexP = item.params.findIndex(\n (itemP) => itemP.specName === isFalseVal\n );\n if (indexP > -1) {\n item.params.splice(indexP, 1);\n }\n });\n }\n },\n // ddel(val) {\n // this.from.categoryPath = val;\n // },\n // 规格图片\n uploadSpecSuccess(val, index) {\n let target = this.$_common.deepClone(this.spec_table_Data);\n target[index].specImage = {\n name: \"\",\n url: val,\n };\n this.spec_table_Data = target;\n },\n // 添加规格项目\n addSkuP() {\n if (this.isEditSpec === 5) {\n this.sku_list.push({\n spec_data_child: [],\n self_spec_input: false,\n self_spec_val: \"\",\n groupSpecId: \"\",\n groupSpecName: \"\",\n params: [],\n });\n } else {\n this.$confirm(\n \"新增规格会导致原有库存重置,请谨慎操作! 是否继续?\",\n \"提示\",\n {\n confirmButtonText: \"继续新增\",\n cancelButtonText: \"取消\",\n type: \"warning\",\n }\n )\n .then(() => {\n this.sku_list.push({\n spec_data_child: [],\n self_spec_input: false,\n self_spec_val: \"\",\n groupSpecId: \"\",\n groupSpecName: \"\",\n params: [],\n });\n })\n .catch(() => {});\n }\n },\n // 规格明切换\n groupSpecIdChange(val, indexS) {\n let target = this.$_common.deepClone(this.sku_list);\n const specDataItem = this.spec_data.find((item) => item.id === val);\n const isHave = target.find(\n (item) => item.groupSpecName === specDataItem.specName\n );\n if (isHave) {\n target[indexS].groupSpecId = \"\";\n this.sku_list = target;\n this.$message.warning(`属性:【${specDataItem.specName}】已存在`);\n return;\n }\n target[indexS].groupSpecName = specDataItem.specName;\n target[indexS].spec_data_child = specDataItem.child || [];\n target[indexS].params = [];\n this.sku_list = target;\n // 重排规格组合\n // this.specGroupRest()\n // console.log(this.sku_list)\n // console.log(this.spec_table_Data)\n },\n // 重排规格组合\n specGroupRest() {\n // 编辑页面存储详情接口返回规格组合id\n this.spec_table_Data.forEach((item) => {\n if (\n item.specGroupHash &&\n this.base_form.delSpecSkuIds.indexOf(item.specGroupHash) === -1\n ) {\n this.base_form.delSpecSkuIds.push(item.specGroupHash);\n }\n });\n // 备份一份规格明细,用来填充重排规格组之前的数据\n const cloneSpecGroup = this.$_common.deepClone(this.spec_table_Data);\n const skuArr = this.sku_list.map((item) => {\n item.params = item.params.map((itemP) => {\n return {\n ...itemP,\n groupSpecName: item.groupSpecName,\n };\n });\n return item.params;\n });\n // console.log('skuArr::', skuArr)\n this.spec_table_Data = this.doExchange(skuArr);\n // console.log(this.spec_table_Data)\n\n this.spec_table_Data.forEach((item) => {\n const index = cloneSpecGroup.findIndex(\n (itemC) => itemC.id === item.id\n );\n if (index > -1) {\n item.barCode = cloneSpecGroup[index].barCode;\n item.specImage = cloneSpecGroup[index].specImage;\n item.inventory = cloneSpecGroup[index].inventory;\n item.isEditSpec = cloneSpecGroup[index].isEditSpec || 5;\n }\n });\n },\n // 规格组合\n doExchange(doubleArrays) {\n const len = doubleArrays.length;\n let unitData = this.$_common.deepClone(this.base_form.branchUnit);\n unitData.unshift(this.base_form.masterUnit);\n const barCodeArr = unitData.map((item) => {\n return {\n ...item,\n barCode: \"\",\n weight: \"\",\n isDefault: 4,\n };\n });\n if (len >= 2) {\n const len1 = doubleArrays[0].length;\n const len2 = doubleArrays[1].length;\n const newlen = len1 * len2;\n const temp = new Array(newlen);\n let index = 0;\n for (let i = 0; i < len1; i++) {\n for (let j = 0; j < len2; j++) {\n temp[index] = {\n groupSpecId:\n doubleArrays[0][i].groupSpecId +\n \"_\" +\n doubleArrays[1][j].groupSpecId,\n groupSpecName:\n doubleArrays[0][i].groupSpecName +\n \"_\" +\n doubleArrays[1][j].groupSpecName,\n id: doubleArrays[0][i].id + \"_\" + doubleArrays[1][j].id,\n specName:\n doubleArrays[0][i].specName +\n \"_\" +\n doubleArrays[1][j].specName,\n specImage: {\n name: \"\",\n url: \"\",\n },\n barCode: this.$_common.deepClone(barCodeArr),\n };\n index++;\n }\n }\n let newArray = new Array(len - 1);\n newArray[0] = temp;\n if (len > 2) {\n let _count = 1;\n for (let i = 2; i < len; i++) {\n newArray[_count] = doubleArrays[i];\n _count++;\n }\n }\n return this.doExchange(newArray);\n } else if (len > 0) {\n return doubleArrays[0].map((item) => {\n return {\n ...item,\n barCode: this.$_common.deepClone(barCodeArr),\n specImage: {\n name: \"\",\n url: \"\",\n },\n };\n });\n } else {\n return [];\n }\n },\n // 自定义属性值输入框确定 添加自定义属性\n async selfSpecConfirm(index) {\n const target = this.$_common.deepClone(this.sku_list);\n\n if (!target[index].self_spec_val) {\n target[index].self_spec_input = false;\n this.sku_list = target;\n return;\n }\n // 检查当前属性值是否已被选择\n const isHave = target[index].params.find(\n (item) => item.specName === target[index].self_spec_val\n );\n if (isHave) {\n this.$message.warning(\n `属性值:【${target[index].self_spec_val}】已存在`\n );\n target[index].self_spec_val = \"\";\n target[index].self_spec_input = false;\n this.sku_list = target;\n return;\n }\n // 属性值未被选择 做接口请求\n const { data } = await defineSpec({\n specName: target[index].self_spec_val,\n pid: target[index].groupSpecId,\n hidden: 4,\n });\n target[index].self_spec_input = false;\n target[index].params.push({\n specName: data.specName,\n id: data.id,\n groupSpecId: target[index].groupSpecId,\n });\n target[index].self_spec_val = \"\";\n this.sku_list = target;\n // 重排规格组合\n this.specGroupRest();\n },\n // 新增规格值\n addSpecVal(indexS) {\n this.spec_model = true;\n this.spec_data_child = this.sku_list[indexS].spec_data_child;\n this.spec_name_index = indexS;\n this.spec_item_check = this.sku_list[indexS].params.map(\n (item) => item.id\n );\n // 使用属性值单选方法,为了设置全选选择框状态\n this.specItemChange(this.spec_item_check);\n },\n // 选择属性值\n selSpecVal() {\n const target = this.$_common.deepClone(this.sku_list);\n const specval = this.spec_data_child\n .filter((item) => {\n return (\n this.spec_item_check.findIndex((itemS) => itemS === item.id) > -1\n );\n })\n .map((item) => {\n return {\n specName: item.specName,\n id: item.id,\n groupSpecId: item.pid,\n };\n });\n target[this.spec_name_index].params = this.$_common.unique(\n target[this.spec_name_index].params.concat(specval),\n [\"id\"]\n );\n this.sku_list = target;\n this.spec_model = false;\n // 重排规格组合\n this.specGroupRest();\n },\n // 属性值全选\n checkAllSpecChange(val) {\n this.is_indeterminate_spec = false;\n if (val) {\n this.spec_item_check = this.spec_data_child.map((item) => {\n return item.id;\n });\n } else {\n this.spec_item_check = [];\n }\n },\n // 属性值单选\n specItemChange(val) {\n let checkedCount = val.length;\n this.spec_check_all = checkedCount === this.spec_data_child.length;\n this.is_indeterminate_spec =\n checkedCount > 0 && checkedCount < this.spec_data_child.length;\n },\n // 删除规格值\n delSpecVal(indexC, indexS, itemC) {\n this.$confirm(\"确定要删除该规格值吗?\", \"提示\", {\n confirmButtonText: \"确定\",\n cancelButtonText: \"取消\",\n type: \"warning\",\n }).then(async () => {\n if (this.base_goods_id) {\n this.base_form.delSpecSkuIds = this.spec_table_Data\n .filter((item) => item.specName.indexOf(itemC.specName) > -1)\n .map((itemM) => {\n return itemM.specGroupHash;\n });\n }\n this.spec_table_Data = this.spec_table_Data.filter(\n (item) => item.specName.indexOf(itemC.specName) === -1\n );\n const target = this.$_common.deepClone(this.sku_list);\n target[indexS].params.splice(indexC, 1);\n this.sku_list = target;\n });\n },\n // 删除规格组\n delGroupSpecId(indexS) {\n this.$confirm(\"确定要删除该规格组吗?\", \"提示\", {\n confirmButtonText: \"确定\",\n cancelButtonText: \"取消\",\n type: \"warning\",\n }).then(async () => {\n this.sku_list.splice(indexS, 1);\n // 重排规格组合\n this.specGroupRest();\n });\n },\n\n // 获取属性列表\n async SpecManagegetAll() {\n const { data, pageTotal } = await SpecManagegetAll({\n page: 1,\n pageSize: 100,\n });\n\n this.spec_data = data.filter((item) => item.specName !== \"计量单位\");\n // this.unit_options = data.find(item => item.specName === '计量单位').child\n },\n // 选择图片\n uploadSuccess(val, res, file, fileList) {\n const imgArr = fileList.map((item) => {\n return item.content;\n });\n if (this.base_form.images.length) {\n this.base_form.images = this.base_form.images.concat(imgArr);\n } else {\n this.base_form.images = imgArr;\n }\n this.img_list = this.base_form.images.map((item) => {\n return {\n name: \"\",\n content: item,\n };\n });\n if (this.img_list.length > 10) {\n this.$message.warning(\"图片最多只能选择十张\");\n this.img_list = this.img_list.slice(0, 10);\n }\n },\n // 图片拖拽排序\n imgSortChange(list) {\n this.base_form.images = list.map((item) => {\n return item.content;\n });\n },\n uploadRemove(file, fileList) {\n this.base_form.images = fileList.map((item) => {\n return item.content;\n });\n },\n // 关键词删除\n handleClose(tag) {\n this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);\n },\n // 关键词显示输入框\n showInput() {\n this.inputVisible = true;\n this.$nextTick(() => {\n this.$refs.saveTagInput.$refs.input.focus();\n });\n },\n // 关键词显示输入确定\n handleInputConfirm() {\n let inputValue = this.inputValue;\n if (inputValue) {\n this.dynamicTags.push(inputValue);\n }\n this.inputVisible = false;\n this.inputValue = \"\";\n },\n // 关键词END\n // 设置计量单位\n // 删除辅助单位\n delFuUnit(row, it) {\n if (\n row.unitId &&\n this.base_form.delUnitIds.indexOf(row.unitId) === -1\n ) {\n this.base_form.delUnitIds.push(row.unitId);\n }\n this.spec_table_Data = this.spec_table_Data.map((item) => {\n return {\n ...item,\n barCode: item.barCode.filter((item) => item.unitId !== row.unitId),\n };\n });\n this.base_form.branchUnit.splice(it, 1);\n },\n // 新增辅助单位\n addFuUnit() {\n this.assist_model = true;\n this.edit_assist_model = false;\n this.assist_form = {\n unitName: \"\",\n isMaster: 4,\n unitId: \"\",\n conversion: \"\",\n };\n },\n // 修改附单位\n EditFuUnit(it) {\n this.assist_model = true;\n this.edit_assist_model = true;\n this.assist_form = this.base_form.branchUnit[it];\n this.assist_index = it;\n },\n // 弹窗提交\n subAssist() {\n if (!this.assist_form.conversion) {\n this.$message.warning(\"请输入单位件换算关系\");\n return;\n }\n if (!this.assist_form.unitName) {\n this.$message.warning(\"请选择辅助单位\");\n return;\n }\n if (!this.edit_assist_model) {\n this.assist_form.weight =\n this.base_form.masterUnit.weight * this.assist_form.conversion;\n this.base_form.branchUnit.push(this.assist_form);\n } else {\n this.base_form.branchUnit[this.assist_index] = this.assist_form;\n }\n this.assist_model = false;\n this.spec_table_Data = this.spec_table_Data.map((item) => {\n item.barCode.push(this.$_common.deepClone(this.assist_form));\n return {\n ...item,\n };\n });\n },\n changeWeight() {\n const target = this.$_common.deepClone(this.base_form.branchUnit);\n target.forEach((item) => {\n item.weight = this.base_form.masterUnit.weight * item.conversion;\n });\n this.base_form.branchUnit = target;\n },\n // 基本单位切换\n masterUnitChange({ value, $event }) {\n // 编辑页面把删除 的单位ID存储下来\n if (!!this.base_goods_id) {\n const unitData = this.$_common.deepClone(this.base_form.unitData);\n\n this.base_form.delUnitIds = unitData.map((item) => item.unitId);\n if (this.base_form.specType === 1) {\n const specMultiple = this.$_common.deepClone(\n this.base_form.specMultiple\n );\n this.base_form.delSpecSkuIds = specMultiple.map((item) => item.id);\n }\n\n //把所有的单位删除,重新设置一个新的主单位\n if (this.base_form.masterUnit.id) {\n delete this.base_form.masterUnit.id;\n }\n }\n\n const val = value;\n this.base_form.masterUnit.unitName = this.unit_options.find(\n (item) => item.id === val\n ).unitName;\n // 重置辅助单位\n this.base_form.branchUnit = [];\n this.spec_table_Data = this.spec_table_Data.map((item) => {\n const index = item.barCode.findIndex((itemF) => itemF.isMaster === 5);\n const barObj = {\n ...this.$_common.deepClone(this.base_form.masterUnit),\n barCode: item.barCode[index].barCode || \"\",\n };\n this.$set(item.barCode, index, barObj);\n return item;\n });\n },\n // 辅助单位切换\n branchUnitChange(val) {\n this.assist_form.unitName = this.unit_options.find(\n (item) => item.id === val\n ).unitName;\n },\n // 获取详情\n async getGoodsBasicInfoById() {\n const { data } = await getGoodsBasicInfoById(this.base_goods_id);\n\n this.isEditSpec = data.isEditSpec;\n const unitData = this.$_common.deepClone(data.unitData);\n const masterUnit = unitData.find((item) => item.isMaster === 5) || {};\n const branchUnit = unitData.filter((item) => item.isMaster === 4);\n this.isNew = masterUnit.isNew || 4;\n this.base_form = {\n ...data,\n noSalesShop: data.noSalesShop\n ? data.noSalesShop.split(\",\").map((item) => parseInt(item))\n : [],\n masterUnit: masterUnit,\n delUnitIds: [],\n delSpecSkuIds: [],\n specType: data.specType,\n branchUnit: branchUnit,\n categoryPath: data.categoryPath\n ? data.categoryPath.split(\",\").map((item) => {\n return parseInt(item);\n })\n : [],\n assistCategoryPath: data.assistCategoryPath || [],\n };\n if (data.assistCategoryPath && data.assistCategoryPath.length) {\n this.assist_cate = data.assistCategoryPath.map((item) => {\n return {\n assistCategoryPath: item.split(\",\").map((iteme) => {\n return parseInt(iteme);\n }),\n };\n });\n } else {\n this.assist_cate = [\n {\n assistCategoryPath: [],\n },\n ];\n }\n\n this.img_list = data.images.map((item) => {\n return {\n name: \"\",\n url: item,\n };\n });\n this.dynamicTags = data.tag ? data.tag.split(\",\") : [];\n this.base_form.brandName = data.brandTitle;\n // 多规格数据\n if (parseInt(this.base_form.specType) === 2) {\n this.sku_list = data.specGroup.map((item) => {\n const specData = this.spec_data.find(\n (itemF) => itemF.id === item.groupSpec.specId\n );\n return {\n spec_data_child: specData ? specData.child : [],\n groupSpecId: item.groupSpec.specId,\n groupSpecName: item.groupSpec.specName,\n self_spec_val: \"\",\n self_spec_input: false,\n params: item.params.map((itemC) => {\n return {\n id: itemC.specValueId,\n specName: itemC.specValueName,\n groupSpecId: item.groupSpec.specId,\n };\n }),\n };\n });\n this.spec_table_Data = data.specMultiple.map((item) => {\n let barCodeA = [];\n for (let b in item.barCode) {\n let unitB = data.unitData.find(\n (itemF) => parseInt(itemF.unitId) === parseInt(b)\n );\n if (unitB) {\n barCodeA.push({\n ...unitB,\n barCode: item.barCode[b],\n weight: item.weight[b],\n isDefault: item.isDefault[b],\n });\n }\n }\n return {\n barCode: barCodeA,\n isEditSpec: item.isEditSpec,\n inventory: item.inventory - 0,\n specGroupHash: item.specGroupHash,\n id_D: item.id,\n unitId: item.unitId,\n specName: item.specGroup\n .map((itemP) => {\n return itemP.specValueName;\n })\n .join(\"_\"),\n id: item.specGroup\n .map((itemP) => {\n return itemP.specValueId;\n })\n .join(\"_\"),\n groupSpecId: item.specGroup\n .map((itemP) => {\n return itemP.specId;\n })\n .join(\"_\"),\n groupSpecName: item.specGroup\n .map((itemP) => {\n return itemP.specName;\n })\n .join(\"_\"),\n specImage: {\n name: \"\",\n url: item.specImage,\n },\n };\n });\n }\n },\n // 发布商品\n async submitGoods() {\n if (!this.base_form.title.trim()) {\n this.$message.warning(\"商品名称不能为空\");\n return;\n }\n if (!this.base_form.categoryPath.length) {\n this.$message.warning(\"商品分类不能为空\");\n return;\n }\n if (!this.base_form.masterUnit.unitId) {\n this.$message.warning(\"请选择基本单位\");\n return;\n }\n this.$refs[\"base_form\"].validate(async (valid) => {\n if (valid) {\n let specGroup = [];\n let specMultiple = [];\n\n if (!this.base_form.images.length) {\n this.$message.warning(\"请上传商品图片\");\n return;\n }\n if (this.base_form.masterUnit.weight < 0) {\n this.$message.warning(\"商品重量不能为负数\");\n return;\n }\n if (this.spec_table_Data.length > 0) {\n // 多规格\n this.base_form.specType = 2;\n specGroup = this.sku_list.map((item) => {\n return {\n groupSpec: {\n specName: item.groupSpecName,\n specId: item.groupSpecId,\n },\n params: item.params.map((item) => {\n return {\n specValueId: item.id,\n specValueName: item.specName,\n };\n }),\n };\n });\n specMultiple = this.spec_table_Data.map((item, index) => {\n let specVal = []; // 属性id\n let specId = []; // 属性组id\n let specName = []; // 属性组名\n let specValueName = []; // 属性名\n if ((item.id + \"\").indexOf(\"_\") > -1) {\n specVal = item.id.split(\"_\");\n specId = item.groupSpecId.split(\"_\");\n specValueName = item.specName.split(\"_\");\n specName = item.groupSpecName.split(\"_\");\n } else {\n specVal = [item.id];\n specId = [item.groupSpecId];\n specName = [item.groupSpecName];\n specValueName = [item.specName];\n }\n // 条码\n let barCodeO = {};\n let isDefaultO = {};\n let weightO = {};\n item.barCode.forEach((itemB) => {\n barCodeO[itemB.unitId] = itemB.barCode;\n isDefaultO[itemB.unitId] = itemB.isDefault;\n weightO[itemB.unitId] = itemB.weight;\n });\n let returnParams = {\n specImage: item.specImage.url,\n specGroup: specVal.map((itemV, indexV) => {\n return {\n specId: specId[indexV],\n specName: specName[indexV],\n specValueName: specValueName[indexV],\n specValueId: itemV,\n };\n }),\n barCode: barCodeO,\n isDefault: isDefaultO,\n weight: weightO,\n };\n if (this.$route.params.id) {\n returnParams.specGroupHash = item.specGroupHash;\n returnParams.id = item.id_D;\n }\n return returnParams;\n });\n } else {\n this.base_form.specType = 1;\n }\n let unitDataD = this.$_common.deepClone(this.base_form.branchUnit);\n unitDataD.unshift(this.base_form.masterUnit);\n const unitDataA = unitDataD.map((item) => {\n if (this.base_form.specType === 2) {\n item.barCode = \"\";\n item.isDefault = 4;\n item.weight = \"\";\n }\n if (\n this.base_form.delSpecSkuIds.indexOf(item.specGroupHash) !==\n -1 &&\n this.base_form.specType === 1\n ) {\n delete item.id;\n }\n return item;\n });\n // 副分类数据组装\n let assistCategoryPath = [];\n let assistCategoryId = [];\n // 过滤只有选择分类的数据\n const assistCate = this.assist_cate.filter(\n (item) => !!item.assistCategoryPath.length\n );\n assistCate.forEach((item) => {\n assistCategoryPath.push(item.assistCategoryPath.join(\",\"));\n assistCategoryId.push(\n item.assistCategoryPath[item.assistCategoryPath.length - 1]\n );\n });\n const params = {\n merchantId: this.base_form.merchantId,\n categoryPath: this.base_form.categoryPath.join(\",\"),\n assistCategoryPath: assistCategoryPath,\n categoryId: this.base_form.categoryId,\n assistCategoryId: assistCategoryId.join(\",\"),\n title: this.base_form.title,\n storage: this.base_form.storage,\n delUnitIds: this.base_form.delUnitIds,\n delSpecSkuIds: this.base_form.delSpecSkuIds,\n specType: this.base_form.specType,\n specGroup: specGroup,\n specMultiple: specMultiple,\n unitData: unitDataA,\n describe: this.base_form.describe,\n code: this.base_form.code,\n barCode: this.base_form.barCode,\n expireTime: this.base_form.expireTime,\n isEq: this.base_form.isEq,\n brandId: this.base_form.brandId,\n tag: this.dynamicTags.join(\",\"),\n description: this.base_form.description,\n noSalesShop: this.base_form.noSalesShop.join(\",\"),\n images: this.base_form.images,\n };\n this.loading = true;\n let target = {};\n try {\n if (this.$route.params.id) {\n target = await editGoodsBasic(this.base_goods_id, params);\n } else {\n target = await addGoodsBasic(params);\n }\n const data = target;\n this.loading = false;\n\n this.$message({\n type: \"success\",\n message: \"提交成功\",\n });\n await this.delPauseSave();\n this.$closeCurrentGoEdit(`/goods/manageG/BaseDataList`);\n } catch {\n this.loading = false;\n }\n }\n });\n },\n // 商品分类选择\n categoryChange(val, row) {\n // this.base_form.categoryPath = row;\n this.base_form.categoryId = val[val.length - 1];\n // this.base_form.categoryPath.push(this.$_common.deepClone(goodsItem));\n },\n // 品牌选择\n brandConfirm(val) {\n if (val.length > 1) {\n this.$message({\n type: \"error\",\n message: \"请选择一个品牌!\",\n });\n return;\n }\n this.base_form.brandName = val[0].title;\n this.base_form.brandId = val[0].id;\n },\n async getAllMerchantList() {\n const { data } = await getAllMerchantList();\n this.sel_cities = data;\n },\n // 商品分类列表\n async getAllCategoryPost() {\n const { data } = await getAllCategoryPost({\n enableStatus: 5,\n });\n\n if (JSON.stringify(data) === \"{}\") {\n this.category_data = [];\n } else {\n this.category_data = data;\n }\n },\n // 自定义选择即改变\n clickChange(event) {\n event.target.parentElement.parentElement.firstChild.click();\n },\n delAssistCate(index) {\n this.assist_cate.splice(index, 1);\n },\n addAssistCate() {\n this.assist_cate.push({\n assistCategoryPath: [],\n });\n },\n // 下一步\n tagNext() {\n if (this.page_tabs === \"1\") {\n this.$refs[\"base_form\"].validate((valid) => {\n if (valid) {\n if (!this.base_form.masterUnit.unitId) {\n this.$message.warning(\"请选择基本单位\");\n return;\n }\n this.page_tabs = \"2\";\n this.step_active = 2;\n }\n });\n } else if (this.page_tabs === \"2\") {\n if (!this.base_form.images.length) {\n this.$message.warning(\"请上传商品图片\");\n return;\n }\n this.page_tabs = \"3\";\n this.step_active = 3;\n }\n },\n // 上一步\n tagLast() {\n if (this.page_tabs === \"3\") {\n this.step_active = 2;\n this.page_tabs = \"2\";\n } else if (this.page_tabs === \"2\") {\n this.page_tabs = \"1\";\n this.step_active = 1;\n }\n },\n tabClick() {\n if (this.page_tabs === \"1\") {\n this.step_active = 1;\n } else if (this.page_tabs === \"2\") {\n this.step_active = 2;\n } else if (this.page_tabs === \"3\") {\n this.step_active = 3;\n }\n },\n // 抄码商品切换\n isEqChange(val) {\n if (this.isEditSpec !== 4 && val === 5) {\n this.base_form.masterUnit = {\n isDefault: 5,\n isMaster: 5,\n weight: \"\",\n unitName: \"\",\n unitId: \"\",\n barCode: \"\",\n };\n this.base_form.branchUnit = [];\n }\n },\n },\n };\n</script>\n<style lang=\"scss\">\n .goods-tab-view {\n .el-tabs__nav {\n padding-left: 28px !important;\n }\n .el-tabs__active-bar {\n left: 28px !important;\n }\n }\n</style>\n<style scoped lang=\"scss\">\n .goods-tab-view {\n height: 64px;\n overflow: hidden;\n position: relative;\n .btn-view {\n z-index: 99;\n position: absolute;\n right: 36px;\n top: 50%;\n transform: translateY(-50%);\n }\n }\n .goodsCate {\n position: relative;\n margin-bottom: 2px;\n }\n .addCate {\n position: absolute;\n left: 290px;\n top: 7px;\n }\n .creat-shop {\n color: #1890ff;\n font-size: 12px;\n }\n .sku-name-item {\n background-color: #f4f4f4;\n padding: 5px 0;\n }\n ::v-deep .el-tabs__item {\n height: 64px;\n line-height: 64px;\n font-size: 16px;\n font-weight: bold;\n color: #4f5e7b;\n }\n ::v-deep .is-active {\n color: #2153d4;\n }\n .order_top {\n width: 100%;\n background-color: #ffffff;\n border-radius: 3px;\n .order_top_content {\n padding: 20px 0 16px;\n }\n }\n .order_midden {\n margin-top: 16px;\n width: 100%;\n min-height: 600px;\n //height: 480px;\n background-color: #ffffff;\n border-radius: 3px;\n position: relative;\n .order_midden_top {\n position: absolute;\n top: 12px;\n right: 32px;\n z-index: 99;\n .salf-code {\n line-height: 32px;\n display: inline-block;\n font-size: 16px;\n font-weight: 500;\n color: #36b365;\n margin-right: 32px;\n vertical-align: middle;\n }\n .confirm {\n text-align: center;\n display: inline-block;\n width: 70px;\n height: 20px;\n //line-height: 20px;\n background-color: $base-color-blue;\n color: #ffffff;\n margin-right: 1px;\n margin-left: 10px;\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n }\n .con {\n width: 20px;\n text-align: center;\n display: inline-block;\n line-height: 20px;\n background-color: $base-color-blue;\n color: #ffffff;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n }\n }\n .order_midden_left {\n margin-top: 16px;\n width: 95%;\n height: 350px;\n border-right: 1px solid #dee2ee;\n }\n .order_midden_m {\n margin-top: 16px;\n width: 95%;\n height: 350px;\n border-right: 1px solid #dee2ee;\n }\n .order_midden_right {\n margin-top: 16px;\n }\n }\n .order_midden_left_text {\n font-weight: bold;\n font-size: 16px;\n padding: 24px 20px 32px;\n .el-icon-arrow-right {\n font-weight: bold;\n margin-right: 4px;\n font-size: 14px;\n }\n .desc-span {\n font-size: 12px;\n font-weight: normal;\n color: #f57931;\n }\n }\n /* ::v-deep .el-tag {\n min-width: 80px;\n border-radius: 3px;\n font-size: 14px;\n margin-right: 12px;\n position: relative;\n }\n ::v-deep .el-tag__close {\n position: absolute;\n right: 5px;\n top: 5px;\n }*/\n .detail-edit-view {\n padding: 27px 30px;\n }\n .bottom-btn {\n width: 140px;\n height: 36px;\n border-radius: 4px;\n font-size: 14px;\n }\n</style>\n"]}]}