13297d9a-7696-4c46-96e0-0bbebf0919d2.js.map 74.7 KB
{"version":3,"sources":["assets/script/game/model/GameModelManager.ts"],"names":[],"mappings":";;;;;;;AAAA,mEAAsD;AACtD,yDAA6C;AAC7C,+DAAqD;AACrD,mDAA8D;AAC9D,yCAAwC;AACxC,6CAA+D;AAC/D,uCAAkL;AAClL,uDAA4D;AAC5D,yDAAsD;AACtD,gFAA6E;AAC7E,8EAA6F;AAE7F,kEAA+D;AAC/D,wDAAqD;AACrD,wDAAqD;AACrD,0EAAuE;AACvE,4CAAgD;AAChD,0EAAuE;AACvE,iDAA2C;AAC3C,oCAAsK;AAEtK,mEAAmF;AACnF,2DAAoD;AACpD,2DAAwD;AACxD,mFAAgF;AAEhF;;GAEG;AACH,IAAiB,gBAAgB,CA0hChC;AA1hCD,WAAiB,gBAAgB;IAC7B,IAAI,OAAO,GAAG,IAAI,wBAAO,CAAC;IAEb,oCAAmB,GAAG,OAAO,CAAC,WAAW,EAAyC,CAAC;IACnF,uCAAsB,GAAG,OAAO,CAAC,WAAW,EAA6C,CAAC;IAC1F,+BAAc,GAAG,OAAO,CAAC,WAAW,EAAc,CAAC,CAAA,UAAU;IAC7D,8BAAa,GAAG,OAAO,CAAC,WAAW,EAAc,CAAC,CAAA,YAAY;IAC9D,4BAAW,GAAG,OAAO,CAAC,WAAW,EAAmC,CAAC,CAAA,UAAU;IAE/E,0CAAyB,GAAG,OAAO,CAAC,WAAW,EAAgD,CAAC,CAAA,YAAY;IAE5G,gCAAe,GAAG,OAAO,CAAC,WAAW,EAAc,CAAC,CAAA,UAAU;IAE9D,mCAAkB,GAAG,OAAO,CAAC,WAAW,EAAc,CAAC,CAAA,QAAQ;IAE/D,kCAAiB,GAAG,OAAO,CAAC,WAAW,EAAwB,CAAC;IAChE,qCAAoB,GAAG,OAAO,CAAC,WAAW,EAAwB,CAAC;IAEhF,gBAAgB;IACH,oCAAmB,GAAG,OAAO,CAAC,WAAW,EAAc,CAAC;IAExD,2BAAU,GAAG,OAAO,CAAC,WAAW,EAA4B,CAAC;IAE1E,oBAAoB;IACP,iCAAgB,GAAG,OAAO,CAAC,WAAW,EAAc,CAAC;IAClE,mBAAmB;IACN,0BAAS,GAAG,OAAO,CAAC,WAAW,EAAyB,CAAC;IACtE,YAAY;IACC,qCAAoB,GAAG,OAAO,CAAC,WAAW,EAAwB,CAAC;IAChF,eAAe;IACF,uCAAsB,GAAG,OAAO,CAAC,WAAW,EAAwB,CAAC;IAClF,YAAY;IACC,oCAAmB,GAAG,OAAO,CAAC,WAAW,EAAc,CAAC;IACrE,0BAA0B;IACb,6BAAY,GAAG,OAAO,CAAC,WAAW,EAAoC,CAAC;IACpF,iBAAiB;IACJ,iCAAgB,GAAG,OAAO,CAAC,WAAW,EAA8B,CAAC;IAClF,YAAY;IACC,iCAAgB,GAAG,OAAO,CAAC,WAAW,EAA8B,CAAC;IAElF,IAAI,aAA8C,CAAC;IACnD,oDAAoD;IACpD,IAAI,gBAAqD,CAAC;IAE1D,IAAI,cAAc,GAAW,CAAC,CAAC,CAAC;IAEhC,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,IAAI,oBAAoB,GAAY,KAAK,CAAC;IAC1C,IAAI,UAAU,GAAY,IAAI,CAAC;IAE/B,IAAI,yBAAyB,GAAY,IAAI,CAAC;IAE9C,IAAI,YAAY,GAAsB,EAAE,CAAC;IAGzC,SAAgB,qBAAqB,KAAK,OAAO,oBAAoB,CAAA,CAAC,CAAC;IAAvD,sCAAqB,wBAAkC,CAAA;IAEvE,SAAgB,wBAAwB,CAAC,QAAiB;QACtD,oBAAoB,GAAG,QAAQ,CAAC;IACpC,CAAC;IAFe,yCAAwB,2BAEvC,CAAA;IAED,SAAgB,mBAAmB,KAAK,OAAO,UAAU,CAAA,CAAC,CAAC;IAA3C,oCAAmB,sBAAwB,CAAA;IAE3D,SAAgB,sBAAsB,CAAC,QAAiB;QACpD,UAAU,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAFe,uCAAsB,yBAErC,CAAA;IAEM,KAAK,UAAU,yBAAyB;QAC3C,IAAI,cAAc,IAAI,CAAC,IAAI,cAAc,GAAG,gBAAU,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YACvF,IAAI,GAAG,GAAG,MAAM,iBAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC5D,aAAa,EAAE,CAAC;YAChB,OAAO,GAAG,CAAC;SACd;aAAM;YACH,OAAO,iBAAW,CAAC,eAAe,EAAE,CAAC;SACxC;IACL,CAAC;IARqB,0CAAyB,4BAQ9C,CAAA;IAED,kBAAkB;IAClB,IAAI,YAAY,GAAmC,IAAI,GAAG,EAA6B,CAAC;IACxF,IAAI,YAAY,GAAwB,IAAI,GAAG,EAAkB,CAAC,CAAO,IAAI;IAC7E,YAAY;IAEZ,SAAgB,qBAAqB;QACjC,OAAO,aAAc,CAAC;IAC1B,CAAC;IAFe,sCAAqB,wBAEpC,CAAA;IAED,SAAgB,oBAAoB,CAAC,EAAU;QAC3C,OAAO,aAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAFe,qCAAoB,uBAEnC,CAAA;IAED,SAAgB,6BAA6B;QACzC,OAAO,gBAAiB,CAAC;IAC7B,CAAC;IAFe,8CAA6B,gCAE5C,CAAA;IAED,SAAgB,4BAA4B,CAAC,EAAU;QACnD,OAAO,gBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;IAFe,6CAA4B,+BAE3C,CAAA;IAED,SAAgB,2CAA2C,CAAC,YAAoB;QAC5E,IAAI,MAAM,GAA4B,EAAE,CAAC;QACzC,IAAI,CAAC,gBAAgB,EAAE;YACnB,OAAO,EAAE,CAAC;SACb;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,IAAI,oCAAa,CAAC,SAAS,CAAC,iCAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,KAAK,YAAY,EAAE;gBACjG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;aACpC;SACJ;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAXe,4DAA2C,8CAW1D,CAAA;IAED,IAAI,QAAQ,GAAY,KAAK,CAAC;IAC9B;;MAEE;IACK,KAAK,UAAU,aAAa,CAAC,KAAe;QAC/C,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;YACpB,4DAA4D;YAC5D,OAAO;SACV;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,mBAAa,CAAC,aAAa,KAAK,GAAG,IAAI,mBAAa,CAAC,GAAG,KAAK,GAAG,EAAE;gBAClE,iFAAiF;gBACjF,SAAS;aACZ;YACD,IAAI,CAAC,GAAG,MAAM,aAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,CAAC,EAAE;gBACJ,oDAAoD;gBACpD,SAAS;aACZ;YACD,IAAI,iBAAA,SAAS,EAAE;gBACX,iBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACrB;YACD,IAAI,UAAU,GAAY,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,UAAU,EAAE;gBACZ,qEAAqE;gBACrE,SAAS;aACZ;YACD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAC7B,IAAI,KAAK,GAAG,MAAM,iBAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACtD,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAClC;QACD,QAAQ,GAAG,KAAK,CAAC;IACrB,CAAC;IA/BqB,8BAAa,gBA+BlC,CAAA;IAGD;;;;MAIE;IACF,SAAS,oBAAoB,CAAC,MAAc;QACxC,MAAM,eAAe,GAAW,oBAAoB,CAAC;QACrD,IAAI,GAAG,GAAY,KAAK,CAAC;QACzB,IAAI,OAAO,GAA2C,EAAE,CAAC;QACzD,IAAI,SAAS,GAAW,gBAAU,CAAC,eAAe,CAAC,eAAe,CAAW,CAAC;QAC9E,IAAI,SAAS,IAAI,EAAE,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE;YACtC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAA2C,CAAC;SAC7E;QACD,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,SAAS,kBAAkB,CAAC,MAAc,EAAE,KAAa;QACrD,MAAM,eAAe,GAAW,oBAAoB,CAAC;QACrD,IAAI,KAAK,GAAY,KAAK,CAAC;QAC3B,IAAI,OAAO,GAA2C,EAAE,CAAC;QACzD,IAAI,SAAS,GAAW,gBAAU,CAAC,eAAe,CAAC,eAAe,CAAW,CAAC;QAC9E,IAAI,SAAS,IAAI,EAAE,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE;YACtC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAA2C,CAAC;SAC7E;QACD,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,CAAC,IAAI,CAAC;gBACT,SAAS,EAAE,MAAM;gBACjB,KAAK,EAAE,KAAK;aACf,CAAC,CAAC;YACH,gBAAU,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACtE,gBAAU,CAAC,UAAU,EAAE,CAAC;SAC3B;IACL,CAAC;IAED;;;;;OAKG;IACH,SAAgB,eAAe,CAAC,eAAuB,EAAE,aAAqB;QAC1E,IAAI,CAAC,GAAG,yCAAiB,CAAC,GAAG,CAAC;QAC9B,IAAI,IAAI,GAAG,iBAAW,CAAC,eAAe,EAAE,CAAC;QACzC,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC;QACjF,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,eAAe,IAAI,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC;QACxG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,yCAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,yCAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,yCAAiB,CAAC,SAAS,CAAC;QAC1G,OAAO,CAAC,CAAC;IACb,CAAC;IAPe,gCAAe,kBAO9B,CAAA;IAED,kBAAkB;IAClB,SAAgB,qBAAqB;QACjC,MAAM,eAAe,GAAW,oBAAoB,CAAC;QACrD,IAAI,OAAO,GAA2C,EAAE,CAAC;QACzD,IAAI,SAAS,GAAW,gBAAU,CAAC,eAAe,CAAC,eAAe,CAAW,CAAC;QAC9E,IAAI,SAAS,IAAI,EAAE,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE;YACtC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAA2C,CAAC;SAC7E;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IARe,sCAAqB,wBAQpC,CAAA;IAED,IAAI,uBAAuB,GAAW,iBAAiB,CAAC;IACxD,YAAY;IACZ,SAAgB,iBAAiB,CAAC,QAAgB;QAC9C,IAAI,IAAI,GAAG,gBAAU,CAAC,eAAe,CAAC,uBAAuB,CAAW,CAAC;QACzE,IAAI,IAAI,GAAa,EAAE,CAAC;QACxB,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE;YACrB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;SACvC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,gBAAU,CAAC,eAAe,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3E,gBAAU,CAAC,UAAU,EAAE,CAAC;SAC3B;IACL,CAAC;IAZe,kCAAiB,oBAYhC,CAAA;IAED,cAAc;IACd,SAAgB,qBAAqB,CAAC,QAAgB;QAClD,IAAI,IAAI,GAAG,gBAAU,CAAC,eAAe,CAAC,uBAAuB,CAAW,CAAC;QACzE,IAAI,IAAI,GAAa,EAAE,CAAC;QACxB,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE;YACrB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;SACvC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACjB,CAAC;IARe,sCAAqB,wBAQpC,CAAA;IAED,IAAI,yBAAyB,GAAW,mBAAmB,CAAC;IAC5D,YAAY;IACZ,SAAgB,mBAAmB,CAAC,QAAgB;QAChD,IAAI,IAAI,GAAG,gBAAU,CAAC,eAAe,CAAC,yBAAyB,CAAW,CAAC;QAC3E,IAAI,IAAI,GAAa,EAAE,CAAC;QACxB,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE;YACrB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;SACvC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,gBAAU,CAAC,eAAe,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7E,gBAAU,CAAC,UAAU,EAAE,CAAC;SAC3B;IACL,CAAC;IAZe,oCAAmB,sBAYlC,CAAA;IAED,cAAc;IACd,SAAgB,uBAAuB,CAAC,QAAgB;QACpD,IAAI,IAAI,GAAG,gBAAU,CAAC,eAAe,CAAC,yBAAyB,CAAW,CAAC;QAC3E,IAAI,IAAI,GAAa,EAAE,CAAC;QACxB,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE;YACrB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;SACvC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACjB,CAAC;IARe,wCAAuB,0BAQtC,CAAA;IAQD,KAAK,UAAU,cAAc;QACzB,MAAM,oCAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,kBAAkB,EAAE,CAAC;QAC3B,cAAc,EAAE,CAAC;IACrB,CAAC;IAGD,SAAgB,iBAAiB,CAAC,EAAU;QACxC,IAAI,GAAG,GAAG,oCAAa,CAAC,SAAS,CAAC,uBAAU,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,GAAG,CAAC,EAAE,CAAC;IAClB,CAAC;IAHe,kCAAiB,oBAGhC,CAAA;IAED,SAAS,cAAc;QACnB,IAAI,GAAG,GAAG,oCAAa,CAAC,YAAY,CAAC,WAAI,CAAC,CAAC;QAC3C,KAAK,IAAI,EAAE,IAAI,GAAG,EAAE;YAChB,IAAI,OAAO,GAAG,GAAG,CAAC,EAAE,CAAU,CAAC;YAC/B,IAAI,OAAO,EAAE;gBACT,IAAI,IAAI,GAAG,IAAI,2BAAiB,EAAE,CAAC;gBACnC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACxB,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;aACtC;SACJ;IACL,CAAC;IAED,SAAS,eAAe;QACpB,OAAO,2BAA2B,CAAC;IACvC,CAAC;IACD,KAAK,UAAU,kBAAkB;QAC7B,IAAI,OAAO,GAAG,MAAM,4BAAQ,CAAC,OAAO,CAAM,eAAe,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,OAAO,EAAE;YACT,IAAI,IAAI,GAAe,OAAqB,CAAC;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBAClC,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAa,CAAC;gBAClC,IAAI,OAAO,EAAE;oBACT,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;iBAC/C;aACJ;SACJ;IACL,CAAC;IAED,SAAgB,cAAc,CAAC,EAAU;QACrC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACtB,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,CAAW,CAAC;SACzC;aAAM;YACH,oDAAoD;YACpD,OAAO,EAAE,CAAC;SACb;IACL,CAAC;IAPe,+BAAc,iBAO7B,CAAA;IAED,SAAgB,oBAAoB,CAAC,EAAU;QAC3C,OAAO,oCAAa,CAAC,SAAS,CAAC,uBAAU,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IAFe,qCAAoB,uBAEnC,CAAA;IAED,SAAgB,aAAa,CAAC,EAAU;QACpC,OAAO,oCAAa,CAAC,SAAS,CAAC,uBAAU,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAFe,8BAAa,gBAE5B,CAAA;IAED,SAAgB,cAAc;QAC1B,OAAO,oCAAa,CAAC,YAAY,CAAC,uBAAU,CAAC,CAAC;IAClD,CAAC;IAFe,+BAAc,iBAE7B,CAAA;IAED,SAAgB,WAAW,CAAC,EAAU;QAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACvB,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IALe,4BAAW,cAK1B,CAAA;IAED,SAAgB,aAAa;QACzB,OAAO,gBAAgB,CAAC,WAAW,CAAC,6BAAa,CAAC,4BAA4B,CAAE,CAAC;IACrF,CAAC;IAFe,8BAAa,gBAE5B,CAAA;IAED,IAAI,UAA+B,CAAC;IAE7B,KAAK,UAAU,IAAI,CAAC,UAAqB;QAC5C,MAAM,cAAc,EAAE,CAAC;QACvB,IAAI,UAAU;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,gBAAgB,GAAG,EAAE,CAAC;QACtB,cAAc,GAAG,gBAAU,CAAC,eAAe,CAAC,QAAQ,CAAW,CAAC;QAChE,UAAU,GAAG,CAAC,CAAC,gBAAU,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QAC3D,IAAI,cAAc,KAAK,SAAS;YAAE,cAAc,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,OAAO,GAAmB,EAAE,CAAC;QACjC,EAAE,sBAAsB;YACpB,IAAI,GAAG,GAAG,gBAAU,CAAC,eAAe,CAAC,OAAO,CAAQ,CAAC;YACrD,IAAI,GAAG,KAAK,SAAS,EAAE;gBACnB,aAAa,GAAG,EAAE,CAAC;gBACnB,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,qCAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,GAAG,aAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;aACnE;iBAAM;gBACH,aAAa,GAAG,EAAE,CAAC;aACtB;SACJ;QACD,EAAE,0BAA0B;YACxB,IAAI,GAAG,GAAG,gBAAU,CAAC,eAAe,CAAC,OAAO,CAAQ,CAAC;YACrD,IAAI,GAAG,KAAK,SAAS,EAAE;gBACnB,gBAAgB,GAAG,EAAE,CAAC;gBACtB,gBAAgB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,6CAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;aACtE;iBAAM;gBACH,gBAAgB,GAAG,EAAE,CAAC;aACzB;SACJ;QAED,EAAC,kBAAkB;YACf,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;gBAChC,wCAAwC;gBACxC,qCAAY,CAAC,UAAU,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;gBAChC,mCAAmC;gBACnC,qCAAY,CAAC,WAAW,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAC9B;QACD,IAAI,UAAU;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE;YACb,UAAU,GAAG,IAAI,oCAAmB,CAAC;YACrC,UAAU,CAAC,GAAG,CAAC,iBAAW,CAAC,aAAa,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAClE,UAAU,CAAC,GAAG,CAAC,2BAAY,CAAC,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1D,UAAU,CAAC,GAAG,CAAC,2BAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACzE,UAAU,CAAC,GAAG,CAAC,2BAAY,CAAC,UAAU,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACxD,UAAU,CAAC,GAAG,CAAC,2BAAY,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;SACjE;QACD,SAAS,EAAE,CAAC;QACZ,IAAI,UAAU;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjC,KAAK,IAAI,KAAK,IAAI,gBAAiB,EAAE,EAAE,WAAW;YAC9C,IAAI,iBAAA,SAAU,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,qBAAa,CAAC,WAAW;gBACzD,CAAC,KAAK,CAAC,EAAE,KAAK,iBAAA,SAAU,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,KAAK,yCAAiB,CAAC,SAAS,CAAC,EAAE;gBAC9F,KAAK,CAAC,MAAM,GAAG,yCAAiB,CAAC,SAAS,CAAC;aAC9C;SACJ;QACD,IAAI,UAAU;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAErC,CAAC;IAhEqB,qBAAI,OAgEzB,CAAA;IAED,SAAS,YAAY,CAAC,MAAc;QAChC,IAAI,CAAC,GAAG,MAAM,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpB,iBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACtB;IACL,CAAC;IAED,SAAS,WAAW,CAAC,GAAW;QAC5B,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpB,iBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACrB;IACL,CAAC;IAED,SAAS,cAAc,CAAC,IAAY;QAChC,IAAI,CAAC,GAAG,IAAI,CAAC;QACb,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAqB,CAAC;YACxC,iBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;IACL,CAAC;IAED,SAAgB,mBAAmB,CAAC,aAAqB;QACrD,IAAI,CAAC,GAAG,aAAa,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpB,6DAA6B,CAAC,6CAA6C,CAAC,CAAC,CAAC,CAAC;SAClF;IACL,CAAC;IANe,oCAAmB,sBAMlC,CAAA;IAED;;;;OAIG;IACH,SAAgB,qBAAqB,CAAC,KAAa,EAAE,MAAkB;QACnE,IAAI,CAAC,GAAG,gBAAU,CAAC,eAAe,CAAC,gBAAgB,GAAG,KAAK,CAAW,CAAC;QACvE,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;YAClB,OAAO;SACV;QACD,gBAAU,CAAC,eAAe,CAAC,gBAAgB,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC;QAC9D,gBAAU,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAPe,sCAAqB,wBAOpC,CAAA;IAED;;OAEG;IACH,SAAgB,oBAAoB;QAChC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,MAAM,GAAG,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,GAAG,gBAAU,CAAC,eAAe,CAAC,gBAAgB,GAAG,CAAC,CAAW,CAAC;YACnE,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,kBAAU,CAAC,IAAI,EAAE;gBACvB,KAAK,GAAG,CAAC,CAAC;aACb;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAXe,qCAAoB,uBAWnC,CAAA;IAED;;;;OAIG;IACH,SAAgB,uBAAuB,CAAC,OAAe,EAAE,MAAkB;QACvE,IAAI,CAAC,GAAG,gBAAU,CAAC,eAAe,CAAC,gBAAgB,CAAW,CAAC;QAC/D,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,IAAI,CAAC,EAAE;YACb,OAAO;SACV;QACD,gBAAU,CAAC,eAAe,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC;QAC3D,gBAAU,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;QACtD,gBAAU,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IATe,wCAAuB,0BAStC,CAAA;IAED;;OAEG;IACH,SAAgB,oBAAoB;QAChC,IAAI,GAAG,GAAW,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,gBAAU,CAAC,eAAe,CAAC,gBAAgB,CAAW,CAAC;QAC/D,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,gBAAU,CAAC,eAAe,CAAC,oBAAoB,CAAW,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,KAAK,kBAAU,CAAC,IAAI,EAAE;YAC5B,GAAG,GAAG,CAAC,CAAC;SACX;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IATe,qCAAoB,uBASnC,CAAA;IAED;;;;OAIG;IACH,SAAgB,qBAAqB,CAAC,OAAe,EAAE,MAAkB;QACrE,IAAI,CAAC,GAAG,gBAAU,CAAC,eAAe,CAAC,gBAAgB,CAAW,CAAC;QAC/D,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,IAAI,CAAC,EAAE;YACb,OAAO;SACV;QACD,gBAAU,CAAC,eAAe,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC;QAC3D,gBAAU,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;QACtD,gBAAU,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IATe,sCAAqB,wBASpC,CAAA;IAED;;OAEG;IACH,SAAgB,kBAAkB;QAC9B,IAAI,GAAG,GAAW,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,gBAAU,CAAC,eAAe,CAAC,gBAAgB,CAAW,CAAC;QAC/D,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,gBAAU,CAAC,eAAe,CAAC,oBAAoB,CAAW,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,KAAK,kBAAU,CAAC,IAAI,EAAE;YAC5B,GAAG,GAAG,CAAC,CAAC;SACX;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IATe,mCAAkB,qBASjC,CAAA;IAGD,SAAS,IAAI;QACT,IAAI,QAAQ,GAAG,gBAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,QAAQ,GAAG,aAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAQ,CAAC;QACpD,IAAI,CAAC,0BAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACnC,gBAAU,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;SAClD;QACD,QAAQ,GAAG,gBAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/C,QAAQ,GAAG,gBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAQ,CAAC;QACnD,IAAI,CAAC,0BAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACnC,gBAAU,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;SAClD;IACL,CAAC;IAED,SAAS,aAAa;QAClB,gBAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC;QACtD,gBAAU,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,UAAU,SAAS;QACpB,IAAI,KAAK,GAAG,iBAAW,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,IAAI,EAAE;YACN,iBAAA,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,aAAa,EAAE,EAAE,mBAAmB;gBACrC,aAAa,GAAG,EAAE,CAAC;aACtB;YACD,IAAI,CAAC,gBAAgB,EAAE;gBACnB,gBAAgB,GAAG,EAAE,CAAC;aACzB;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAa,CAAC,OAAO,EAAE;oBAC9C,IAAI,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC;oBACxE,IAAI,KAAK,GAAG,CAAC,EAAE;wBACX,KAAK,GAAG,CAAC,CAAC;wBACV,IAAI,KAAK,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBACxD,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;wBACvB,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;qBAChC;iBACJ;qBAAM,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAa,CAAC,WAAW,EAAE;oBACzD,IAAI,GAAG,GAAG,oCAAa,CAAC,SAAS,CAAC,iCAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBACzE,IAAI,GAAG,CAAC,QAAQ,KAAK,sBAAQ,CAAC,WAAW,EAAE,EAAE,SAAS;wBAClD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;4BAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;4BAAC,SAAS;yBAAE;wBACnE,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE;4BACpE,IAAI,KAAK,GAAG,IAAI,6CAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;4BAC5D,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;4BACvB,KAAK,CAAC,MAAM,GAAG,yCAAiB,CAAC,GAAG,CAAC;4BACrC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;yBAChC;qBACJ;iBACJ;aACJ;YACD,IAAI,EAAE,CAAC;SACV;IACL,CAAC;IAED,KAAK,UAAU,mBAAmB,CAAC,IAAkB,EAAE,MAAc;QACjE,aAAa,CAAC,iBAAA,SAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAChD,iBAAA,SAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,KAAK,UAAU,aAAa,CAAC,QAAkC,EAAE,IAAkB,EAAE,MAAc;QAC/F,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAa,CAAC,OAAO,EAAE;YAC9C,IAAI,GAAG,GAAG,aAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC;YACvE,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,WAAW;gBACvB,IAAI,KAAK,GAAG,aAAc,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,GAAG,GAAG,CAAC,EAAE;oBACT,IAAI,UAAU,GAAG,CAAC,CAAC;oBACnB,IAAI,MAAM,GAAG,CAAC,IAAI,iBAAA,SAAS,IAAI,iBAAA,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,qBAAa,CAAC,OAAO,EAAE;wBACjF,UAAU,GAAG,CAAC,CAAC;qBAClB;oBACD,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;wBACnC,aAAc,CAAC,CAAC,CAAC,GAAG,aAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC7C;oBACD,aAAc,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;iBACtC;aACJ;iBAAM,EAAE,MAAM;gBACX,IAAI,KAAK,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACxD,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;gBACvB,aAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aACjC;YACD,iBAAA,mBAAmB,CAAC,IAAI,CAAC,aAAc,CAAC,CAAC;YACzC,IAAI,EAAE,CAAC;SACV;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAa,CAAC,SAAS,EAAE;YACvD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,qBAAa,CAAC,SAAS,EAAE;gBACjE,cAAc,GAAG,gBAAU,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC,CAAC,iBAAiB;gBAC7E,aAAa,EAAE,CAAC;aACnB;SACJ;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAa,CAAC,WAAW,EAAE;YACzD,IAAI,GAAG,GAAG,oCAAa,CAAC,SAAS,CAAC,iCAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACzE,IAAI,GAAG,CAAC,QAAQ,KAAK,sBAAQ,CAAC,WAAW,EAAE,EAAE,SAAS;gBAClD,IAAI,MAAM,KAAK,CAAC,EAAE;oBAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;oBAAC,OAAO;iBAAE;gBAC5D,IAAI,GAAG,GAAG,gBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC1E,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,MAAM;oBACjB,IAAI,KAAK,GAAG,IAAI,6CAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC5D,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;oBACvB,KAAK,CAAC,MAAM,GAAG,yCAAiB,CAAC,GAAG,CAAC;oBACrC,gBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC9B,iBAAA,sBAAsB,CAAC,IAAI,CAAC,gBAAiB,CAAC,CAAC;iBAClD;gBACD,IAAI,EAAE,CAAC;aACV;SACJ;QAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,qBAAa,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAa,CAAC,SAAS,EAAE;YAClH,cAAc,GAAG,CAAC,CAAC,CAAC;YACpB,aAAa,EAAE,CAAC;SACnB;QAED,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,OAAO;YAC3H,IAAI,QAAQ,CAAC,aAAa,KAAK,qBAAa,CAAC,WAAW,EAAE;gBACtD,IAAI,KAAK,GAAG,gBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAC3E,IAAI,KAAK;oBAAE,KAAK,CAAC,MAAM,GAAG,yCAAiB,CAAC,SAAS,CAAC;aACzD;SACJ;QAED,oBAAoB,GAAG,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC;QACzI,yBAAyB;QACzB,IAAI,CAAC,KAAK,MAAM,IAAI,kBAAkB,EAAE,EAAE;YACtC,wBAAwB,EAAE,CAAC;SAC9B;IACL,CAAC;IAED,SAAS,wBAAwB;QAC7B,IAAI,CAAC,GAAG,gBAAU,CAAC,eAAe,CAAC,WAAW,CAAW,CAAC;QAC1D,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,oBAAoB,EAAE;YACtB,CAAC,GAAG,CAAC,CAAC;SACT;aAAM;YACH,CAAC,EAAE,CAAC;SACP;QACD,gBAAU,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,SAAgB,oBAAoB;QAChC,8DAA8D;QAC9D,IAAI,IAAI,GAAG,iBAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QAE5C,IAAI,mBAAmB,GAAG,gBAAU,CAAC,eAAe,CAAC,SAAS,CAAW,CAAC,CAAA,cAAc;QACxF,mBAAmB,GAAG,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,IAAI,GAAG,iBAAiB,CAAC;QAC7B,IAAI,cAAc,GAAG,gBAAU,CAAC,eAAe,CAAC,IAAI,CAAW,CAAC;QAChE,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,cAAc,IAAI,mBAAmB,EAAE,EAAC,cAAc;YACtD,OAAO;SACV;QACD,gBAAU,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,mBAAmB,CAAC;QAE5D,IAAI,mBAAmB,GAAG,gBAAU,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAW,CAAC;QAC/F,mBAAmB,GAAG,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,mBAAmB,EAAE,CAAC;QACtB,gBAAU,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,mBAAmB,CAAC,CAAA,mBAAmB;QAEpG,IAAI,kBAAkB,EAAE,EAAE;YACtB,gBAAU,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA,0BAA0B;SACzE;QACD,gBAAU,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC;QACvD,gBAAU,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAxBe,qCAAoB,uBAwBnC,CAAA;IAED;;OAEG;IACH,SAAgB,kBAAkB;QAC9B,IAAI,mBAAmB,GAAG,gBAAU,CAAC,eAAe,CAAC,SAAS,CAAW,CAAC;QAC1E,gBAAU,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,mBAAmB,GAAG,CAAC,CAAC;QAChE,gBAAU,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAJe,mCAAkB,qBAIjC,CAAA;IAED,SAAgB,gBAAgB,CAAC,GAAW;QACxC,OAAO,gBAAU,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,4BAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,CAAC;IAFe,iCAAgB,mBAE/B,CAAA;IAED,SAAgB,WAAW,CAAC,GAAW;QACnC,OAAO,gBAAU,CAAC,eAAe,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,8BAAe,CAAC,IAAI,CAAC;IACjF,CAAC;IAFe,4BAAW,cAE1B,CAAA;IAED,SAAgB,cAAc,CAAC,GAAW,EAAE,KAAsB;QAC9D,gBAAU,CAAC,eAAe,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;QACrD,gBAAU,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAHe,+BAAc,iBAG7B,CAAA;IAED,SAAgB,oBAAoB,CAAC,IAA2B;QAC5D,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,IAAI,IAAI,EAAE;YACN,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE;gBAChB,OAAO,GAAG,CAAC;aACd;YACD,IAAI,aAAa,GAAG,gBAAU,CAAC,eAAe,CAAC,UAAU,CAAW,CAAC;YACrE,IAAI,GAAG,GAAa,EAAE,CAAC;YACvB,IAAI,aAAa,EAAE;gBACf,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAa,CAAC;aAC/C;YACD,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC3B;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAfe,qCAAoB,uBAenC,CAAA;IAED,SAAgB,uBAAuB,CAAC,OAAe;QACnD,IAAI,aAAa,GAAG,gBAAU,CAAC,eAAe,CAAC,UAAU,CAAW,CAAC;QACrE,IAAI,GAAG,GAAa,EAAE,CAAC;QACvB,IAAI,aAAa,EAAE;YACf,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAa,CAAC;SAC/C;QACD,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACnB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrB;QACD,gBAAU,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7D,gBAAU,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAZe,wCAAuB,0BAYtC,CAAA;IAED,SAAgB,YAAY;QACxB,IAAI,CAAC,GAAG,uBAAW,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC;IACnB,CAAC;IARe,6BAAY,eAQ3B,CAAA;IAED,SAAgB,kBAAkB;QAC9B,IAAI,OAAO,GAAG,iBAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,6BAAa,CAAC,2BAA2B,CAAC;IACtF,CAAC;IAHe,mCAAkB,qBAGjC,CAAA;IAED,SAAgB,eAAe;QAC3B,IAAI,IAAI,GAAW,CAAC,CAAC;QACrB,IAAI,SAAS,GAAW,qBAAqB,CAAC;QAC9C,IAAI,MAAM,GAAG,gBAAU,CAAC,eAAe,CAAC,SAAS,CAAW,CAAC;QAC7D,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IANe,gCAAe,kBAM9B,CAAA;IAED,SAAgB,YAAY,CAAC,IAAY,EAAE,cAAsB,CAAC;QAC9D,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,WAAW,GAAG,IAAI,IAAI,CAAC,uBAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,IAAI,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,WAAW,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE;YAClC,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,KAAK,EAAE;YAC3C,OAAO,IAAI,CAAC;SACf;QAAC,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE;YAChC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,WAAW,EAAE;gBAChC,IAAI,WAAW,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE;oBACvC,OAAO,IAAI,CAAC;iBACf;aACJ;SACJ;aAAM,IAAI,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC7E,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IArBe,6BAAY,eAqB3B,CAAA;IAED,SAAgB,0BAA0B,CAAC,SAAkD;QACzF,IAAI,GAAG,GAAY,KAAK,CAAC;QACzB,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;eAC5C,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;eACzB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;eACpC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;YACxC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC1D,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC1E,IAAI,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACnF,GAAG,GAAG,IAAI,CAAC;iBACd;aACJ;YACD,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC1D,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC1E,IAAI,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5D,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;oBACpD,GAAG,GAAG,IAAI,CAAC;iBACd;aACJ;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAvBe,2CAA0B,6BAuBzC,CAAA;IAED,SAAgB,yBAAyB,CAAC,KAAa;QACnD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,GAAG,oCAAa,CAAC,YAAY,CAAC,yCAAmB,CAAC,CAAC;QAC3D,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,IAAI,EAAE,IAAI,IAAI,EAAE;YACjB,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,CAAC,cAAc,CAAC;YAC7B,IAAI,KAAK,IAAI,MAAM,EAAE;gBACjB,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;aAClB;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAZe,0CAAyB,4BAYxC,CAAA;IAED,SAAgB,6BAA6B;QACzC,yBAAyB,GAAG,KAAK,CAAC;IACtC,CAAC;IAFe,8CAA6B,gCAE5C,CAAA;IAED,SAAgB,mBAAmB,CAAC,QAAyB;QACzD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC/B;aAAM;YACH,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxD,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC/B;SACJ;IACL,CAAC;IARe,oCAAmB,sBAQlC,CAAA;IAED,SAAgB,gBAAgB;QAC5B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,OAAO;SACV;QACD,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAmB,EAAE,EAAmB,EAAE,EAAE;YAC1E,OAAO,EAAE,GAAG,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE;YACH,iBAAA,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACvB;IACL,CAAC;IAXe,iCAAgB,mBAW/B,CAAA;IAED,SAAgB,wBAAwB;QACpC,IAAI,MAAM,GAAY,KAAK,CAAC;QAC5B,IAAI,UAAU,GAAW,iBAAiB,CAAC;QAC3C,IAAI,UAAU,GAAG,gBAAU,CAAC,eAAe,CAAC,UAAU,CAAW,CAAC;QAClE,IAAI,UAAU,EAAE;YACZ,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;SACrC;aAAM;YACH,IAAI,UAAU,GAAW,iBAAiB,CAAC;YAC3C,gBAAU,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,uBAAW,CAAC,OAAO,EAAE,CAAC;SAClE;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAXe,yCAAwB,2BAWvC,CAAA;IAEM,KAAK,UAAU,eAAe,CAAC,SAAmB;QACrD,IAAI,IAAI,GAAG,wBAAwB,EAAE,CAAC;QACtC,IAAI,OAAO,GAAG,iBAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,qBAAa,CAAC,SAAS,EAAE;YAC9D,IAAI,IAAI,IAAI,SAAS,EAAE;gBACnB,MAAM,iBAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACxC,IAAI,UAAU,GAAW,iBAAiB,CAAC;gBAC3C,gBAAU,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,uBAAW,CAAC,OAAO,EAAE,CAAC;gBAC/D,iBAAA,kBAAkB,CAAC,IAAI,EAAE,CAAC;aAC7B;iBAAM;gBACH,iBAAA,eAAe,CAAC,IAAI,EAAE,CAAC;aAC1B;SACJ;IACL,CAAC;IAbqB,gCAAe,kBAapC,CAAA;IAED,SAAgB,kBAAkB;QAC9B,IAAI,OAAO,GAAY,KAAK,CAAC;QAC7B,IAAI,OAAO,GAAG,iBAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,qBAAa,CAAC,SAAS,EAAE;YAC9D,OAAO,GAAG,IAAI,CAAC;SAClB;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAPe,mCAAkB,qBAOjC,CAAA;IAED,SAAgB,oBAAoB;QAChC,IAAI,CAAC,GAAG,iBAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAHe,qCAAoB,uBAGnC,CAAA;IAGD,IAAI,gBAAgB,GAAa,EAAE,CAAC;IAEpC,SAAgB,2BAA2B,CAAC,MAAc;QACtD,IAAI,GAAG,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,GAAG,CAAC;IACf,CAAC;IAHe,4CAA2B,8BAG1C,CAAA;IAED,SAAgB,mBAAmB,CAAC,MAAc;QAC9C,IAAI,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,EAAE;YACR,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACjC;IACL,CAAC;IALe,oCAAmB,sBAKlC,CAAA;IAED;;;;OAIG;IACH,SAAgB,sBAAsB,CAAC,IAAY;QAC/C,IAAI,IAAI,GAAW,EAAE,CAAC;QACtB,IAAI,GAAG,GAAG,oCAAa,CAAC,YAAY,CAAC,yCAAmB,CAAC,CAAC;QAC1D,IAAI,GAAG,EAAE;YACL,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;gBAClB,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;oBACtB,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;iBAC7B;aACJ;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAXe,uCAAsB,yBAWrC,CAAA;IAED;;;;OAIG;IACH,SAAgB,sBAAsB,CAAC,IAAY;QAC/C,IAAI,IAAI,GAAW,EAAE,CAAC;QACtB,IAAI,GAAG,GAAG,oCAAa,CAAC,YAAY,CAAC,yCAAmB,CAAC,CAAC;QAC1D,IAAI,GAAG,EAAE;YACL,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;gBAClB,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;oBACtB,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;iBAC5B;aACJ;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAXe,uCAAsB,yBAWrC,CAAA;IAED;;;OAGG;IACH,SAAgB,gBAAgB,CAAC,GAAW;QACxC,IAAI,oBAAO,IAAI,OAAO,EAAE;YACpB,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrB;aAAM;YACH,IAAI,WAAW,GAAW,mBAAmB,CAAC;YAC9C,IAAI,SAAS,GAAW,cAAc,CAAC;YACvC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,qCAAqC,EAAE,kBAAkB,EAAE,2DAA2D,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;SACxL;IACL,CAAC;IATe,iCAAgB,mBAS/B,CAAA;IAED,cAAc;IACd,MAAM,gBAAgB,GAAa,CAAC,mBAAa,CAAC,eAAe,EAAE,mBAAa,CAAC,GAAG,EAAE,mBAAa,CAAC,aAAa,CAAC,CAAC;IACnH,mBAAmB;IACZ,KAAK,UAAU,cAAc,CAAC,MAAc;QAC/C,IAAI,WAAW,GAA6B,SAAS,CAAC;QACtD,IAAI,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,IAAI,aAAa,EAAE;YACf,EAAE,CAAC,KAAK,CAAC,6CAA6C,EAAE,MAAM,CAAC,CAAC;YAChE,OAAO,SAAS,CAAC;SACpB;QACD,IAAI;YACA,IAAI,IAAI,GAAG,MAAM,aAAO,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;gBACjC,IAAI,OAAO,EAAE;oBACT,WAAW,GAAG;wBACV,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,OAAO,EAAE,EAAE;qBACd,CAAC;oBACF,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAY,CAAC,IAAI,EAAE;wBACpC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,4BAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;qBACnE;yBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAY,CAAC,MAAM,EAAE;wBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BAC3C,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;4BAC7B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,kBAAY,CAAC,IAAI,EAAE;gCAC3D,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,4BAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;6BACzE;iCAAM;gCACH,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;6BAC3C;yBACJ;qBACJ;iBACJ;qBAAM;oBACH,EAAE,CAAC,KAAK,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;iBACvD;aACJ;iBAAM;gBACH,EAAE,CAAC,IAAI,CAAC,kDAAkD,EAAE,MAAM,CAAC,CAAC;aACvE;SACJ;QAAC,OAAO,KAAK,EAAE;YACZ,EAAE,CAAC,KAAK,CAAC,gCAAgC,GAAG,MAAM,GAAG,gBAAgB,EAAE,KAAK,CAAC,CAAC;YAC9E,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;IAzCqB,+BAAc,iBAyCnC,CAAA;IAED;;;OAGG;IACH,SAAgB,iBAAiB,CAAC,QAAiB;QAC/C,IAAI,kBAAkB,GAAuB;YACzC,IAAI,EAAE,uBAAW,CAAC,OAAO,EAAE;YAC3B,QAAQ,EAAE,QAAQ;SACrB,CAAC;QACF,gBAAU,CAAC,eAAe,CAAC,oBAAoB,CAAC,GAAG,kBAAkB,CAAC;QACtE,gBAAU,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAPe,kCAAiB,oBAOhC,CAAA;IAED;;;OAGG;IACH,SAAgB,iBAAiB;QAC7B,IAAI,kBAAkB,GAAG,gBAAU,CAAC,eAAe,CAAC,oBAAoB,CAAuB,CAAC;QAChG,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,kBAAkB,IAAI,SAAS,EAAE;YACjC,QAAQ,GAAG,IAAI,CAAC;SACnB;aAAM;YACH,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC;YACvC,IAAI,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,MAAM,EAAE;gBACR,QAAQ,GAAG,IAAI,CAAC;gBAChB,iBAAiB,CAAC,QAAQ,CAAC,CAAC;aAC/B;SACJ;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAde,kCAAiB,oBAchC,CAAA;AACL,CAAC,EA1hCgB,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QA0hChC","file":"","sourceRoot":"/","sourcesContent":["import { AudioManager } from \"simba-cc-audio-manager\";\nimport { ResUtils } from \"simba-cc-resutils\";\nimport { ConfigManager } from \"simba-config-manager\";\nimport { CompositeDisposable, Emitter } from \"simba-eventkit\";\nimport { TimeManager } from \"simba-sdk\";\nimport { DeepReadonlyObject, shallowEqual } from \"simba-utils\";\nimport { ConditionExpression, GameRecord, getPlot, Language, PlotManager, ReadonlyPlot, ReadonlyPlots, richNodesToCocosString, SentenceType, SpecialPlotId } from \"../../avg/AVG\";\nimport { DateType, PageIndex } from \"../../avg/EditorEnums\";\nimport { EditorEvents } from \"../../avg/EditorEvents\";\nimport { GameConstData } from \"../../common/gameplay/gamedata/GameConstData\";\nimport { FuncStateEnum, RedPotStateEnum } from \"../../common/gameplay/gamedata/GameEnumData\";\nimport { ICharacterVoiceConfig } from \"../../config/CharacterVoiceConfig\";\nimport { dateSceneConfig } from \"../../config/DateSceneConfig\";\nimport { i18nConfig } from \"../../config/I18nConfig\";\nimport { itemConfig } from \"../../config/ItemConfig\";\nimport { relationLevelConfig } from \"../../config/RelationLevelConfig\";\nimport { IRole, role } from \"../../config/Role\";\nimport { taoBaoShopUrlConfig } from \"../../config/TaoBaoShopUrlConfig\";\nimport { channel } from \"../../GameConfig\";\nimport { AutoPopViewType, DiscoverItemType, FreeState, GuideState, PlotSceneType, PlotSessionState, TutorialState, TutorialType, WorkSpaceTaskState } from \"../Enums\";\nimport { SpecialToastType } from \"../ui/SpecialToast\";\nimport { DatingEventSceneModel, DatingEventStatus } from \"./DatingEventSceneModel\";\nimport GameRoleDataModel from \"./GameRoleDataModel\";\nimport { MessageSceneModel } from \"./MessageSceneModel\";\nimport { UnlockSpecialPlotModelManager } from \"./UnlockSpecialPlotModelManager\";\n\n/**\n * 游戏model管理类\n */\nexport namespace GameModelManager {\n    let emitter = new Emitter;\n\n    export const MessageSceneChanged = emitter.createEvent<(scenes: MessageSceneModel[]) => void>();\n    export const MainDatingEventChanged = emitter.createEvent<(scenes: DatingEventSceneModel[]) => void>();\n    export const CheckDateGuide = emitter.createEvent<() => void>();//约会界面检测引导\n    export const CheckMsgGuide = emitter.createEvent<() => void>();//消息列表界面检测引导\n    export const AutoPopView = emitter.createEvent<(view: AutoPopViewType) => void>();//展示自动弹出界面\n\n    export const ShowDatingEventArrowGuide = emitter.createEvent<(isShow: boolean, wordPos?: cc.Vec3) => void>();//约会列表界面展示箭头\n\n    export const ShowPlotBlocked = emitter.createEvent<() => void>();//展示剧情阻断弹窗\n\n    export const PlotBlockedChanged = emitter.createEvent<() => void>();//剧情阻断改变\n\n    export const ForceClickMsgItem = emitter.createEvent<(id: number) => void>();\n    export const ForceClickDatingItem = emitter.createEvent<(id: number) => void>();\n\n    /**报幕数据准备就绪事件 */\n    export const ForceClickDataReady = emitter.createEvent<() => void>();\n\n    export const UnlockItem = emitter.createEvent<(itemId: number) => void>();\n\n    /**回滚剧情数据完成刷新所有状态 */\n    export const RefreshAllStatus = emitter.createEvent<() => void>();\n    /**触发死亡选项之后的事件派发 */\n    export const DeadEvent = emitter.createEvent<(pid: number) => void>();\n    /**关闭约会界面 */\n    export const CloseDatingSceneView = emitter.createEvent<(id: number) => void>();\n    /**刷新对应类型的番外 */\n    export const RefreshExtraPlotByType = emitter.createEvent<(id: number) => void>();\n    /**关闭番外界面 */\n    export const CloseExtraSceneView = emitter.createEvent<() => void>();\n    /**触发剧情属性值变化之后弹起特殊Toast */\n    export const SpecialToast = emitter.createEvent<(type: SpecialToastType) => void>();\n    /**从主界面跳转到游戏页面 */\n    export const JumpToViewInGame = emitter.createEvent<(index: PageIndex) => void>();\n    /**关闭设置界面 */\n    export const CloseSettingView = emitter.createEvent<(index: PageIndex) => void>();\n\n    let messageScenes: MessageSceneModel[] | undefined;\n    // let momentScenes: MomentSceneModel[] | undefined;\n    let mainDatingScenes: DatingEventSceneModel[] | undefined;\n    export let currPlots: ReadonlyPlot[] | undefined;\n    let phoneCallIndex: number = -1;\n\n    let unlockGift = false;\n\n    let isChangPlotSceneType: boolean = false;\n    let isMainPlot: boolean = true;\n\n    let isNeedEnterCurDateChapter: boolean = true;\n\n    let _autoPopView: AutoPopViewType[] = [];\n\n\n    export function isChangePlotSceneType() { return isChangPlotSceneType }\n\n    export function setIsChangePlotSceneType(isChange: boolean) {\n        isChangPlotSceneType = isChange;\n    }\n\n    export function isMainPlotSceneType() { return isMainPlot }\n\n    export function setIsMainPlotSceneType(isChange: boolean) {\n        isMainPlot = isChange;\n    }\n\n    export async function rollbackPhoneCallIfNeeded() {\n        if (phoneCallIndex >= 0 && phoneCallIndex < GameRecord.getCurrentRecordItems().length - 1) {\n            let ret = await PlotManager.rollbackToIndex(phoneCallIndex);\n            savePhoneCall();\n            return ret;\n        } else {\n            return PlotManager.getCurrentPlots();\n        }\n    }\n\n    //#region  //数据模块 \n    let roleDatasMap: Map<number, GameRoleDataModel> = new Map<number, GameRoleDataModel>();\n    let languagesMap: Map<number, string> = new Map<number, string>();       //语言\n    //#endregion\n\n    export function getMessageScenesModel() {\n        return messageScenes!;\n    }\n\n    export function getMessageSceneModel(id: number) {\n        return messageScenes!.find(v => v.id === id);\n    }\n\n    export function getMainDatingEventScenesModel() {\n        return mainDatingScenes!;\n    }\n\n    export function getMainDatingEventSceneModel(id: number) {\n        return mainDatingScenes!.find(v => v.id === id);\n    }\n\n    export function getMainDatingEventScenesModelByChapterindex(chapterIndex: number): DatingEventSceneModel[] {\n        let scenes: DatingEventSceneModel[] = [];\n        if (!mainDatingScenes) {\n            return [];\n        }\n        for (let i = 0; i < mainDatingScenes.length; i++) {\n            if (ConfigManager.getConfig(dateSceneConfig, mainDatingScenes[i].id).chapter_index === chapterIndex) {\n                scenes.push(mainDatingScenes[i]);\n            }\n        }\n        return scenes;\n    }\n\n    let creating: boolean = false;\n    /**开启分支剧情,\n    * plots:如果需要同时开启多个分支剧情,则数组中存储这些分支中对应的起始剧情id\n    */\n    export async function startBranches(plots: number[]) {\n        if (creating) return;\n        creating = true;\n        if (0 === plots.length) {\n            // console.warn(\"no plots to mark as branch start plot id\");\n            return;\n        }\n        for (let i = 0; i < plots.length; i++) {\n            let pid = plots[i];\n            if (SpecialPlotId.ToBeContinued === pid || SpecialPlotId.End === pid) {\n                // console.error(\"you can not start a branch with SpecialPlotId, id is = \", pid);\n                continue;\n            }\n            let p = await getPlot(pid);\n            if (!p) {\n                // console.warn(\"no plot which plot id is = \", pid);\n                continue;\n            }\n            if (currPlots) {\n                currPlots.push(p);\n            }\n            let hasStarted: boolean = checkIsBranchStarted(pid);\n            if (hasStarted) {\n                // cc.warn(\"branch has been started which start plot id is = \", pid);\n                continue;\n            }\n            console.log('开启新分支pid', pid);\n            let index = await PlotManager.startNewPlotBranch(pid);\n            pushBranchToRecord(pid, index);\n        }\n        creating = false;\n    }\n\n\n    /**\n    * \n    * @param plotId 检测指定剧情下的分支是否已经开启\n    * @returns \n    */\n    function checkIsBranchStarted(plotId: number): boolean {\n        const branchRecordKey: string = \"BRANCH_INDEX_ENTRY\";\n        let ret: boolean = false;\n        let itemArr: { startPlot: number, index: number }[] = [];\n        let recordStr: string = GameRecord.globalVariables[branchRecordKey] as string;\n        if (recordStr && \"\" !== recordStr.trim()) {\n            itemArr = JSON.parse(recordStr) as { startPlot: number, index: number }[];\n        }\n        ret = itemArr.findIndex((v) => v.startPlot === plotId) >= 0;\n        return ret;\n    }\n\n    /**\n     * \n     * @param plotId 将分支计入存档\n     * @param index \n     */\n    function pushBranchToRecord(plotId: number, index: number) {\n        const branchRecordKey: string = \"BRANCH_INDEX_ENTRY\";\n        let exist: boolean = false;\n        let itemArr: { startPlot: number, index: number }[] = [];\n        let recordStr: string = GameRecord.globalVariables[branchRecordKey] as string;\n        if (recordStr && \"\" !== recordStr.trim()) {\n            itemArr = JSON.parse(recordStr) as { startPlot: number, index: number }[];\n        }\n        exist = itemArr.findIndex((v) => v.startPlot === plotId) >= 0;\n        if (!exist) {\n            itemArr.push({\n                startPlot: plotId,\n                index: index\n            });\n            GameRecord.globalVariables[branchRecordKey] = JSON.stringify(itemArr);\n            GameRecord.saveRecord();\n        }\n    }\n\n    /**\n     * 获取分支剧情状态(约会状态)\n     * @param plotSceneTypeId 剧情类型id\n     * @param start_plot_id 起始剧情id\n     * @returns 剧情状态\n     */\n    export function getBranchStatus(plotSceneTypeId: number, start_plot_id: number): DatingEventStatus {\n        let s = DatingEventStatus.New;\n        let curP = PlotManager.getCurrentPlots();\n        let progress = curP.findIndex((v) => v.plotSceneTypeId === plotSceneTypeId) >= 0;\n        let isNew = curP.findIndex((v) => v.plotSceneTypeId === plotSceneTypeId && v.id === start_plot_id) >= 0;\n        s = isNew ? DatingEventStatus.New : progress ? DatingEventStatus.InProgress : DatingEventStatus.Completed;\n        return s;\n    }\n\n    /**获取已开启的所有番外id */\n    export function getAllStartedBranches(): { startPlot: number, index: number }[] {\n        const branchRecordKey: string = \"BRANCH_INDEX_ENTRY\";\n        let itemArr: { startPlot: number, index: number }[] = [];\n        let recordStr: string = GameRecord.globalVariables[branchRecordKey] as string;\n        if (recordStr && \"\" !== recordStr.trim()) {\n            itemArr = JSON.parse(recordStr) as { startPlot: number, index: number }[];\n        }\n        return itemArr;\n    }\n\n    let branchCompleteRecordKey: string = \"branch_complete\";\n    /**设置分支完成 */\n    export function setBranchComplete(branchId: number) {\n        let rStr = GameRecord.globalVariables[branchCompleteRecordKey] as string;\n        let rArr: number[] = [];\n        if (rStr && \"\" !== rStr) {\n            rArr = JSON.parse(rStr) as number[];\n        }\n        let exist = rArr.findIndex((v) => v === branchId) !== (-1);\n        if (!exist) {\n            rArr.push(branchId);\n            GameRecord.globalVariables[branchCompleteRecordKey] = JSON.stringify(rArr);\n            GameRecord.saveRecord();\n        }\n    }\n\n    /**检测分支是否完成 */\n    export function checkBranchIsComplete(branchId: number): boolean {\n        let rStr = GameRecord.globalVariables[branchCompleteRecordKey] as string;\n        let rArr: number[] = [];\n        if (rStr && \"\" !== rStr) {\n            rArr = JSON.parse(rStr) as number[];\n        }\n        let exist = rArr.findIndex((v) => v === branchId) !== (-1);\n        return exist;\n    }\n\n    let branchInProgressRecordKey: string = \"branch_InProgress\";\n    /**设置分支完成 */\n    export function setBranchInProgress(branchId: number) {\n        let rStr = GameRecord.globalVariables[branchInProgressRecordKey] as string;\n        let rArr: number[] = [];\n        if (rStr && \"\" !== rStr) {\n            rArr = JSON.parse(rStr) as number[];\n        }\n        let exist = rArr.findIndex((v) => v === branchId) !== (-1);\n        if (!exist) {\n            rArr.push(branchId);\n            GameRecord.globalVariables[branchInProgressRecordKey] = JSON.stringify(rArr);\n            GameRecord.saveRecord();\n        }\n    }\n\n    /**检测分支是否完成 */\n    export function checkBranchIsInProgress(branchId: number): boolean {\n        let rStr = GameRecord.globalVariables[branchInProgressRecordKey] as string;\n        let rArr: number[] = [];\n        if (rStr && \"\" !== rStr) {\n            rArr = JSON.parse(rStr) as number[];\n        }\n        let exist = rArr.findIndex((v) => v === branchId) !== (-1);\n        return exist;\n    }\n\n    export interface EventResourcesState {\n        eventId: number,\n        bgm: string,\n        backgroud: string\n    }\n\n    async function initConfigData() {\n        await ConfigManager.initConfigData(false);\n        await initLanguageConfig();\n        initRoleConfig();\n    }\n\n\n    export function getI18LanguageTxt(id: number) {\n        let i18 = ConfigManager.getConfig(i18nConfig, id);\n        return i18.cn;\n    }\n\n    function initRoleConfig() {\n        let cfg = ConfigManager.getAllConfig(role);\n        for (let id in cfg) {\n            let element = cfg[id] as IRole;\n            if (element) {\n                let data = new GameRoleDataModel();\n                data.setConfig(element);\n                roleDatasMap.set(element.id, data);\n            }\n        }\n    }\n\n    function getLanguagePath() {\n        return \"userdata/language/chinese\";\n    }\n    async function initLanguageConfig() {\n        let cfgFile = await ResUtils.loadRes<any>(getLanguagePath(), cc.JsonAsset);\n        if (cfgFile) {\n            let lans: Language[] = cfgFile as Language[];\n            for (let i = 0; i < lans.length; ++i) {\n                let element = lans[i] as Language;\n                if (element) {\n                    languagesMap.set(element.id, element.value);\n                }\n            }\n        }\n    }\n\n    export function getLanguageTxt(id: number): string {\n        if (languagesMap.has(id)) {\n            return languagesMap.get(id) as string;\n        } else {\n            // console.log(\"current language id is miss \" + id);\n            return \"\";\n        }\n    }\n\n    export function getConfigLanguageTxt(id: number): string {\n        return ConfigManager.getConfig(i18nConfig, id).cn;\n    }\n\n    export function getItemConfig(id: number) {\n        return ConfigManager.getConfig(itemConfig, id);\n    }\n\n    export function getItemConfigs() {\n        return ConfigManager.getAllConfig(itemConfig);\n    }\n\n    export function getRoleData(id: number) {\n        if (!roleDatasMap.has(id)) {\n            return undefined;\n        }\n        return roleDatasMap.get(id);\n    }\n\n    export function getPlayerData() {\n        return GameModelManager.getRoleData(GameConstData.GAME_CONST_PLAYER_ROLE_VALUE)!;\n    }\n\n    let disposable: CompositeDisposable;\n\n    export async function init(onProgress?: Function) {\n        await initConfigData();\n        if (onProgress) onProgress(0.92);\n        tipAddGracePlots = [];\n        phoneCallIndex = GameRecord.recordVariables[\"gm.pci\"] as number;\n        unlockGift = !!GameRecord.recordVariables[\"gm.unlockGift\"];\n        if (phoneCallIndex === undefined) phoneCallIndex = -1;\n        let initRet: Promise<any>[] = [];\n        { // init message models\n            let ids = GameRecord.recordVariables[\"gm.ms\"] as any;\n            if (ids !== undefined) {\n                messageScenes = [];\n                messageScenes = ids.map((id: number) => new MessageSceneModel(id));\n                initRet.push(...messageScenes!.map((s) => s.initFromRecords()));\n            } else {\n                messageScenes = [];\n            }\n        }\n        { // init main dating models\n            let ids = GameRecord.recordVariables[\"gm.md\"] as any;\n            if (ids !== undefined) {\n                mainDatingScenes = [];\n                mainDatingScenes = ids.map((id: number) => new DatingEventSceneModel(id));\n                initRet.push(...mainDatingScenes!.map((s) => s.initFromRecords()));\n            } else {\n                mainDatingScenes = [];\n            }\n        }\n\n        {//init application\n            cc.game.on(cc.game.EVENT_HIDE, () => {\n                // console.log(\"enter game background\");\n                AudioManager.pauseMusic();\n            });\n\n            cc.game.on(cc.game.EVENT_SHOW, () => {\n                // console.log(\"enter game force\");\n                AudioManager.resumeMusic();\n            });\n        }\n\n        if (initRet.length) {\n            await Promise.all(initRet);\n        }\n        if (onProgress) onProgress(0.94);\n        if (!disposable) {\n            disposable = new CompositeDisposable;\n            disposable.add(PlotManager.PlotWillStart.on(handlePlotWillStart));\n            disposable.add(EditorEvents.UNLOCK_ITEM.on(onUnlockItem));\n            disposable.add(EditorEvents.UNLOCK_SPECIAL_PLOT.on(onUnlockSpecialPlot));\n            disposable.add(EditorEvents.DEAD_EVENT.on(onDeadEvevt));\n            disposable.add(EditorEvents.SPECIAL_TOAST.on(onSpecialToast));\n        }\n        initPlots();\n        if (onProgress) onProgress(0.96);\n\n        for (let scene of mainDatingScenes!) { // 检查主线剧情状态\n            if (currPlots![0].plotSceneType !== PlotSceneType.DatingEvent ||\n                (scene.id !== currPlots![0].plotSceneTypeId && scene.status !== DatingEventStatus.Completed)) {\n                scene.status = DatingEventStatus.Completed;\n            }\n        }\n        if (onProgress) onProgress(0.98);\n\n    }\n\n    function onUnlockItem(itemId: string) {\n        let s = itemId;\n        if (s && \"\" !== s.trim()) {\n            let n = parseInt(s);\n            UnlockItem.emit(n);\n        }\n    }\n\n    function onDeadEvevt(pid: string) {\n        let s = pid;\n        if (s && \"\" !== s.trim()) {\n            let n = parseInt(s);\n            DeadEvent.emit(n);\n        }\n    }\n\n    function onSpecialToast(type: string) {\n        let s = type;\n        if (s && \"\" !== s.trim()) {\n            let n = parseInt(s) as SpecialToastType;\n            SpecialToast.emit(n);\n        }\n    }\n\n    export function onUnlockSpecialPlot(specialPlotId: string) {\n        let s = specialPlotId;\n        if (s && \"\" !== s.trim()) {\n            let n = parseInt(s);\n            UnlockSpecialPlotModelManager.saveUnlockedSpecialPlotIdByItemIdToGameRecord(n);\n        }\n    }\n\n    /**\n     * set main tab guide record value\n     * @param index \n     * @param record \n     */\n    export function setGuideMainTabRecord(index: number, record: GuideState) {\n        let r = GameRecord.globalVariables[\"guide_main_tab\" + index] as number;\n        if (r && record <= r) {\n            return;\n        }\n        GameRecord.globalVariables[\"guide_main_tab\" + index] = record;\n        GameRecord.saveRecord();\n    }\n\n    /**\n     * get main tab guide index\n     */\n    export function getMainTabGuideIndex(): number {\n        let index = -1;\n        const MAX = 4;\n        for (let i = 0; i < MAX; i++) {\n            let r = GameRecord.globalVariables[\"guide_main_tab\" + i] as number;\n            r = r === undefined ? GuideState.close : r;\n            if (r === GuideState.Open) {\n                index = i;\n            }\n        }\n        return index;\n    }\n\n    /**\n     * set event item guide record value\n     * @param itemKey \n     * @param record \n     */\n    export function setGuideEventItemRecord(itemKey: string, record: GuideState) {\n        let r = GameRecord.globalVariables[\"guide_evt_item\"] as number;\n        r = r === undefined ? GuideState.close : r;\n        if (record <= r) {\n            return;\n        }\n        GameRecord.globalVariables[\"guide_evt_item_key\"] = itemKey;\n        GameRecord.globalVariables[\"guide_evt_item\"] = record;\n        GameRecord.saveRecord();\n    }\n\n    /**\n     * get event item guide key\n     */\n    export function getEventItemGuideKey(): string {\n        let key: string = \"\";\n        let r = GameRecord.globalVariables[\"guide_evt_item\"] as number;\n        r = r === undefined ? GuideState.close : r;\n        let k = GameRecord.globalVariables[\"guide_evt_item_key\"] as string;\n        if (r && r === GuideState.Open) {\n            key = k;\n        }\n        return key;\n    }\n\n    /**\n     * set msg guide item record value\n     * @param itemKey \n     * @param record \n     */\n    export function setGuideMsgItemRecord(itemKey: string, record: GuideState) {\n        let r = GameRecord.globalVariables[\"guide_msg_item\"] as number;\n        r = r === undefined ? GuideState.close : r;\n        if (record <= r) {\n            return;\n        }\n        GameRecord.globalVariables[\"guide_msg_item_key\"] = itemKey;\n        GameRecord.globalVariables[\"guide_msg_item\"] = record;\n        GameRecord.saveRecord();\n    }\n\n    /**\n     * get msg item guide key\n     */\n    export function getMsgItemGuideKey(): string {\n        let key: string = \"\";\n        let r = GameRecord.globalVariables[\"guide_msg_item\"] as number;\n        r = r === undefined ? GuideState.close : r;\n        let k = GameRecord.globalVariables[\"guide_msg_item_key\"] as string;\n        if (r && r === GuideState.Open) {\n            key = k;\n        }\n        return key;\n    }\n\n\n    function save() {\n        let oldValue = GameRecord.recordVariables[\"gm.ms\"];\n        let newValue = messageScenes!.map(v => v.id) as any;\n        if (!shallowEqual(oldValue, newValue)) {\n            GameRecord.recordVariables[\"gm.ms\"] = newValue;\n        }\n        oldValue = GameRecord.recordVariables[\"gm.md\"];\n        newValue = mainDatingScenes!.map(v => v.id) as any;\n        if (!shallowEqual(oldValue, newValue)) {\n            GameRecord.recordVariables[\"gm.md\"] = newValue;\n        }\n    }\n\n    function savePhoneCall() {\n        GameRecord.recordVariables[\"gm.pci\"] = phoneCallIndex;\n        GameRecord.saveRecord();\n    }\n\n    async function initPlots() {\n        let plots = PlotManager.getCurrentPlots();\n        if (true) {\n            currPlots = [...plots];\n            if (!messageScenes) { // 第一次进游戏,根据剧情初始化数据\n                messageScenes = [];\n            }\n            if (!mainDatingScenes) {\n                mainDatingScenes = [];\n            }\n            for (let i = 0; i < plots.length; i++) {\n                let plot = plots[i];\n                if (plot.plotSceneType === PlotSceneType.Message) {\n                    let index = messageScenes.findIndex(v => v.id === plot.plotSceneTypeId);\n                    if (index < 0) {\n                        index = 0;\n                        let model = new MessageSceneModel(plot.plotSceneTypeId);\n                        model.firstPlot = plot;\n                        messageScenes.unshift(model);\n                    }\n                } else if (plot.plotSceneType === PlotSceneType.DatingEvent) {\n                    let cfg = ConfigManager.getConfig(dateSceneConfig, plot.plotSceneTypeId);\n                    if (cfg.DateType === DateType.Date_Normal) { // 主线约会剧情\n                        if (plots[0] !== plot) { console.error(\"主线约会剧情应在主线开启\"); continue; }\n                        if (mainDatingScenes.findIndex(v => v.id === plot.plotSceneTypeId) < 0) {\n                            let model = new DatingEventSceneModel(plot.plotSceneTypeId);\n                            model.firstPlot = plot;\n                            model.status = DatingEventStatus.New;\n                            mainDatingScenes.push(model);\n                        }\n                    }\n                }\n            }\n            save();\n        }\n    }\n\n    async function handlePlotWillStart(plot: ReadonlyPlot, branch: number) {\n        handleNewPlot(currPlots![branch], plot, branch);\n        currPlots![branch] = plot;\n    }\n\n    async function handleNewPlot(prevPlot: ReadonlyPlot | undefined, plot: ReadonlyPlot, branch: number) {\n        if (plot.plotSceneType === PlotSceneType.Message) {\n            let idx = messageScenes!.findIndex(v => v.id === plot.plotSceneTypeId);\n            if (idx >= 0) { // 原会话中有新消息\n                let model = messageScenes![idx];\n                if (idx > 0) {\n                    let reorderIdx = 0;\n                    if (branch > 0 && currPlots && currPlots[0].plotSceneType === PlotSceneType.Message) {\n                        reorderIdx = 1;\n                    }\n                    for (let i = idx; i > reorderIdx; i--) {\n                        messageScenes![i] = messageScenes![i - 1];\n                    }\n                    messageScenes![reorderIdx] = model;\n                }\n            } else { // 新会话\n                let model = new MessageSceneModel(plot.plotSceneTypeId);\n                model.firstPlot = plot;\n                messageScenes!.unshift(model);\n            }\n            MessageSceneChanged.emit(messageScenes!);\n            save();\n        } else if (plot.plotSceneType === PlotSceneType.PhoneCall) {\n            if (!prevPlot || prevPlot.plotSceneType !== PlotSceneType.PhoneCall) {\n                phoneCallIndex = GameRecord.getCurrentRecordItems().length; // 当前存档还没生成,不需要减1\n                savePhoneCall();\n            }\n        } else if (plot.plotSceneType === PlotSceneType.DatingEvent) {\n            let cfg = ConfigManager.getConfig(dateSceneConfig, plot.plotSceneTypeId);\n            if (cfg.DateType === DateType.Date_Normal) { // 主线约会剧情\n                if (branch !== 0) { console.error(\"主线约会剧情应在主线开启\"); return; }\n                let idx = mainDatingScenes!.findIndex(v => v.id === plot.plotSceneTypeId);\n                if (idx < 0) { // 新开启\n                    let model = new DatingEventSceneModel(plot.plotSceneTypeId);\n                    model.firstPlot = plot;\n                    model.status = DatingEventStatus.New;\n                    mainDatingScenes!.push(model);\n                    MainDatingEventChanged.emit(mainDatingScenes!);\n                }\n                save();\n            }\n        }\n\n        if (prevPlot && prevPlot.plotSceneType === PlotSceneType.PhoneCall && plot.plotSceneType !== PlotSceneType.PhoneCall) {\n            phoneCallIndex = -1;\n            savePhoneCall();\n        }\n\n        if (prevPlot && (prevPlot.plotSceneType !== plot.plotSceneType || prevPlot.plotSceneTypeId !== plot.plotSceneTypeId)) { // 切换场景\n            if (prevPlot.plotSceneType === PlotSceneType.DatingEvent) {\n                let model = mainDatingScenes!.find(v => v.id === prevPlot.plotSceneTypeId);\n                if (model) model.status = DatingEventStatus.Completed;\n            }\n        }\n\n        isChangPlotSceneType = !prevPlot || (prevPlot.plotSceneType !== plot.plotSceneType || prevPlot.plotSceneTypeId !== plot.plotSceneTypeId);\n        //main plot line progress\n        if (0 === branch && checkIsDotTutorial()) {\n            stepMainLinePlotProgress();\n        }\n    }\n\n    function stepMainLinePlotProgress() {\n        let r = GameRecord.recordVariables[\"p_s_t_i_p\"] as number;\n        r = r ? r : 0;\n        if (isChangPlotSceneType) {\n            r = 1;\n        } else {\n            r++;\n        }\n        GameRecord.recordVariables[\"p_s_t_i_p\"] = r;\n    }\n\n    export function dotMainLinePlotStart() {\n        // main plot line progress and change plot scene (for BI dot);\n        let plot = PlotManager.getCurrentPlots()[0];\n\n        let mainPlotLineSession = GameRecord.globalVariables[\"m_p_l_s\"] as number;//主线总session计数\n        mainPlotLineSession = mainPlotLineSession ? mainPlotLineSession : 1;\n        let sKey = \"m_l_p_s_started\";\n        let startedSession = GameRecord.globalVariables[sKey] as number;\n        startedSession = startedSession ? startedSession : 0;\n        if (startedSession >= mainPlotLineSession) {//max is equal\n            return;\n        }\n        GameRecord.globalVariables[\"m_p_l_s\"] = mainPlotLineSession;\n\n        let plotScenTypeSession = GameRecord.globalVariables[\"p_s_t_s\" + plot.plotSceneType] as number;\n        plotScenTypeSession = plotScenTypeSession ? plotScenTypeSession : 0;\n        plotScenTypeSession++;\n        GameRecord.globalVariables[\"p_s_t_s\" + plot.plotSceneType] = plotScenTypeSession;//不同场景类型分别session计数\n\n        if (checkIsDotTutorial()) {\n            GameRecord.recordVariables[\"p_s_t_i_p\"] = 1;//主线剧情中,当前场景类型progress进度计数\n        }\n        GameRecord.globalVariables[sKey] = mainPlotLineSession;\n        GameRecord.saveRecord();\n    }\n\n    /**\n     * 主线剧情结束打点\n     */\n    export function dotMainLinePlotEnd() {\n        let mainPlotLineSession = GameRecord.globalVariables[\"m_p_l_s\"] as number;\n        GameRecord.globalVariables[\"m_p_l_s\"] = mainPlotLineSession + 1;\n        GameRecord.saveRecord();\n    }\n\n    export function checkFuncUnloced(key: string) {\n        return GameRecord.recordVariables[key] === FuncStateEnum.locked ? false : true;\n    }\n\n    export function checkRedPot(key: string) {\n        return GameRecord.globalVariables[\"red_pot_\" + key] === RedPotStateEnum.Show;\n    }\n\n    export function setRedPotState(key: string, state: RedPotStateEnum) {\n        GameRecord.globalVariables[\"red_pot_\" + key] = state;\n        GameRecord.autoSave();\n    }\n\n    export function checkVoiceNeedShowAD(vCfg: ICharacterVoiceConfig) {\n        let ret = false;\n        if (vCfg) {\n            if (vCfg.ads === 0) {\n                return ret;\n            }\n            let voiceAdRecord = GameRecord.globalVariables[\"voice_ad\"] as string;\n            let arr: number[] = [];\n            if (voiceAdRecord) {\n                arr = JSON.parse(voiceAdRecord) as number[];\n            }\n            let set = new Set(arr);\n            ret = !set.has(vCfg.id);\n        }\n        return ret;\n    }\n\n    export function pushVoiceShowAdToRecord(voiceId: number) {\n        let voiceAdRecord = GameRecord.globalVariables[\"voice_ad\"] as string;\n        let arr: number[] = [];\n        if (voiceAdRecord) {\n            arr = JSON.parse(voiceAdRecord) as number[];\n        }\n        let set = new Set(arr);\n        if (!set.has(voiceId)) {\n            arr.push(voiceId);\n        }\n        GameRecord.globalVariables[\"voice_ad\"] = JSON.stringify(arr);\n        GameRecord.autoSave();\n    }\n\n    export function getCurDayStr(): string {\n        let t = TimeManager.getTime();\n        let time = new Date(t);\n        let y = time.getFullYear();\n        let m = time.getMonth() + 1;\n        let d = time.getDate();\n        let timeStr = y + \"_\" + m + \"_\" + d;\n        return timeStr;\n    }\n\n    export function checkIsDotTutorial(): boolean {\n        let curPlot = PlotManager.getCurrentPlots()[0];\n        return curPlot && curPlot.chapterId === GameConstData.GAME_CONST_FIRST_CHAPTER_ID;\n    }\n\n    export function getLastFreeTime(): number {\n        let time: number = 0;\n        let recordKey: string = \"luck_draw_free_time\";\n        let record = GameRecord.globalVariables[recordKey] as number;\n        time = record ? record : 0;\n        return time;\n    }\n\n    export function checkOverdue(time: number, refreshhour: number = 4) {//检测是否过期\n        let checkTime = new Date(time);\n        let currentTime = new Date(TimeManager.getTime());\n        let year = checkTime.getFullYear();\n        let month = checkTime.getMonth() + 1;\n        let day = checkTime.getDate();\n        let hour = checkTime.getHours();\n        if (currentTime.getFullYear() > year) {\n            return true;\n        } else if (currentTime.getMonth() + 1 > month) {\n            return true;\n        } if (currentTime.getDate() == day) {\n            if (hour > 0 && hour < refreshhour) {\n                if (currentTime.getHours() >= refreshhour) {\n                    return true;\n                }\n            }\n        } else if (currentTime.getDate() > day && currentTime.getHours() >= refreshhour) {\n            return true;\n        }\n        return false;\n    }\n\n    export function checkSkinAndGraceCondition(condition: DeepReadonlyObject<ConditionExpression>): boolean {\n        let ret: boolean = false;\n        if (condition.groups && condition.groups.length > 0\n            && condition.groups[0].items\n            && condition.groups[0].items.length > 0\n            && condition.groups[0].items[0].target) {\n            if (condition.groups[0].items[0].target.startsWith(\"r.like\")) {\n                let roleIdStr = condition.groups[0].items[0].target.replace(\"r.like\", \"\");\n                let role = getRoleData(parseInt(roleIdStr));\n                if (role && role.getRoleLike() >= parseInt(condition.groups[0].items[0].oprand.value)) {\n                    ret = true;\n                }\n            }\n            if (condition.groups[0].items[0].target.startsWith(\"r.skin\")) {\n                let roleIdStr = condition.groups[0].items[0].target.replace(\"r.skin\", \"\");\n                let role = getRoleData(parseInt(roleIdStr));\n                let v = parseInt(condition.groups[0].items[0].oprand.value);\n                if (role && role.hasSkin(v) && role.getCurSkin() === v) {\n                    ret = true;\n                }\n            }\n        }\n        return ret;\n    }\n\n    export function getGraceLevelByGraceValue(value: number): number {\n        let level = 0;\n        let cfgs = ConfigManager.getAllConfig(relationLevelConfig);\n        let gCount = 0;\n        for (let id in cfgs) {\n            let cfg = cfgs[id];\n            gCount += cfg.relation_value;\n            if (value >= gCount) {\n                level = cfg.id;\n            }\n        }\n        return level;\n    }\n\n    export function setNotNeedEnterCurDateChapter() {\n        isNeedEnterCurDateChapter = false;\n    }\n\n    export function registerAutoPopView(viewType: AutoPopViewType) {\n        if (_autoPopView.length === 0) {\n            _autoPopView.push(viewType);\n        } else {\n            if (_autoPopView.findIndex((v) => v === viewType) === (-1)) {\n                _autoPopView.push(viewType);\n            }\n        }\n    }\n\n    export function checkAutoPopView() {\n        if (_autoPopView.length === 0) {\n            return;\n        }\n        _autoPopView = _autoPopView.sort((v1: AutoPopViewType, v2: AutoPopViewType) => {\n            return v1 - v2;\n        });\n        let v = _autoPopView.pop();\n        if (v) {\n            AutoPopView.emit(v);\n        }\n    }\n\n    export function checkIsOverPlotLimitTime() {\n        let isOver: boolean = false;\n        let timeKeyStr: string = \"plot_limit_time\";\n        let recordTime = GameRecord.globalVariables[timeKeyStr] as number;\n        if (recordTime) {\n            isOver = checkOverdue(recordTime);\n        } else {\n            let timeKeyStr: string = \"plot_limit_time\";\n            GameRecord.globalVariables[timeKeyStr] = TimeManager.getTime();\n        }\n        return isOver;\n    }\n\n    export async function dealBlockedPlot(isAdForce?: boolean) {\n        let over = checkIsOverPlotLimitTime();\n        let curPlot = PlotManager.getCurrentPlots()[0];\n        if (curPlot && curPlot.plotSceneType === PlotSceneType.BlockPlot) {\n            if (over || isAdForce) {\n                await PlotManager.completePlot(curPlot);\n                let timeKeyStr: string = \"plot_limit_time\";\n                GameRecord.globalVariables[timeKeyStr] = TimeManager.getTime();\n                PlotBlockedChanged.emit();\n            } else {\n                ShowPlotBlocked.emit();\n            }\n        }\n    }\n\n    export function checkIsPlotBlocked(): boolean {\n        let blocked: boolean = false;\n        let curPlot = PlotManager.getCurrentPlots()[0];\n        if (curPlot && curPlot.plotSceneType === PlotSceneType.BlockPlot) {\n            blocked = true;\n        }\n        return blocked;\n    }\n\n    export function getCurMainLinePlotId(): number {\n        let p = PlotManager.getCurrentPlots()[0];\n        return p ? p.id : 0;\n    }\n\n\n    let tipAddGracePlots: number[] = [];\n\n    export function checkPlotTipAddGraceAlready(plotId: number): boolean {\n        let ret = tipAddGracePlots.findIndex((v) => v === plotId) !== (-1);\n        return ret;\n    }\n\n    export function pushTipAddGracePlot(plotId: number) {\n        let exist = tipAddGracePlots.findIndex((v) => v === plotId) !== (-1);\n        if (!exist) {\n            tipAddGracePlots.push(plotId);\n        }\n    }\n\n    /**\n     * 根据商品类型获得该商品对应的淘宝地址链接\n     * @param type 商品类型\n     * @returns 返回值为商品类型对应的商品地址\n     */\n    export function getTaoBaoShopUrlByType(type: number): string {\n        let link: string = \"\";\n        let cfg = ConfigManager.getAllConfig(taoBaoShopUrlConfig);\n        if (cfg) {\n            for (const id in cfg) {\n                if (cfg[id].type == type) {\n                    link = cfg[id].websiteUrl;\n                }\n            }\n        }\n        return link;\n    }\n\n    /**\n     * 根据商品类型获得该商品对应的有赞地址链接\n     * @param type 商品类型\n     * @returns 返回值为商品类型对应的商品地址\n     */\n    export function getYouZanShopUrlByType(type: number): string {\n        let link: string = \"\";\n        let cfg = ConfigManager.getAllConfig(taoBaoShopUrlConfig);\n        if (cfg) {\n            for (const id in cfg) {\n                if (cfg[id].type == type) {\n                    link = cfg[id].youZanUrl;\n                }\n            }\n        }\n        return link;\n    }\n\n    /**\n     * 根据网页链接跳转网页\n     * @param url 要跳转的网页链接\n     */\n    export function jumpToTaobaoShop(url: string) {\n        if (channel == \"dummy\") {\n            let mUrl = url.replace(\"taobao:\", \"https:\");\n            window.open(mUrl);\n        } else {\n            let packageName: string = \"com.taobao.taobao\";\n            let errorTips: string = \"您还没有安装淘宝客户端!\";\n            jsb.reflection.callStaticMethod('org/cocos2dx/javascript/AppActivity', 'jumpToTaobaoShop', \"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\", packageName, url, errorTips);\n        }\n    }\n\n    /**特殊剧情id数组 */\n    const SpecialPlotIdArr: number[] = [SpecialPlotId.CustomPlotStart, SpecialPlotId.End, SpecialPlotId.ToBeContinued];\n    /**根据剧情id获取剧情的内容 */\n    export async function getPlotContent(plotId: number): Promise<IPlotContent | undefined> {\n        let plotContent: IPlotContent | undefined = undefined;\n        let isSpecialPlot = SpecialPlotIdArr.findIndex((v) => v === plotId) !== (-1);\n        if (isSpecialPlot) {\n            cc.error(\"can not get special plot content, plotId = \", plotId);\n            return undefined;\n        }\n        try {\n            let plot = await getPlot(plotId);\n            if (plot && plot.sentences && plot.sentences.length !== 0) {\n                const sentence = plot.sentences[0];\n                const content = sentence.content;\n                if (content) {\n                    plotContent = {\n                        plotId: plotId,\n                        roleId: sentence.roleId,\n                        content: []\n                    };\n                    if (content.type === SentenceType.TEXT) {\n                        plotContent.content.push(richNodesToCocosString(content.value));\n                    } else if (content.type === SentenceType.SELECT) {\n                        for (let i = 0; i < content.value.length; i++) {\n                            let value = content.value[i];\n                            if (value.content && value.content.type === SentenceType.TEXT) {\n                                plotContent.content.push(richNodesToCocosString(value.content.value));\n                            } else {\n                                plotContent.content.push(value.summary);\n                            }\n                        }\n                    }\n                } else {\n                    cc.error(\"plot has no content , plotId = \", plotId);\n                }\n            } else {\n                cc.warn(\"plot has no sentence or no such plot , plotId = \", plotId);\n            }\n        } catch (error) {\n            cc.error(\"getPlotContent error plotId = \" + plotId + \" error info = \", error);\n            return undefined;\n        }\n        return plotContent;\n    }\n\n    /**\n     * 设置是否自动弹出公告界面\n     * @param autoShow 是否自动弹出公告界面\n     */\n    export function setAutoShowNotice(autoShow: boolean) {\n        let autoShowNoticeInfo: AutoShowNoticeInfo = {\n            time: TimeManager.getTime(),\n            autoShow: autoShow,\n        };\n        GameRecord.globalVariables[\"AutoShowNoticeInfo\"] = autoShowNoticeInfo;\n        GameRecord.saveRecord();\n    }\n\n    /**\n     * 获取是否自动弹出公告界面\n     * @returns 返回值为是否自动弹出公告界面\n     */\n    export function getAutoShowNotice(): boolean {\n        let autoShowNoticeInfo = GameRecord.globalVariables[\"AutoShowNoticeInfo\"] as AutoShowNoticeInfo;\n        let autoShow = true;\n        if (autoShowNoticeInfo == undefined) {\n            autoShow = true;\n        } else {\n            autoShow = autoShowNoticeInfo.autoShow;\n            let isOver = checkOverdue(autoShowNoticeInfo.time);\n            if (isOver) {\n                autoShow = true;\n                setAutoShowNotice(autoShow);\n            }\n        }\n        return autoShow;\n    }\n}\n\nexport interface IPlotContent {\n    plotId: number;\n    roleId: number;\n    content: string[];\n}\n\nexport interface AutoShowNoticeInfo {\n    time: number;\n    autoShow: boolean;\n}"]}