{"version":3,"file":"js/planner.2a6b8863.js","mappings":"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AAEH;AACA;AACA,eAAe,GAAG,gDAAqC;AACvD;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,8GAA8G;;AAE9G;AACA;AACA;AACA,2CAA2C,QAAQ;AACnD;AACA;;AAEA;AACA;;AAEA;AACA,aAAa,6BAAS;AACtB;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA,4BAA4B,YAAY,MAAM,aAAa;AAC3D,0BAA0B,UAAU,MAAM,WAAW;AACrD;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,gEAAgE;AAChE,KAAK;;AAEL;AACA,aAAa,+BAAW;AACxB,sBAAsB,gDAAqC;AAC3D;AACA;AACA;AACA,uCAAuC,kBAAkB,GAAG,UAAU;AACtE;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA,0EAA0E,+BAAW;AACrF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wGAAwG,MAAM;AAC9G,OAAO;AACP,KAAK;;AAEL;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA,6BAA6B,gCAAgB;AAC7C;AACA;AACA,QAAQ;AACR,+BAA+B,gCAAgB;AAC/C;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM,wCAAoB;AAC1B;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;A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wC;AACxC,kCAAkC;AAClC;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,OAAO;AACP;AACA;;AAEA;AACA,OAAO;AACP;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,KAAK;AACL;;AAEA,4BAA4B,2BAA2B,2EAA2E,oCAAoC,wBAAwB,OAAO,oCAAoC,mIAAmI;AAC5W;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAe,wBAAwB,0BAA0B;AACjE;AACA;;AAEA,4BAA4B,2BAA2B,2EAA2E,oCAAoC,wBAAwB,OAAO,oCAAoC,mIAAmI;;AAE5W;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,sDAAsD;AACtD;AACA,SAAS,GAAG,+DAA+D,yBAAyB;;AAEpG;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B,SAAS;AACnC;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,gCAAgC,UAAU;AAC1C;AACA;AACA,wBAAwB;AACxB;;AAEA,oCAAoC,UAAU;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4BAA4B,SAAS;AACrC;AACA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA;AACA,8BAA8B,oBAAoB;AAClD,8BAA8B,8BAA8B;AAC5D,8BAA8B,YAAY;AAC1C,8BAA8B,qBAAqB;AACnD,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA,oBAAoB;AACpB;;AAEA,gCAAgC,UAAU;AAC1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0BAA0B,SAAS;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;;AAEA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B,SAAS;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,SAAS;AACrC;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA,kCAAkC,UAAU;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA,kCAAkC,UAAU;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,SAAS;AACrC;;AAEA;AACA;AACA;;AAEA,gCAAgC,UAAU;AAC1C;AACA;AACA,wBAAwB;AACxB;;AAEA,oCAAoC,UAAU;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gEAAgE;AAChE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA,kBAAkB,eAAe;;;AAGjC;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb,YAAY;AACZ;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA,OAAO;AACP;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;;AAEA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,kBAAkB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,4BAA4B,2BAA2B,2EAA2E,oCAAoC,wBAAwB,OAAO,oCAAoC,mIAAmI;;AAE5W;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,UAAU;AAC1B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gGAAgG;;AAEhG;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,yBAAyB;AAC7C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM,eAAe;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,cAAc;AAChC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,cAAc;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;;;AAGN;AACA;AACA,MAAM;;;AAGN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;;AAER;AACA;;AAEA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA,wBAAwB,sBAAsB;AAC9C;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,oEAAoE;AACnF;AACA;;AAEA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,mBAAmB;AACvC;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,mBAAmB;AACzC;AACA;AACA;;AAEA,wBAAwB,SAAS;AACjC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC,uCAAuC;;AAEvC,iCAAiC;;AAEjC;AACA,iEAAiE;;AAEjE,iEAAiE;;AAEjE,iCAAiC;;AAEjC;AACA,iEAAiE;;AAEjE,iEAAiE;;AAEjE,iCAAiC;;AAEjC;AACA,iEAAiE;;AAEjE,iEAAiE;;AAEjE;;AAEA,kBAAkB,SAAS;AAC3B,4IAA4I;;AAE5I,gJAAgJ;;AAEhJ,gJAAgJ;;AAEhJ,gJAAgJ;AAChJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oBAAoB,UAAU;AAC9B;AACA,UAAU;;AAEV,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wBAAwB,UAAU;AAClC;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA,wBAAwB,UAAU;AAClC;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,YAAY;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,SAAS;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB,kBAAkB;AAClC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,eAAe;AACf;AACA,gBAAgB;;AAEhB;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,UAAU;AAC5B,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iEAAiE;AACjE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;;AAE/C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0BAA0B;AACvC,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,+BAA+B;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,6MAA6M;AAC7M;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH,4BAA4B,2BAA2B,2EAA2E,oCAAoC,wBAAwB,OAAO,oCAAoC,mIAAmI;AAC5W;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,iBAAiB;AACrC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E;;AAE9E;AACA;;AAEA,8DAA8D;;AAE9D;AACA,WAAW,MAA8B,GAAG,CAAW,uCAAuC,QAAa,uBAAuB,KAA4B,IAAI,wBAAU;AAC5K,MAAM,EAED;AACL,IAAI,aAAa;AACjB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B,oCAAoC;;AAEpC;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;;AAEA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;;AAEA;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf,cAAc;AACd;AACA;AACA;AACA,eAAe;AACf,cAAc;AACd;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA,kBAAkB,UAAU;AAC5B;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,YAAY;AACZ;AACA,kFAAkF;;AAElF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA,kFAAkF;;AAElF;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,gBAAgB;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA,8EAA8E;;AAE9E;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO,kBAAkB;;AAEzB;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;;AAEhB;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,WAAW;AACX;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,8BAA8B;AAChD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA,oCAAoC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;;AAEA;AACA,UAAU;AACV;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kDAAkD;;AAElD;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA,mCAAmC;;AAEnC;AACA,wCAAwC;;AAExC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;;;AAGN;;AAEA,oBAAoB,cAAc;AAClC;AACA;AACA,iCAAiC;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B;;AAE7B,mCAAmC;;AAEnC,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,WAAW;AAC3B;AACA;AACA;;AAEA;AACA,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;;AAEA,uDAAuD;;AAEvD;AACA;;AAEA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;;AAEA,kBAAkB,yBAAyB;AAC3C;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0CAA0C;;AAE1C;AACA;AACA,oCAAoC;;AAEpC,yCAAyC;;AAEzC;AACA;AACA,yCAAyC;;AAEzC,2CAA2C;;AAE3C;AACA;AACA;AACA;AACA;AACA,6CAA6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,yCAAyC,oBAAoB,sCAAsC;AAC1I;AACA;AACA,UAAU;AACV;;AAEA,sBAAsB,2BAA2B;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA,sBAAsB,2BAA2B;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+FAA+F;AAC/F;;AAEA;AACA;;AAEA;AACA,mDAAmD;AACnD;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;;AAGA;AACA;AACA,MAAM;AACN;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAM;AACN;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,8BAA8B;;AAE9B,2BAA2B;;AAE3B,kCAAkC;;AAElC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,yEAAyE;;AAEzE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA,QAAQ;;;AAGR;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;;AAElC,mCAAmC;;AAEnC;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA,6CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,QAAQ;AAC9B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;;;AAGR,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B,8DAA8D;;AAE9D;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;;;AAGV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;;;AAGV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA,MAAM;;;AAGN;AACA;AACA,MAAM;;;AAGN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;;AAE3B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA,wBAAwB,QAAQ;AAChC,uFAAuF;AACvF;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA,kCAAkC;;AAElC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kCAAkC,SAAS;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,YAAY;AAC5B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,UAAU;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,sBAAsB,UAAU;AAChC;;AAEA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA,oBAAoB,SAAS;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,sBAAsB;;AAEtB,mCAAmC;;AAEnC,0BAA0B;;AAE1B,8BAA8B;;AAE9B,yBAAyB;;AAEzB,iCAAiC;;AAEjC;AACA,8CAA8C;AAC9C;;AAEA,4BAA4B;AAC5B;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,UAAU;AAC1B;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA,6EAA6E;;AAE7E;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B,QAAQ;AACR;AACA;AACA,UAAU;AACV,mDAAmD;;AAEnD;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,qEAAqE;;AAErE;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,UAAU;AAC1B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,SAAS;AAC7B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA;AACA,iEAAiE;;AAEjE;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA,8EAA8E;AAC9E;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,UAAU;AACV,yEAAyE;AACzE,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;;;AAGV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,sBAAsB,UAAU;AAChC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;;;AAGN,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,UAAU;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,+CAA+C;;AAE/C;AACA;;AAEA,oBAAoB,UAAU;AAC9B;;AAEA;AACA;AACA,kGAAkG;;AAElG;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,gBAAgB;AAChB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,UAAU;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA,oBAAoB,UAAU;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA,oBAAoB,UAAU;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,OAAO;AACjC;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,UAAU;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;;AAErC;AACA;;AAEA;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,iCAAiC;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gGAAgG;AAChG;;AAEA,6DAA6D;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;;;AAGN,sBAAsB,QAAQ;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,0BAA0B,QAAQ;AAClC;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qDAAqD,kCAAkC,IAAI,kCAAkC;;AAE7H;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,kCAAkC,IAAI,kCAAkC;;AAEjH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,UAAU;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,8CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,qCAAqC;;AAErC,8DAA8D;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sCAAsC;AACtC;AACA;;AAEA;AACA;AACA,8DAA8D;;AAE9D;AACA;AACA,gEAAgE;;AAEhE;AACA,gCAAgC;;AAEhC,2DAA2D;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;;AAEhD;AACA;;AAEA;AACA,oDAAoD;AACpD;;AAEA;AACA;AACA,gEAAgE;;AAEhE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uFAAuF;;AAEvF,kDAAkD;;AAElD,gDAAgD;;AAEhD,iDAAiD;;AAEjD,wDAAwD;AACxD,UAAU;AACV,qFAAqF;AACrF;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,UAAU;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ,gCAAgC;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,UAAU;AAC5B;;AAEA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAiD;;AAEjD,mDAAmD;;AAEnD,+CAA+C;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA,YAAY;AACZ;AACA,qDAAqD;AACrD;;AAEA;AACA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA,wBAAwB,UAAU;AAClC;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA,YAAY;AACZ;AACA,uDAAuD;AACvD;;AAEA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA,YAAY;AACZ;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;;AAEA,wBAAwB,UAAU;AAClC;AACA;AACA;;AAEA;AACA,gCAAgC;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,yDAAyD;;AAEzD,4EAA4E;AAC5E;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA,gCAAgC;;AAEhC;AACA,kCAAkC;;AAElC;AACA,gCAAgC;;AAEhC;AACA,8BAA8B;;AAE9B;AACA,+BAA+B;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA2B,eAAe;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB,QAAQ;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;;AAE7C,qCAAqC;;AAErC,kDAAkD;;AAElD;AACA,0CAA0C;;AAE1C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gDAAgD;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,wCAAwC;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB;;AAEtB,mCAAmC;;AAEnC,0BAA0B;;AAE1B,8BAA8B;;AAE9B,yBAAyB;;AAEzB,iCAAiC;;AAEjC;AACA;AACA,8CAA8C;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA,cAAc;;AAEd,cAAc;;AAEd,cAAc;;AAEd,+BAA+B;AAC/B,QAAQ;AACR;;AAEA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,oCAAoC;AAC1D;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wHAAwH;;AAExH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;;;AAGR;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;;;AAGR;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;;;AAGV;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA,mHAAmH;;AAEnH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,sBAAsB,QAAQ;AAC9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yCAAyC;;;AAGzC;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,WAAW;AAChC;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH,4BAA4B,2BAA2B,2EAA2E,oCAAoC,wBAAwB,OAAO,oCAAoC,mIAAmI;;AAE5W;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ,iBAAiB;;AAEzB,6HAA6H;;AAE7H,gCAAgC;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA,+BAA+B;;AAE/B,sBAAsB;;AAEtB,yBAAyB;AACzB;;AAEA;AACA;AACA,kBAAkB;;AAElB,kBAAkB;;AAElB,oBAAoB;AACpB;;AAEA,4BAA4B;AAC5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA6B;;AAE7B,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA,YAAY;;;AAGZ;AACA,gCAAgC;AAChC;AACA,UAAU;AACV;;;AAGA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;;AAEA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;;AAEA,kBAAkB,WAAW;AAC7B;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;;AAGA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;;AAGA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA4B,2BAA2B,2EAA2E,oCAAoC,wBAAwB,OAAO,oCAAoC,mIAAmI;;AAE5W;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAoB,UAAU;AAC9B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;;AAEf,eAAe;AACf,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;;AAEf,eAAe;;AAEf,eAAe;AACf,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0EAA0E;;AAElG,uEAAuE,YAAY,oBAAoB,QAAQ;;AAE/G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,eAAe;AACrC,8DAA8D;AAC9D;;AAEA;AACA,UAAU;;;AAGV;AACA;AACA;;AAEA;AACA,sBAAsB,eAAe;AACrC,4FAA4F;AAC5F;AACA;;AAEA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB,eAAe;AACxC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ,2BAA2B,mBAAmB;AAC9C;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,eAAe;AACtC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0DAA0D;AAC1D;;AAEA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA,wFAAwF,UAAU;;AAElG;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,6CAA6C;;AAE7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,SAAS;AACjC;AACA;AACA;;AAEA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU,iCAAiC;AAC3C,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,GAAG;;AAEV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;;AAEA,wEAAwE;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;;AAEH,0BAA0B,2BAA2B,2EAA2E,kCAAkC,wBAAwB,OAAO,kCAAkC,mIAAmI;;AAEtW;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,eAAe;AACnC;AACA;;AAEA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0BAA0B;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4JAA4J;AAC5J;AACA,QAAQ;AACR;AACA;AACA,iJAAiJ;;AAEjJ;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B,mJAAmJ;AACnJ;;AAEA;AACA;;AAEA;AACA;;AAEA,wIAAwI;AACxI;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4IAA4I;AAC5I;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,0JAA0J;AAC1J;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;;;AAGR;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA,qBAAqB;AACrB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,qEAAqE;AACrE;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,WAAW;AACnC;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA,MAAM;;;AAGN;AACA;AACA,MAAM;;;AAGN;AACA;AACA,MAAM;;;AAGN;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA;;AAEA;AACA,gDAAgD;;AAEhD,gDAAgD;;AAEhD,+EAA+E;AAC/E;AACA;AACA;;AAEA,2FAA2F;;AAE3F;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA,6DAA6D;;AAE7D;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;;;;;AC3rnBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,sBAAsB;AACxC;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,cAAc,uBAAuB;AACrC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,gBAAgB;;AAElE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA,MAAM;AACN;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,eAAe;AAC3B,YAAY,sCAAsC;AAClD;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;AAC5C;;AAEA;AACA;AACA;AACA,iEAAiE;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,cAAc;AAC1B,YAAY,cAAc;AAC1B,YAAY,cAAc;AAC1B,YAAY,2BAA2B;AACvC;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,sBAAsB;AAClC;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY,sBAAsB;AAClC;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY;AACZ;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB,YAAY,mBAAmB;AAC/B;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET,uCAAuC,qDAAqD;;;AAG5F;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;;;AAGV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;;;AAGA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;;AAE1C;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;;AAErE;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2CAA2C;;AAE3C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mFAAmF;AACnF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,cAAc;AAC1B,YAAY,cAAc;AAC1B;;;AAGA;AACA;AACA,iEAAiE;AACjE;;AAEA,gBAAgB;;AAEhB,sCAAsC,YAAY;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,uDAAuD;;AAEvD;AACA;AACA;;AAEA,0BAA0B;;;AAG1B;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;;AAEA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA2B;;AAE3B,kFAAkF;;AAElF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC;;;AAGhC;AACA;AACA;;AAEA;AACA,cAAc;AACd,MAAM;;;AAGN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;;AAGN;AACA,0DAA0D;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;AACT;AACA,gBAAgB;AAChB;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;;AAEP;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA,MAAM;;;AAGN;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA,UAAU;AACV;;;AAGA;;AAEA;AACA;AACA,UAAU;;;AAGV,6CAA6C;;;AAG7C;AACA;AACA;AACA;AACA,SAAS,GAAG;;;AAGZ;AACA,SAAS;;;AAGT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO,GAAG;;AAEV;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA,MAAM;AACN,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA,kCAAkC;;AAElC;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iMAAiM;;AAEjM;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,+DAA+D;;AAE/D;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAmC;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP,MAAM;;;AAGN;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;;;AAGV;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA,QAAQ;;;AAGR;AACA,iEAAiE;;;AAGjE;AACA;;AAEA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;;AAE3B;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;;;AAGV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ,UAAU;;;AAGV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA,YAAY;;;AAGZ;AACA;AACA;;AAEA,wCAAwC;AACxC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,gCAAgC;;AAEhC;AACA;AACA;AACA;AACA,KAAK;AACL,4CAA4C;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,wCAAwC;;;AAGxC;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,0CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA,8DAA8D;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;;;AAGhB;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;;;AAGhB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;;;AAGd;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW,OAAO;AAClB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,cAAc,WAAW;AACzB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,eAAe,cAAc;AAC7B,eAAe,cAAc;AAC7B,eAAe;AACf;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA,KAAK;;AAEL;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,0CAA0C;;AAE1C;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB,YAAY,0BAA0B;AACtC;;;AAGA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa;AACb;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB,YAAY,4BAA4B;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,oCAAoC;AAChD;;;AAGA;AACA,yEAAyE,aAAa;AACtF;AACA;;AAEA;AACA;AACA;AACA,qFAAqF;AACrF;;AAEA,uDAAuD;AACvD;AACA,GAAG;AACH;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,aAAa;AACxB;;;AAGA;AACA;AACA,GAAG;;;AAGH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;;AAEA;AACA,uDAAuD;;AAEvD;;AAEA;AACA,2EAA2E;;AAE3E;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD;;AAEtD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;;AAEA;AACA,IAAI;;AAEJ,kCAAkC;AAClC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,sBAAsB,8BAA8B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO,GAAG;;AAEV;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,UAAU;;;AAGV;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC;;AAEhC;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA,WAAW;AACX;AACA,UAAU;;;AAGV;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iDAAiD;;;AAGjD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,eAAe;AACf;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;;AAEd;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,QAAQ;;;AAGR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD;;AAEpD;AACA;AACA;AACA,mBAAmB;AACnB;AACA,eAAe;AACf,cAAc;AACd;;;AAGA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA,aAAa,GAAG;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA,YAAY;;;AAGZ;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,qEAAqE;;AAErE,uDAAuD;;AAEvD,+FAA+F;;AAE/F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG;;AAEZ;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,aAAa;AACzB;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA,iEAAe,QAAQ,EAAC;AAC8C;;;;;;;;AClnHtE;AACA,IAAI,IAAyD;AAC7D,2BAA2B,mBAAO,CAAC,IAAY;AAC/C,MAAM,EAK6C;AACnD,CAAC;AACD,qCAAqC;AACrC;AACA;AACA;AACA;AACA,mBAAmB,8BAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,8BAAmB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,8BAAmB;AAC7B;AACA;AACA,UAAU,8BAAmB;AAC7B;AACA;AACA,UAAU,8BAAmB;AAC7B,eAAe,8BAAmB;AAClC,mDAAmD,+BAA+B;AAClF;AACA;AACA;AACA;AACA,UAAU,8BAAmB;AAC7B;AACA,iEAAiE,iBAAiB;AAClF;AACA,0DAA0D,aAAa;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,8BAAmB;AAC7B,gCAAgC,8BAAmB;AACnD;AACA;AACA;AACA,WAAW,8BAAmB;AAC9B,kDAAkD,gCAAgC;AAClF,0EAA0E,8BAAmB,4BAA4B,oBAAoB;AAC7I;AACA;AACA;AACA;AACA,UAAU,8BAAmB;AAC7B;AACA,oCAAoC,4BAA4B;AAChE,0CAA0C;AAC1C,WAAW,8BAAmB;AAC9B;AACA;AACA;AACA;AACA,UAAU,8BAAmB,kCAAkC;AAC/D;AACA;AACA,UAAU,8BAAmB;AAC7B;AACA;AACA;AACA,iBAAiB,8BAAmB,CAAC,8BAAmB;AACxD,UAAU;AACV;AACA;;AAEA;AACA,iCAAiC,+BAAmB;;AAEpD;;AAEA,cAAc,+BAAmB;AACjC,cAAc,+BAAmB;AACjC,eAAe,+BAAmB;AAClC,WAAW,+BAAmB;AAC9B,gBAAgB,+BAAmB;AACnC,kBAAkB,+BAAmB;AACrC,qBAAqB,+BAAmB;AACxC,qBAAqB,+BAAmB;AACxC,eAAe,+BAAmB;AAClC,+CAA+C;AAC/C;AACA;AACA;;AAEA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,8CAA8C;AAC9C,MAAM,4BAA4B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,+BAAmB;;AAEpD,gBAAgB,+BAAmB;AACnC,cAAc,+BAAmB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,+BAAmB;;AAEpD;;AAEA,SAAS,+BAAmB;;AAE5B;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,+BAAmB;;AAEpD;;AAEA;AACA,eAAe,+BAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,+BAAmB;;AAEpD;AACA,YAAY,+BAAmB;AAC/B,kBAAkB,+BAAmB;;AAErC;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,+BAAmB;;AAEpD,SAAS,+BAAmB;AAC5B,eAAe,+BAAmB;AAClC,cAAc,+BAAmB;;AAEjC,iBAAiB,+BAAmB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,+BAAmB;;AAEpD;;AAEA,+BAAmB;AACnB,eAAe,+BAAmB;AAClC,WAAW,+BAAmB;AAC9B,YAAY,+BAAmB;AAC/B,cAAc,+BAAmB;AACjC,UAAU,+BAAmB;AAC7B,iBAAiB,+BAAmB;;AAEpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,mBAAmB;AACnB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,eAAe,gCAAmB;AAClC,eAAe,gCAAmB;AAClC;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,UAAU,gCAAmB;AAC7B,UAAU,gCAAmB;AAC7B;AACA,4BAA4B,mBAAmB;;AAE/C;AACA;AACA;AACA;AACA,IAAI,YAAY;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;;AAEA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,aAAa,gCAAmB;AAChC,WAAW,gCAAmB;AAC9B,UAAU,gCAAmB;AAC7B,UAAU,gCAAmB;AAC7B,gBAAgB,gCAAmB;AACnC;AACA;;AAEA,gCAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;;;AAGD,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,eAAe,gCAAmB;AAClC,UAAU,gCAAmB;AAC7B,kBAAkB,gCAAmB;AACrC,eAAe,gCAAmB;AAClC,0BAA0B;AAC1B;;AAEA;AACA;AACA;AACA,eAAe,gCAAmB;AAClC;AACA;AACA;AACA;AACA;AACA,EAAE,gCAAmB;AACrB,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,YAAY,gCAAmB;AAC/B,UAAU,gCAAmB;AAC7B,aAAa,gCAAmB;AAChC;;AAEA;AACA;AACA;AACA;;AAEA;;;AAGA,OAAO;;AAEP;AACA;;AAEA;;;AAGA,OAAO;;AAEP;AACA;;AAEA,iBAAiB;;AAEjB;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA;;AAEA,cAAc,gCAAmB;AACjC,cAAc,gCAAmB;AACjC;;AAEA,gCAAgC,gCAAmB;AACnD;AACA;AACA;AACA;AACA,CAAC;;;AAGD,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,SAAS,gCAAmB;AAC5B,iBAAiB,gCAAmB;AACpC,iBAAiB,gCAAmB;AACpC;AACA,EAAE;AACF;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,UAAU,gCAAmB;AAC7B,eAAe,gCAAmB;AAClC,eAAe,gCAAmB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;;AAEA,aAAa,gCAAmB;AAChC,iBAAiB,gCAAmB;AACpC,qBAAqB,gCAAmB;AACxC;;AAEA;AACA,gCAAmB,4BAA4B,gCAAmB,oCAAoC,cAAc;;AAEpH;AACA,sDAAsD,2BAA2B;AACjF;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,eAAe,gCAAmB;AAClC,YAAY,gCAAmB;;AAE/B,gCAAmB;AACnB;AACA;AACA;AACA,CAAC;;;AAGD,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,cAAc,gCAAmB;AACjC;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,YAAY,gCAAmB;AAC/B;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,MAAM,YAAY;AAClB,IAAI;AACJ;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;;;AAGA,kBAAkB,gCAAmB;;AAErC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;;;AAGA,OAAO;;AAEP;AACA;;AAEA,cAAc;;;AAGd,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,WAAW,gCAAmB;AAC9B,aAAa,gCAAmB;AAChC;AACA,kDAAkD;;AAElD;AACA,qEAAqE;AACrE,CAAC;AACD;AACA,QAAQ,gCAAmB;AAC3B;AACA,CAAC;;;AAGD,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,aAAa,gCAAmB;AAChC,WAAW,gCAAmB;AAC9B,WAAW,gCAAmB;AAC9B,eAAe,gCAAmB;AAClC,UAAU,gCAAmB;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,uBAAuB;AACzG,iEAAiE;AACjE,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,cAAc,gCAAmB;AACjC,WAAW,gCAAmB;AAC9B,YAAY,gCAAmB;AAC/B;AACA,6BAA6B;AAC7B;AACA;AACA,sDAAsD,QAAQ;AAC9D;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;;;AAGA,cAAc,gCAAmB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,aAAa,gCAAmB;AAChC,UAAU,gCAAmB;AAC7B;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,UAAU,gCAAmB;AAC7B;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;;AAEA;AACA,cAAc,gCAAmB;AACjC,gBAAgB,gCAAmB;;AAEnC;AACA;AACA;AACA;AACA,CAAC;;AAED,gCAAmB;;;AAGnB,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,cAAc,gCAAmB;AACjC,cAAc,gCAAmB;AACjC;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,eAAe,gCAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;;AAEA;AACA,cAAc,gCAAmB;AACjC,WAAW,gCAAmB;AAC9B,UAAU,gCAAmB;AAC7B,eAAe,gCAAmB;AAClC,cAAc,gCAAmB;AACjC;;AAEA;AACA,6BAA6B,gCAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,WAAW;AAChD,mBAAmB,sCAAsC;AACzD,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,EAAE;;;AAGF,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C;;;AAG1C,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,gBAAgB,gCAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,UAAU,gCAAmB;AAC7B,UAAU,gCAAmB;AAC7B,UAAU,gCAAmB;;AAE7B;AACA,qEAAqE,gCAAgC;AACrG;;;AAGA,OAAO;;AAEP;AACA;;AAEA,8BAA8B;AAC9B,wCAAwC;;;AAGxC,OAAO;;AAEP;AACA;;AAEA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD,eAAe,gCAAmB;AAClC,qBAAqB,gCAAmB;AACxC,kBAAkB,gCAAmB;AACrC;;AAEA,YAAY,gCAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY;AAChB;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,gBAAgB,gCAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,kBAAkB,gCAAmB;AACrC;AACA,0CAA0C,gCAAmB,oCAAoC;AACjG;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,gBAAgB,gCAAmB;AACnC;AACA;AACA,4DAA4D;AAC5D;;;AAGA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;AACA,kBAAkB,gCAAmB;AACrC,iCAAiC,SAAS,mBAAmB,aAAa;AAC1E,CAAC;;;AAGD,OAAO;;AAEP;AACA;;AAEA;;AAEA,OAAO;;AAEP;AACA,iCAAiC,gCAAmB;;AAEpD;;;AAGA,eAAe,gCAAmB;AAClC,eAAe,gCAAmB;AAClC,eAAe,gCAAmB;AAClC,gBAAgB,gCAAmB;AACnC,yBAAyB,gCAAmB;AAC5C,iBAAiB,gCAAmB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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;AACA;AACA;AACA;AACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA,yBAAyB,gCAAmB;;AAE5C;AACA,0BAA0B,gCAAmB;;AAE7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA,8BAA8B;AAC9B,sFAAsF,gCAAmB;AACzG,0GAA0G,gCAAmB;;AAE7H;AACA,aAAa,gCAAmB;;AAEhC;;;;;;;;;;;;;AAaA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG,IAAI;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK,IAAI;AACT,kCAAkC;AAClC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,oCAAoC;AACpC;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA,OAAO;;AAEP,UAAU;AACV,CAAC;AACD;;;;;;;;;;;;;;;AC35EA;;;;;;;;;;;;;;;;;;;ACAA;AACoD,CAAC;;AAEtB,CAAC;;AAEL;AACE,CAAC;;AAEmB;AACF;AACU,CAAC;;AAEnB;AACO;AAC9C;;AAEA,6CAAe,yBAAM,CAAC,qBAAM,EAAE,yBAAU,EAAE,6BAAc;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,YAAY;AAC3C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,iCAAiC,mBAAI;AACrC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO,uBAAuB,oBAAK;AACnC;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA,iCAAiC,oBAAK;AACtC;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA,wBAAwB,GAAG,iFAAoC;AAC/D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,YAAY;AAC/C;;AAEA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,aAAa,kFAAsC;AACnD;;AAEA,GAAG;;AAEH;AACA;AACA;AACA,MAAM,4BAAQ;AACd;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC,CAAC,EAAC;AACH;;;;;;;;;;;;;;;;ACnOA;AACkE,CAAC;;AAEgB;AACjC,CAAC;;AAEN;AAC4C;AACzF,2BAA2B,GAAG,uEAAgB;AAC9C;AACA;AACA;AACA;AACA;;AAEA,iEAAe,+EAAc;AAC7B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,2HAAoC;AAChD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,eAAe,GAAG,6HAAqC;AACvD;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,sBAAsB,4EAAmB;AACzC;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA,oBAAoB,qIAAyC;AAC7D,sDAAsD,yBAAyB;AAC/E,eAAe;AACf;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA,mBAAmB,+HAAsC;AACzD,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,uCAAuC,uEAAa;AACpD;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ,sCAAsC,yEAAc;AAC5D;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ,qBAAqB,iFAAkB,gBAAgB,iFAAe;AAC9E;AACA;AACA,KAAK;;AAEL;AACA;AACA,oDAAoD;;AAEpD;AACA,uDAAuD;AACvD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA,MAAM,+IAA8C;AACpD,KAAK;;AAEL;AACA,oBAAoB,mIAAwC;AAC5D,mBAAmB,qEAAS;AAC5B;AACA,mCAAmC,6EAAoB;AACvD,wBAAwB,6EAAoB;AAC5C,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA,mBAAmB,qIAAyC;AAC5D;AACA;AACA,KAAK;;AAEL;AACA,6CAA6C,uIAA0C;AACvF,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA,yBAAyB,uEAAa,EAAE,qEAAY;AACpD,QAAQ,+HAAsC;AAC9C,QAAQ;AACR;AACA;AACA;;;AAGA;AACA,KAAK;;AAEL,qBAAqB;;AAErB;AACA,MAAM,+HAAsC;AAC5C;AACA,KAAK;;AAEL;AACA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,MAAM,iIAAuC;AAC7C;AACA,KAAK;;AAEL;AACA,MAAM,6IAA6C,QAAQ;AAC3D;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC,CAAC,EAAC;AACH;;;;;;;;;;;;;;;;AC5YA;AACiD;AACA,CAAC;;AAEC,CAAC;;AAEb;AACM;AAC7C,iEAAe,iEAAM,CAAC,mEAAU,EAAE,mEAAU;AAC5C;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,eAAe;AACf;AACA;;AAEA,GAAG;AACH;AACA;AACA,wCAAwC,gEAAO;AAC/C;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;;AAEA,CAAC,CAAC,EAAC;AACH;;;;;;;;;;;;;;;AC1EA;;;;;;;;;;;;;ACAA;AACwD,CAAC;;AAE1B,CAAC;;AAEyC;AAC1B,CAAC;;AAET;AACO;AAC9C,mBAAmB,yBAAM,CAAC,qBAAM,EAAE,8BAAkB,aAAa,wBAAS;AAC1E;;AAEA,+CAAe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E;AAC7E;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iFAAoC;AAC/C;AACA,KAAK;;AAEL;AACA,eAAe,GAAG,+EAAmC;AACrD;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA,MAAM,4BAAQ;AACd;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA,0CAA0C,aAAa;AACvD;AACA;;AAEA,4CAA4C,aAAa;AACzD;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC,CAAC,EAAC;AACH;;;;;;;;;;;;;;;AC3HA;AACuE,CAAC;;AAED,CAAC;;AAErB,CAAC;;AAEb;AACvC,mBAAmB,iEAAM,CAAC,oEAAiB;AAC3C;;AAEA,iEAAe;AACf;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,uBAAuB,yEAAqB,GAAG,kEAAc;AAC7D,KAAK;;AAEL;AACA;AACA;AACA,gBAAgB,sEAAa;AAC7B;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;;AAEA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,4BAA4B;;AAE5B;AACA;AACA,OAAO;AACP,uBAAuB;;AAEvB;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC,CAAC,EAAC;AACH;;;;;;;;;;;;;;;;;AClIA;AAC6B,CAAC;;AAEiB;AACwB,CAAC;;AAE3B,CAAC;;AAEP;AACO;AAC9C,mBAAmB,iEAAM,CAAC,kEAAS,EAAE,oEAAiB;AACtD;;AAEA,iEAAe;AACf;AACA;AACA,UAAU;AACV,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA,iCAAiC,uDAAK;AACtC,KAAK;;AAEL;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,wBAAwB,yEAAc;AACtC;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC,CAAC,EAAC;AACH;;;;;;;;;;;;;;;;AC1J4D;AAC1B;AACQ;AACM;AAChD,uBAAuB,+EAAsB;AAC7C,sBAAsB,+EAAsB;AACsC;AAClF,sEAAe;AACf;AACA,YAAY;AACZ,mBAAmB;AACnB,gBAAgB;AAChB;AACA;AACA;AACA,CAAC,EAAC;AACF","sources":["webpack://rw.flex/./src/app/consts/RwRegex.ts","webpack://rw.flex/./src/app/dem/RwLogEntry.ts","webpack://rw.flex/./src/app/dem/RwUserEntry.ts","webpack://rw.flex/./src/app/dal/RwTaskReporting.ts","webpack://rw.flex/./src/app/utils/RwViewUtils.ts","webpack://rw.flex/./src/app/views/tasks/RwTaskSpace.ts","webpack://rw.flex/./src/app/views/account/RwCCExpirePopup.vue?9680","webpack://rw.flex/./src/app/views/account/RwCCExpirePopup.vue?dd44","webpack://rw.flex/./src/app/views/account/RwCCExpirePopup.vue?5ea5","webpack://rw.flex/./src/app/views/account/RwCCExpirePopup.vue","webpack://rw.flex/./node_modules/vuetify/lib/components/VCombobox/VCombobox.js","webpack://rw.flex/./src/app/views/account/RwOnboardSettings.vue?8376","webpack://rw.flex/./src/app/views/account/RwOnboardSettings.vue?aca9","webpack://rw.flex/./src/app/views/account/RwOnboardSettings.vue?4865","webpack://rw.flex/./src/app/views/account/RwOnboardSettings.vue?5fd9","webpack://rw.flex/./src/app/views/account/RwOnboardSettings.vue?e077","webpack://rw.flex/./src/app/views/account/RwOnboardSettings.vue","webpack://rw.flex/./src/app/views/drivers/RwDeleteDriver.vue?3e08","webpack://rw.flex/./src/app/views/drivers/RwDeleteDriver.vue?10c4","webpack://rw.flex/./src/app/views/drivers/RwDeleteDriver.vue?b8ce","webpack://rw.flex/./src/app/views/drivers/RwDeleteDriver.vue","webpack://rw.flex/./src/app/views/drivers/RwDriverPassEdit.vue?f088","webpack://rw.flex/./src/app/views/drivers/RwDriverPassEdit.vue?2c2c","webpack://rw.flex/./src/app/views/drivers/RwDriverPassEdit.vue?6749","webpack://rw.flex/./src/app/views/drivers/RwDriverPassEdit.vue","webpack://rw.flex/./src/app/views/drivers/RwDriverUnameEdit.vue?5147","webpack://rw.flex/./src/app/views/drivers/RwDriverUnameEdit.vue?8ed9","webpack://rw.flex/./src/app/views/drivers/RwDriverUnameEdit.vue?81d4","webpack://rw.flex/./src/app/views/drivers/RwDriverUnameEdit.vue","webpack://rw.flex/./src/app/views/drivers/RwDriverView.vue?ec36","webpack://rw.flex/./src/app/views/drivers/RwDriverView.vue?0e86","webpack://rw.flex/./src/app/views/drivers/RwDriverView.vue?ab8a","webpack://rw.flex/./src/app/views/drivers/RwDriverView.vue?e566","webpack://rw.flex/./src/app/views/drivers/RwDriverView.vue?9d69","webpack://rw.flex/./src/app/views/drivers/RwDriverView.vue","webpack://rw.flex/./src/app/views/drivers/RwPingTest.vue?e1ce","webpack://rw.flex/./src/app/views/drivers/RwPingTest.vue?4ef9","webpack://rw.flex/./src/app/views/drivers/RwPingTest.vue?3df0","webpack://rw.flex/./src/app/views/drivers/RwPingTest.vue","webpack://rw.flex/./src/app/views/drivers/RwReplaceDriver.vue?6bd1","webpack://rw.flex/./src/app/views/drivers/RwReplaceDriver.vue?cd4e","webpack://rw.flex/./src/app/views/drivers/RwReplaceDriver.vue?1a2f","webpack://rw.flex/./src/app/views/drivers/RwReplaceDriver.vue","webpack://rw.flex/./src/app/views/planner/RwLimitPopup.vue?bb2c","webpack://rw.flex/./src/app/views/planner/RwLimitPopup.vue?3dee","webpack://rw.flex/./src/app/views/planner/RwLimitPopup.vue?edef","webpack://rw.flex/./src/app/views/planner/RwLimitPopup.vue","webpack://rw.flex/./src/app/views/planner/RwPlanner.vue?a720","webpack://rw.flex/./src/app/views/planner/RwPlannerMap.vue?46ea","webpack://rw.flex/./src/app/views/planner/RwPlannerMap.vue?338c","webpack://rw.flex/./src/app/views/planner/RwPlannerMap.vue?12bf","webpack://rw.flex/./src/app/views/planner/RwPlannerMap.vue?cb58","webpack://rw.flex/./src/app/views/planner/RwPlannerMap.vue?d06e","webpack://rw.flex/./src/app/views/planner/RwPlannerMap.vue","webpack://rw.flex/./node_modules/vuetify/src/components/VTimeline/VTimeline.sass","webpack://rw.flex/./node_modules/vuetify/lib/components/VTimeline/VTimeline.js","webpack://rw.flex/./node_modules/vuetify/lib/components/VTimeline/VTimelineItem.js","webpack://rw.flex/./src/app/views/planner/RwPlannerList.vue?5b8a","webpack://rw.flex/./src/app/dem/RwStep.ts","webpack://rw.flex/./src/app/views/planner/RwPlannerActions.vue?156d","webpack://rw.flex/./src/app/views/animations/RwAddStopsArrow.vue?49f6","webpack://rw.flex/./node_modules/vue-lottie/src/lottie.vue?82c5","webpack://rw.flex/node_modules/vue-lottie/src/lottie.vue","webpack://rw.flex/./node_modules/vue-lottie/src/lottie.vue?1aef","webpack://rw.flex/./node_modules/vue-lottie/src/lottie.vue","webpack://rw.flex/./src/app/views/animations/RwAddStopsArrow.vue?c219","webpack://rw.flex/./src/app/views/animations/RwAddStopsArrow.vue?8394","webpack://rw.flex/./src/app/views/animations/RwAddStopsArrow.vue","webpack://rw.flex/./src/app/views/planner/RwPlannerActions.vue?b798","webpack://rw.flex/./src/app/views/planner/RwPlannerActions.vue?ce30","webpack://rw.flex/./src/app/views/planner/RwPlannerActions.vue?2107","webpack://rw.flex/./src/app/views/planner/RwPlannerActions.vue?f0d8","webpack://rw.flex/./src/app/views/planner/RwPlannerActions.vue","webpack://rw.flex/./src/app/views/planner/RwPlannerList.vue?e2e2","webpack://rw.flex/./src/app/views/planner/RwPlannerList.vue?260b","webpack://rw.flex/./src/app/views/planner/RwPlannerList.vue?1adc","webpack://rw.flex/./src/app/views/planner/RwPlannerList.vue?5730","webpack://rw.flex/./src/app/views/planner/RwPlannerList.vue?c625","webpack://rw.flex/./src/app/views/planner/RwPlannerList.vue?669a","webpack://rw.flex/./src/app/views/planner/RwPlannerList.vue","webpack://rw.flex/./src/app/views/planner/RwPlannerStatus.vue?fc2a","webpack://rw.flex/./src/app/views/planner/RwPlannerStatus.vue?f2f6","webpack://rw.flex/./src/app/views/planner/RwPlannerStatus.vue?3125","webpack://rw.flex/./src/app/views/planner/RwPlannerStatus.vue?433f","webpack://rw.flex/./src/app/views/planner/RwPlannerStatus.vue?5eb8","webpack://rw.flex/./src/app/views/planner/RwPlannerStatus.vue","webpack://rw.flex/./src/app/views/planner/RwPinPanel.vue?40ab","webpack://rw.flex/./src/app/views/planner/RwPinPanel.vue?f680","webpack://rw.flex/./src/app/views/planner/RwPinPanel.vue?3803","webpack://rw.flex/./src/app/views/planner/RwPinPanel.vue","webpack://rw.flex/./src/app/views/planner/RwPinPopup.vue?89e9","webpack://rw.flex/./src/app/views/history/RwHistoryView.vue?108b","webpack://rw.flex/./src/app/views/history/RwHistoryView.vue?0b17","webpack://rw.flex/./src/app/views/history/RwHistoryView.vue?c46f","webpack://rw.flex/./src/app/views/history/RwHistoryView.vue?b2a1","webpack://rw.flex/./src/app/views/history/RwHistoryView.vue?7922","webpack://rw.flex/./src/app/views/history/RwHistoryView.vue","webpack://rw.flex/./src/app/views/planner/RwPinPopup.vue?6259","webpack://rw.flex/./src/app/views/planner/RwPinPopup.vue?8ac6","webpack://rw.flex/./src/app/views/planner/RwPinPopup.vue?4d70","webpack://rw.flex/./src/app/views/planner/RwPinPopup.vue?cf6b","webpack://rw.flex/./src/app/views/planner/RwPinPopup.vue","webpack://rw.flex/./node_modules/vuetify/src/components/VRangeSlider/VRangeSlider.sass","webpack://rw.flex/./node_modules/vuetify/lib/components/VSlider/index.js","webpack://rw.flex/./node_modules/vuetify/lib/components/VRangeSlider/VRangeSlider.js","webpack://rw.flex/./src/app/views/planner/RwPlannerLayers.vue?1f9a","webpack://rw.flex/./src/app/views/planner/RwPlannerLayers.vue?28a3","webpack://rw.flex/./src/app/views/planner/RwPlannerLayers.vue?b41d","webpack://rw.flex/./src/app/views/planner/RwPlannerLayers.vue?cfe7","webpack://rw.flex/./src/app/views/planner/RwPlannerLayers.vue?d3b5","webpack://rw.flex/./src/app/views/planner/RwPlannerLayers.vue","webpack://rw.flex/./src/app/views/pickers/RwClusterPicker.vue?f2e8","webpack://rw.flex/./src/app/views/pickers/RwClusterPicker.vue?250a","webpack://rw.flex/./src/app/views/pickers/RwClusterPicker.vue?1b88","webpack://rw.flex/./src/app/views/pickers/RwClusterPicker.vue?c1fe","webpack://rw.flex/./src/app/views/pickers/RwClusterPicker.vue?9b2a","webpack://rw.flex/./src/app/views/pickers/RwClusterPicker.vue","webpack://rw.flex/./src/app/views/planner/RwPlannerMapOptions.vue?e704","webpack://rw.flex/./src/app/views/planner/RwPlannerMapOptions.vue?5ac8","webpack://rw.flex/./src/app/views/planner/RwPlannerMapOptions.vue?b7d7","webpack://rw.flex/./src/app/views/planner/RwPlannerMapOptions.vue?6be1","webpack://rw.flex/./src/app/views/planner/RwPlannerMapOptions.vue?b528","webpack://rw.flex/./src/app/views/planner/RwPlannerMapOptions.vue","webpack://rw.flex/./src/app/views/pickers/RwRoutePicker.vue?07ca","webpack://rw.flex/./src/app/views/pickers/RwRoutePicker.vue?9f72","webpack://rw.flex/./src/app/views/pickers/RwRoutePicker.vue?1042","webpack://rw.flex/./src/app/views/pickers/RwRoutePicker.vue","webpack://rw.flex/./src/app/views/planner/RwSearchOptions.vue?2d9a","webpack://rw.flex/./src/app/views/planner/RwSearchOptions.vue?d616","webpack://rw.flex/./src/app/views/planner/RwSearchOptions.vue?4e14","webpack://rw.flex/./src/app/views/planner/RwSearchOptions.vue","webpack://rw.flex/./src/app/views/planner/RwRouteOrder.vue?ef8e","webpack://rw.flex/./src/app/views/planner/RwRouteOrder.vue?90ad","webpack://rw.flex/./src/app/views/planner/RwRouteOrder.vue?e51f","webpack://rw.flex/./src/app/views/planner/RwRouteOrder.vue?db74","webpack://rw.flex/./src/app/views/planner/RwRouteOrder.vue?13a5","webpack://rw.flex/./src/app/views/planner/RwRouteOrder.vue","webpack://rw.flex/./src/app/views/planner/RwRouteSummary.vue?3724","webpack://rw.flex/./src/app/views/planner/RwRouteSummary.vue?5784","webpack://rw.flex/./src/app/views/planner/RwRouteSummary.vue?36f3","webpack://rw.flex/./src/app/views/planner/RwRouteSummary.vue?dad7","webpack://rw.flex/./src/app/views/planner/RwRouteSummary.vue?56ae","webpack://rw.flex/./src/app/views/planner/RwRouteSummary.vue","webpack://rw.flex/./src/app/views/planner/RwPlannerDropSelect.vue?6e69","webpack://rw.flex/./src/app/views/planner/RwPlannerDropSelect.vue?ecc7","webpack://rw.flex/./src/app/views/planner/RwPlannerDropSelect.vue?6e41","webpack://rw.flex/./src/app/views/planner/RwPlannerDropSelect.vue","webpack://rw.flex/./src/app/views/planner/RwPlannerDropRemove.vue?bb95","webpack://rw.flex/./src/app/views/planner/RwPlannerDropRemove.vue?ce9d","webpack://rw.flex/./src/app/views/planner/RwPlannerDropRemove.vue?6b3a","webpack://rw.flex/./src/app/views/planner/RwPlannerDropRemove.vue","webpack://rw.flex/./src/app/views/account/RwProBetaPrimer.vue?d525","webpack://rw.flex/./src/app/views/account/RwProBetaPrimer.vue?4cc0","webpack://rw.flex/./src/app/views/account/RwProBetaPrimer.vue?1617","webpack://rw.flex/./src/app/views/account/RwProBetaPrimer.vue","webpack://rw.flex/./src/app/views/planner/RwAddReportDialog.vue?9c34","webpack://rw.flex/./src/app/views/planner/RwAddReportDialog.vue?9f2b","webpack://rw.flex/./src/app/views/planner/RwAddReportDialog.vue?de75","webpack://rw.flex/./src/app/views/planner/RwAddReportDialog.vue","webpack://rw.flex/./src/app/views/planner/RwAddMissingReportDialog.vue?f96e","webpack://rw.flex/./src/utils/countries.ts","webpack://rw.flex/./src/app/views/planner/RwAddMissingReportDialog.vue?2946","webpack://rw.flex/./src/app/views/planner/RwAddMissingReportDialog.vue?aa9c","webpack://rw.flex/./src/app/views/planner/RwAddMissingReportDialog.vue","webpack://rw.flex/./src/app/views/planner/RwAddMissingFinalizeDialog.vue?9b5d","webpack://rw.flex/./src/app/views/planner/RwAddMissingFinalizeDialog.vue?400f","webpack://rw.flex/./src/app/views/planner/RwAddMissingFinalizeDialog.vue?4f15","webpack://rw.flex/./src/app/views/planner/RwAddMissingFinalizeDialog.vue","webpack://rw.flex/./src/app/views/planner/RwPlanner.vue?1e21","webpack://rw.flex/./src/app/views/planner/RwPlanner.vue?28a3","webpack://rw.flex/./src/app/views/planner/RwPlanner.vue?f6dc","webpack://rw.flex/./src/app/views/planner/RwPlanner.vue?588f","webpack://rw.flex/./src/app/views/planner/RwPlanner.vue?6b89","webpack://rw.flex/./src/app/views/planner/RwPlanner.vue?6a19","webpack://rw.flex/./src/app/views/planner/RwPlanner.vue","webpack://rw.flex/./src/app/views/planner/RwStopView.vue?24c5","webpack://rw.flex/./src/app/views/planner/RwStopView.vue?b704","webpack://rw.flex/./src/app/views/planner/RwStopView.vue?7438","webpack://rw.flex/./src/app/views/planner/RwStopView.vue?e790","webpack://rw.flex/./src/app/views/planner/RwStopView.vue?22b6","webpack://rw.flex/./src/app/views/planner/RwStopView.vue","webpack://rw.flex/./src/app/views/routes/RwRouteArchive.vue","webpack://rw.flex/./src/app/views/routes/RwRouteAssign.vue","webpack://rw.flex/./src/app/views/routes/RwRouteChangeStatus.vue","webpack://rw.flex/./src/app/views/routes/RwRouteCopy.vue","webpack://rw.flex/./src/app/views/routes/RwRouteDelete.vue","webpack://rw.flex/./src/app/views/routes/RwRouteView.vue?1adb","webpack://rw.flex/./src/app/views/routes/RwRouteView.vue?052c","webpack://rw.flex/./src/app/views/routes/RwRouteView.vue?7ec2","webpack://rw.flex/./src/app/views/routes/RwRouteView.vue?0c5e","webpack://rw.flex/./src/app/views/routes/RwRouteView.vue?e338","webpack://rw.flex/./src/app/views/routes/RwRouteView.vue","webpack://rw.flex/./src/app/views/sites/RwSiteView.vue?5c29","webpack://rw.flex/./src/app/views/sites/RwSiteView.vue?767c","webpack://rw.flex/./src/app/views/sites/RwSiteView.vue?c1c2","webpack://rw.flex/./src/app/views/sites/RwSiteView.vue?1346","webpack://rw.flex/./src/app/views/sites/RwSiteView.vue?6d0e","webpack://rw.flex/./src/app/views/sites/RwSiteView.vue","webpack://rw.flex/./src/app/views/tasks/RwTaskPop.vue?932e","webpack://rw.flex/./src/app/views/tasks/RwTaskPop.vue?0056","webpack://rw.flex/./src/app/views/tasks/RwTaskPop.vue?9649","webpack://rw.flex/./src/app/views/tasks/RwTaskPop.vue?99c7","webpack://rw.flex/./src/app/views/tasks/RwTaskPop.vue?8210","webpack://rw.flex/./src/app/views/tasks/RwTaskPop.vue","webpack://rw.flex/./node_modules/vuetify/src/components/VAutocomplete/VAutocomplete.sass","webpack://rw.flex/./node_modules/lottie-web/build/player/lottie.js","webpack://rw.flex/./node_modules/sortablejs/modular/sortable.esm.js","webpack://rw.flex/./node_modules/vuedraggable/dist/vuedraggable.umd.js","webpack://rw.flex/./node_modules/vuetify/src/components/VAlert/VAlert.sass","webpack://rw.flex/./node_modules/vuetify/lib/components/VAlert/VAlert.js","webpack://rw.flex/./node_modules/vuetify/lib/components/VAutocomplete/VAutocomplete.js","webpack://rw.flex/./node_modules/vuetify/lib/components/VLazy/VLazy.js","webpack://rw.flex/./node_modules/vuetify/src/components/VStepper/VStepper.sass","webpack://rw.flex/./node_modules/vuetify/lib/components/VStepper/VStepper.js","webpack://rw.flex/./node_modules/vuetify/lib/components/VStepper/VStepperContent.js","webpack://rw.flex/./node_modules/vuetify/lib/components/VStepper/VStepperStep.js","webpack://rw.flex/./node_modules/vuetify/lib/components/VStepper/index.js"],"sourcesContent":["export default class RwRegex {\n    static readonly EmailRules = [\n        v => !!v || \"E-mail is required\",\n        v => /(.+)@(.+){2,}\\.(.+){2,}/.test(v) || \"Please enter a valid email\"\n    ];\n\n    static readonly OptionalEmailRules = [\n        v => /(^$|(.+)@(.+){2,}\\.(.+){2,})/.test(v) || \"Please enter a valid email\"\n    ];\n\n    static readonly RequiredRules = [v => !!v || \"This field is required\"];\n\n    static readonly PasswordRules = [\n        v => !!v || \"Password is required\",\n        v => v.length >= 8 || \"Password must be at least 8 characters\"\n    ];\n\n    static readonly DomainRules = [\n        v => !!v || \"Domain is required\",\n        v =>\n            (typeof v !== \"undefined\" && v.length >= 3 && v.length <= 13) ||\n            \"Domain must be between 3 and 13 characters\",\n        v => /^([a-zA-Z0-9_+]+)$/i.test(v) || 'Domain can contain only letters, numbers, and underscore.'\n    ];\n}\n","export class RwLogSearchArgs {\n    startEpoc: number;\n    finishEpoc: number;\n    isCaptured: boolean;\n    source?: string;\n    userId?: string;\n    logLevel: number\n}\n\n\nexport class RwLogEntry {\n\n    static fromJsonArray(jsonArray: Object[]) {\n        let entries: RwLogEntry[] = [];\n        if (jsonArray != null && jsonArray.length > 0) {\n            jsonArray.forEach(function (jval) {\n                let logEntry = RwLogEntry.fromJson(jval);\n                entries.push(logEntry);\n            });\n        }\n        return entries;\n    }\n\n    static fromJson(json: Object): RwLogEntry {\n        let entry: RwLogEntry;\n        if (json != null) {\n            entry = new RwLogEntry();\n            entry.fromJson(json)\n        }\n        return entry;\n    }\n\n\n    logId: number;\n    date: Date;\n    severity: number\n    source?: string;\n    message?: string;\n\n    seshId?: string;\n    userId?: string;\n    userName?: string;\n    sdk?: string;\n    version?: string;\n    deviceId?: string;\n    isSelectedItem = false;\n\n    get sevSort() {\n        return (this.source == \"RwCrashHandler\") ? -1 : this.severity;\n    }\n\n    fromJson(json: Object) {\n        for (let key in json) {\n            //@formatter:off\n            switch (key) {\n                case \"lid\":\n                    this.logId = json[key];\n                    break;\n                case \"dte\":\n                    this.date = new Date(json[key]);\n                    break;\n                case \"sev\":\n                    this.severity = json[key];\n                    break;\n                case \"src\":\n                    this.source = json[key];\n                    break;\n                case \"msg\":\n                    this.message = json[key];\n                    break;\n                case \"did\":\n                    this.deviceId = json[key];\n                    break;\n                case \"sdk\":\n                    this.sdk = json[key];\n                    break;\n                case \"ver\":\n                    this.version = json[key];\n                    break;\n                case \"uid\":\n                    this.userId = json[key];\n                    break;\n                case \"unm\":\n                    this.userName = json[key];\n                    break;\n                case \"sid\":\n                    this.seshId = json[key];\n                    break;\n            }\n            //@formatter:on\n        }\n    }\n\n\n    get deviceInfo(): string {\n\n        let devInfo = \"\";\n        let gotSDK = this.sdk && this.sdk !== \"?\";\n        let gotVer = this.version;\n        if (gotSDK && gotVer) {\n            devInfo = `SDK: ${this.sdk}, VER: ${this.version}`;\n        } else if (gotSDK) {\n            devInfo = `SDK: ${this.sdk}`;\n        } else if (gotVer) {\n            devInfo = `VER: ${this.version}`;\n        }\n\n\n        return devInfo;\n    }\n\n    // get timeText(): string {\n    //   let timeText = \"\";\n    //   switch (this.type) {\n    //     case RwPinTypes.Stop:\n    //       if (this.stop) {\n    //         timeText = this.stop.timeText;\n    //       }\n    //       break;\n    //\n    //     case RwPinTypes.Route:\n    //\n    //       if (this.route) {\n    //         timeText = `Start Time: ${this.route.startTimeString}`;\n    //         //MONITOR: if there is need for an abstract finish location pin\n    //       }\n    //\n    //       break;\n    //\n    //   }\n    //   return timeText;\n    // }\n\n\n    // get timeFinishText(): string {\n    //   const finishTime = moment(this.route.startTime).add(this.route.totalTime, \"seconds\");\n    //   const timeText = `Finish Time: ${finishTime.format(\"L LT\")}`;\n    //   return timeText;\n    // }\n\n\n}\n\n\n","export class RwUserInstalls {\n\n    static fromJsonArray(jsonArray: Object[]) {\n        let installs: RwUserInstalls[] = [];\n        if (jsonArray != null && jsonArray.length > 0) {\n            jsonArray.forEach(function (jval) {\n                let userInstall = RwUserInstalls.fromJson(jval);\n                installs.push(userInstall);\n            });\n        }\n        return installs;\n    }\n\n    static fromJson(json: Object): RwUserInstalls {\n        let install: RwUserInstalls;\n        if (json != null) {\n            install = new RwUserInstalls();\n            install.fromJson(json)\n        }\n        return install;\n    }\n\n    installId: string;\n    userId: string;\n    deviceId: string;\n    created: Date;\n    activated: Date;\n    verOS: string;\n    verSDK: string;\n    locale: string;\n    lat: number;\n    lng: number;\n    LU: Date;\n    model: string;\n    installType: number;\n    installTypeEnum: number;\n    isActivated: boolean;\n    standardOS: string;\n\n    fromJson(json: Object) {\n        for (let key in json) {\n            //@formatter:off\n            switch (key) {\n                case \"InstallId\":\n                    this.installId = json[key];\n                    break;\n                case \"UserId\":\n                    this.userId = json[key];\n                    break;\n                case \"DeviceId\":\n                    this.deviceId = json[key];\n                    break;\n                case \"Created\":\n                    this.created = new Date(json[key]);\n                    break;\n                case \"Activated\":\n                    this.activated = new Date(json[key]);\n                    break;\n                case \"VerOS\":\n                    this.verOS = json[key];\n                    break;\n                case \"VerSDK\":\n                    this.verSDK = json[key];\n                    break;\n                case \"Locale\":\n                    this.locale = json[key];\n                    break;\n                case \"Lat\":\n                    this.lat = json[key];\n                    break;\n                case \"Lng\":\n                    this.lng = json[key];\n                    break;\n                case \"LU\":\n                    this.LU = new Date(json[key]);\n                    break;\n                case \"InstallType\":\n                    this.installType = json[key];\n                    break;\n                case \"InstallTypeEnum\":\n                    this.installTypeEnum = json[key];\n                    break;\n                case \"IsActivated\":\n                    this.isActivated = json[key];\n                    break;\n                case \"StandardOS\":\n                    this.standardOS = json[key];\n                    break;\n\n            }\n            //@formatter:on\n        }\n    }\n\n}\n\n\nexport class RwUserSessions {\n\n    static fromJsonArray(jsonArray: Object[]) {\n        let sessions: RwUserSessions[] = [];\n        if (jsonArray != null && jsonArray.length > 0) {\n            jsonArray.forEach(function (jval) {\n                let userSession = RwUserSessions.fromJson(jval);\n                sessions.push(userSession);\n            });\n        }\n        return sessions;\n    }\n\n    static fromJson(json: Object): RwUserSessions {\n        let session: RwUserSessions;\n        if (json != null) {\n            session = new RwUserSessions();\n            session.fromJson(json)\n        }\n        return session;\n    }\n\n    sessionId: string;\n    created: Date;\n    installId: string;\n    locale: string;\n    appVersion: string;\n    SDK: string;\n    deviceId: string;\n    platform: string;\n    LU: Date;\n    expires: Date;\n    platformType: number;\n    isWeb: boolean;\n    isActive: boolean;\n\n    fromJson(json: Object) {\n        for (let key in json) {\n            //@formatter:off\n            switch (key) {\n                case \"SessionId\":\n                    this.sessionId = json[key];\n                    break;\n                case \"Created\":\n                    this.created = new Date(json[key]);\n                    break;\n                case \"InstallId\":\n                    this.installId = json[key];\n                    break;\n                case \"Locale\":\n                    this.locale = json[key];\n                    break;\n                case \"AppVersion\":\n                    this.appVersion = json[key];\n                    break;\n                case \"SDK\":\n                    this.SDK = json[key];\n                    break;\n                case \"DeviceId\":\n                    this.deviceId = json[key];\n                    break;\n                case \"Platform\":\n                    this.platform = json[key];\n                    break;\n                case \"LU\":\n                    this.LU = new Date(json[key]);\n                    break;\n                case \"Expires\":\n                    this.expires = new Date(json[key]);\n                    break;\n                case \"PlatformType\":\n                    this.platformType = json[key];\n                    break;\n                case \"IsWeb\":\n                    this.isWeb = json[key];\n                    break;\n                case \"IsActive\":\n                    this.isActive = json[key];\n                    break;\n            }\n            //@formatter:on\n        }\n    }\n\n\n}\n\n","import moment from \"moment\";\nimport {RwRoute} from \"@/app/dem/RwRoute\";\nimport {RwUser} from \"@/app/dem/RwUser\";\nimport {RwSite} from \"@/app/dem/RwSite\";\nimport {RwHistory} from \"@/app/dem/RwHistory\";\nimport {RwConstants} from \"@/app/RwConstants\";\nimport dal from \"@/app/dal/RwDal\";\nimport store from \"@/app/RwGlobals\"\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport {RwDistUnits, RwLoginIssues} from \"@/app/RwEnums\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport {RwLoginError} from \"@/app/RwErrors\";\nimport {RwLogEntry} from \"@/app/dem/RwLogEntry\";\nimport RwAddReport from \"@/app/dem/RwAddReport\";\nimport {RwUserInstalls, RwUserSessions} from \"@/app/dem/RwUserEntry\";\n\nexport class RwTaskReporting {\n\n    static getReview(reportId: number): Promise<RwAddReport> {\n        return new Promise<RwAddReport>(function (resolve, reject) {\n            //RwLog.consoleLog(\"getLogs\", startEpoc, endEpoc)\n\n            let url = `${RwConstants.CoreUri}/admin/getAddReport?reportId=${reportId}`;\n\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    //console.warn(\"getLog\", json)\n                    let user = RwAddReport.fromJson(json);\n                    resolve(user);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n\n        });\n    }\n\n    // static getReview(address:string): Promise<RwAddReport> {\n    //   return new Promise<RwAddReport>(function(resolve, reject) {\n    //     //RwLog.consoleLog(\"getLogs\", startEpoc, endEpoc)\n    //\n    //     let url = `${RwConstants.CoreUri}/admin/getAddReport?address=${address}`;\n    //\n    //     dal.callWithToken\n    //       .get(url, { timeout: RwConstants.NetTimeout })\n    //       .then(res => {\n    //         const json = res.data;\n    //         //console.warn(\"getLog\", json)\n    //         let user = RwAddReport.fromJson(json);\n    //         resolve(user);\n    //       })\n    //       .catch((error) => {\n    //         reject(error);\n    //       });\n    //\n    //   });\n    // }\n\n\n    static getUser(userId: string): Promise<RwUser> {\n        return new Promise<RwUser>(function (resolve, reject) {\n            //RwLog.consoleLog(\"getLogs\", startEpoc, endEpoc)\n\n            let url = `${RwConstants.CoreUri}/admin/getUser?userId=${userId}`;\n\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    //console.warn(\"getLog\", json)\n                    let user = RwUser.fromJson(json);\n                    resolve(user);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n\n        });\n    }\n\n\n    static getAddReports(startEpoc: number, endEpoc: number, status: number): Promise<RwAddReport[]> {\n        return new Promise<RwAddReport[]>(function (resolve, reject) {\n\n            let url = `${RwConstants.CoreUri}/admin/getAddReports?startEpoc=${startEpoc}&finishEpoc=${endEpoc}&status=${status}`;\n\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    let reports = RwAddReport.fromJsonArray(json);\n                    resolve(reports);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n\n        });\n    }\n\n\n    // static getAddReport(address:string): Promise<RwAddReport> {\n    //   return new Promise<RwAddReport>(function(resolve, reject) {\n    //\n    //     let url = `${RwConstants.CoreUri}/admin/getAddReport?address=${address}`;\n    //\n    //     dal.callWithToken\n    //       .get(url, { timeout: RwConstants.NetTimeout })\n    //       .then(res => {\n    //         const json = res.data;\n    //         let report = RwAddReport.fromJson(json);\n    //         resolve(report);\n    //       })\n    //       .catch((error) => {\n    //         reject(error);\n    //       });\n    //\n    //   });\n    // }\n\n\n    static postAddReport(report: RwAddReport): Promise<boolean> {\n        return new Promise<boolean>(function (resolve, reject) {\n\n            let url = `${RwConstants.CoreUri}/reports/address`;\n            let payload = report.toJSON();\n\n            dal.callWithToken\n                .post(url, payload, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    resolve(true);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n\n        });\n    }\n\n\n    static updateAddReport(report: RwAddReport): Promise<boolean> {\n        return new Promise<boolean>(function (resolve, reject) {\n\n            let url = `${RwConstants.CoreUri}/admin/address`;\n            let payload = report.toJSON();\n\n            dal.callWithToken\n                .put(url, payload, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    console.log(\"updateAddReport success\")\n                    resolve(true);\n                })\n                .catch((error) => {\n                    console.warn(\"updateAddReport fail\", error)\n                    reject(error);\n                });\n\n        });\n    }\n\n\n    static getLogs(startEpoc: number, endEpoc: number, logLevel: number, source: string, userId: string): Promise<RwLogEntry[]> {\n        return new Promise<RwLogEntry[]>(function (resolve, reject) {\n            //RwLog.consoleLog(\"getLogs\", startEpoc, endEpoc)\n\n            let srcArg = (!!source) ? `&src=${source}` : \"\";\n            let uidArg = (!!source) ? `&uid=${userId}` : \"\";\n            let url = `${RwConstants.CoreUri}/admin/getLogs?startEpoc=${startEpoc}&finishEpoc=${endEpoc}&logLevel=${logLevel}${srcArg}${uidArg}`;\n\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    let logs = RwLogEntry.fromJsonArray(json);\n                    resolve(logs);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n\n        });\n    }\n\n    static getLog(logId: number): Promise<RwLogEntry> {\n        return new Promise<RwLogEntry>(function (resolve, reject) {\n            //RwLog.consoleLog(\"getLogs\", startEpoc, endEpoc)\n\n            let url = `${RwConstants.CoreUri}/admin/getLog?logId=${logId}`;\n\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    //console.warn(\"getLog\", json)\n                    let log = RwLogEntry.fromJson(json);\n                    resolve(log);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n\n        });\n    }\n\n    static getDiagnosticLogs(): Promise<RwLogEntry[]> {\n        return new Promise<RwLogEntry[]>(function (resolve, reject) {\n            //RwLog.consoleLog(\"getLogs\", startEpoc, endEpoc)\n            let url = `${RwConstants.CoreUri}/admin/getDiagLogs`;\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    let logs = RwLogEntry.fromJsonArray(json);\n                    resolve(logs);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n        });\n    }\n\n    static getAgentLogs(): Promise<RwLogEntry[]> {\n        return new Promise<RwLogEntry[]>(function (resolve, reject) {\n            let url = `${RwConstants.CoreUri}/admin/getAgentLogs`;\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    let logs = RwLogEntry.fromJsonArray(json);\n                    resolve(logs);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n        });\n    }\n\n    static captureLogs(logIds: number[], isCaptured): Promise<boolean> {\n        //const SOURCE = \"RwTaskStops.captureLogs\"\n\n        return new Promise<boolean>(function (resolve, reject) {\n            let payload = JSON.stringify(logIds);\n            let url = `${RwConstants.CoreUri}/admin/captureLogs?isCaptured=${isCaptured}`;\n            dal.callWithToken\n                .post(url, payload, {timeout: RwConstants.NetTimeout})\n                .then(() => resolve(true))\n                .catch((error) => {\n                    reject(error);\n                });\n        });\n    }\n\n    static getUserInstalls(userId: string, max: number): Promise<RwUserInstalls[]> {\n        return new Promise<RwUserInstalls[]>(function (resolve, reject) {\n            let url = `${RwConstants.CoreUri}/admin/getUserSessions?userId=${userId}&max=${max}`;\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    let installs = RwUserInstalls.fromJsonArray(json);\n                    resolve(installs);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n        });\n    }\n\n    static getUserSessions(userId: string, max: number): Promise<RwUserSessions[]> {\n        return new Promise<RwUserSessions[]>(function (resolve, reject) {\n            let url = `${RwConstants.CoreUri}/admin/getUserSessions?userId=${userId}&max=${max}`;\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    let sessions = RwUserSessions.fromJsonArray(json);\n                    resolve(sessions);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n        });\n    }\n\n\n    static getDrivers(startDate: Date, endDate: Date, tzoMins: number): Promise<RwUser[]> {\n        return new Promise<RwUser[]>(function (resolve, reject) {\n\n            let url = `${RwConstants.CoreUri}/reporting/getDrivers?startDate=${startDate.toJSON()}&endDate=${endDate.toJSON()}`;\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    var routes = RwUser.fromJsonArray(json);\n                    resolve(routes);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n        });\n    }\n\n\n    static getRoutes(startEpoc: number, endEpoc: number, tzoMins: number): Promise<RwRoute[]> {\n        return new Promise<RwRoute[]>(function (resolve, reject) {\n\n            let getArchived = RwPrefUtils.reportShowDeleted;\n            let getDeleted = RwPrefUtils.reportShowDeleted;\n            let useMiles = RwPrefUtils.distUnits === RwDistUnits.Miles;\n\n            let url = `${RwConstants.CoreUri}/reporting/getRoutes?startEpoc=${startEpoc}&endEpoc=${endEpoc}&getArchived=${getArchived}&getDeleted=${getDeleted}&useMiles=${useMiles}&tzoMins=${tzoMins}`;\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    let routes = RwRoute.fromJsonArray(json);\n                    resolve(routes);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n\n        });\n    }\n\n\n    static getSites(startEpoc: number, endEpoc: number, tzoMins: number): Promise<RwSite[]> {\n        const SOURCE = \"RwTaskReporting.getSites\";\n\n        return new Promise<RwSite[]>(function (resolve, reject) {\n\n            let getArchived = RwPrefUtils.reportShowDeleted;\n            let getDeleted = RwPrefUtils.reportShowDeleted;\n            let useMiles = RwPrefUtils.distUnits === RwDistUnits.Miles;\n\n            if (dal.gotToken()) {\n\n                let url = `${RwConstants.CoreUri}/reporting/getSites?startEpoc=${startEpoc}&endEpoc=${endEpoc}&getArchived=${getArchived}&getDeleted=${getDeleted}&useMiles=${useMiles}&tzoMins=${tzoMins}`;\n                dal.callWithToken\n                    .get(url, {timeout: RwConstants.NetTimeout})\n                    .then(res => {\n                        const json = res.data;\n                        let sites = RwSite.fromJsonArray(json);\n                        resolve(sites);\n                    })\n                    .catch((error) => {\n                        reject(error);\n                    });\n\n            } else {\n                RwLog.warn(SOURCE, `Invalid token: ${RwPrefUtils.token}`);\n                let logErr = new RwLoginError(403, true, null, RwLoginIssues.SeshExpired);\n                dal.forceLogout(logErr);\n                return Promise.reject(logErr);\n            }\n\n        });\n    }\n\n\n    static getHistory(startEpoc: number, endEpoc: number, tzoMins: number): Promise<RwHistory[]> {\n        return new Promise<RwHistory[]>(function (resolve, reject) {\n\n            let getArchived = RwPrefUtils.reportShowDeleted;\n            let getDeleted = RwPrefUtils.reportShowDeleted;\n            let useMiles = RwPrefUtils.distUnits === RwDistUnits.Miles;\n\n            let url = `${RwConstants.CoreUri}/reporting/getHistory?startEpoc=${startEpoc}&endEpoc=${endEpoc}&getArchived=${getArchived}&getDeleted=${getDeleted}&useMiles=${useMiles}&tzoMins=${tzoMins}`;\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    let history = RwHistory.fromJsonArray(json);\n                    resolve(history);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n\n        });\n    }\n\n\n    static getStops(routeId: string): Promise<RwRoute> {\n        return new Promise<RwRoute>(function (resolve, reject) {\n\n            let url = `${RwConstants.CoreUri}/routes/routes?uid=${store.orgId}&rid=${routeId}`;\n            dal.callWithToken\n                .get(url, {timeout: RwConstants.NetTimeout})\n                .then(res => {\n                    const json = res.data;\n                    let newRoute = new RwRoute(json);\n                    resolve(newRoute);\n                })\n                .catch((error) => {\n                    reject(error);\n                });\n\n        });\n    }\n\n\n    static unDeleteRoute(routeId: string): Promise<boolean> {\n        return new Promise<boolean>(function (resolve, reject) {\n\n            let url = `${RwConstants.CoreUri}/reporting/unDeleteRoute?routeId=${routeId}`;\n            dal.callWithToken\n                .post(url)\n                .then(res => {\n                    const json = res.data;\n                    resolve(json.restored);\n                })\n                .catch((error) => {\n                    //REFACTOR: UI Code: Move to caller\n                    reject(error);\n                });\n\n        });\n    }\n\n\n    static unArchiveRoute(routeId: string): Promise<boolean> {\n        let self = this;\n\n        return new Promise<boolean>(function (resolve, reject) {\n\n            let url = `${RwConstants.CoreUri}/reporting/unArchiveRoute?routeId=${routeId}`;\n            dal.callWithToken\n                .post(url)\n                .then(res => {\n                    const json = res.data;\n                    resolve(json.restored);\n                })\n                .catch((error) => {\n                    //REFACTOR: UI Code: Move to caller\n                    reject(error);\n                });\n\n        });\n    }\n\n\n    static unDeleteSite(siteId: string): Promise<boolean> {\n        return new Promise<boolean>(function (resolve, reject) {\n\n            let url = `${RwConstants.CoreUri}/reporting/unDeleteSite?siteId=${siteId}`;\n            dal.callWithToken\n                .post(url)\n                .then(res => {\n                    const json = res.data;\n                    resolve(json.restored);\n                })\n                .catch((error) => {\n                    //REFACTOR: UI Code: Move to caller\n                    reject(error);\n                });\n\n        });\n    }\n\n\n    // static getDashboardData(): Promise<RwDashboardData> {\n    //   return new Promise<RwDashboardData>(function(resolve, reject) {\n    //\n    //     let url = `${RwConstants.CoreUri}/reporting/getDashboardData`;\n    //     dal.axios\n    //       .get(url, { timeout: RwConstants.NetTimeout })\n    //       .then(res => {\n    //         const json = res.data;\n    //         var dashData = RwDashboardData.fromJson(json);\n    //         resolve(dashData);\n    //       })\n    //       .catch((error) => {\n    //         reject(error);\n    //       });\n    //\n    //   });\n    // }\n\n\n    static getSpreadSheet(startEpoc: number, endEpoc: number, tzoMins: number): Promise<boolean> {\n        const SOURCE = \"RwTaskReporting.getSpreadSheet\"\n        return new Promise<boolean>(function (resolve, reject) {\n\n            let getArchived = RwPrefUtils.reportShowDeleted;\n            let getDeleted = RwPrefUtils.reportShowDeleted;\n            let useMiles = RwPrefUtils.distUnits === RwDistUnits.Miles;\n\n            let url = `${RwConstants.CoreUri}/reporting/getSheets?startEpoc=${startEpoc}&endEpoc=${endEpoc}&getArchived=${getArchived}&getDeleted=${getDeleted}&useMiles=${useMiles}&tzoMins=${tzoMins}`;\n            // console.log(\"getSpreadSheet url\", url);\n\n            dal.callWithToken\n                .get(url, {responseType: 'blob'})\n                .then((response) => {\n                    const url = window.URL.createObjectURL(new Blob([response.data]));\n                    const link = document.createElement('a');\n                    link.href = url;\n\n                    const contentDisposition = response.headers['content-disposition'];\n                    let fromText = moment(startEpoc * 1000).format(\"YYYY.MM.DD\");\n                    let toText = moment(endEpoc * 1000).format(\"YYYY.MM.DD\");\n                    let fileName = `RoadWarrior.${fromText}__${toText}.xlsx`;\n                    link.setAttribute('download', fileName); //or any other extension\n                    document.body.appendChild(link);\n                    link.click();\n                    link.remove();\n                    window.URL.revokeObjectURL(url);\n\n                    resolve(true);\n                })\n                .catch(err => {\n                    let status = err.code ? err.code : err.status;\n                    if (status) {\n                        if (status === 504) {\n                            RwLog.warn(SOURCE, `Network error uploading spreadsheet: ${JSON.stringify(err)}`);\n                        } else {\n                            RwLog.error(SOURCE, `startEpoc:${startEpoc}, endEpoc:${endEpoc}, tzoMins:${tzoMins} \\n\\n${err}`)\n                            // RwLog.error(SOURCE, `Unhandled error uploading spreadsheet: ${JSON.stringify(err)}`);\n                        }\n                    } else {\n                        RwLog.warn(SOURCE, `Undefined status: ${JSON.stringify(err)}`);\n                    }\n                    reject(err);\n                })\n\n        });\n    }\n\n    static downloadRoute(routeId: string, routeName: string, tzoMins: number): Promise<boolean> {\n        const SOURCE = \"RwTaskReporting.downloadRoute\"\n\n        return new Promise<boolean>(function (resolve, reject) {\n\n            let useMiles = RwPrefUtils.distUnits === RwDistUnits.Miles;\n\n            let url = `${RwConstants.CoreUri}/reporting/GetRouteSheet?routeId=${routeId}&useMiles=${useMiles}&tzoMins=${tzoMins}`;\n            // console.log(\"getSpreadSheet url\", url);\n\n            dal.callWithToken\n                .get(url, {responseType: 'blob'})\n                .then((res) => {\n                    if (res && res.data) {\n                        const url = window.URL.createObjectURL(new Blob([res.data]));\n                        const link = document.createElement('a');\n                        link.href = url;\n\n                        const contentDisposition = res.headers['content-disposition'];\n                        let fileName = `RoadWarrior.${routeName}.${routeId}.xlsx`;\n                        link.setAttribute('download', fileName); //or any other extension\n                        document.body.appendChild(link);\n                        link.click();\n                        link.remove();\n                        window.URL.revokeObjectURL(url);\n\n                        resolve(true);\n                    } else {\n                        RwLog.error(SOURCE, `RES Empty: routeId:${routeId}, tzoMins:${tzoMins}`)\n                        resolve(false);\n                    }\n                })\n                .catch(err => {\n                    let errText = JSON.stringify(err);\n                    let msg = `GET ${url} -> ${err.status} \\nAuthToken:${RwPrefUtils.token} \\n\\nError:\\n${errText}`;\n                    if ((err.error && (err.error.code === \"ECONNABORTED\" || err.error.message === \"Network Error\")) ||\n                        err.error === \"Network Error\") {\n                        RwLog.warn(SOURCE, `Network Error: ${msg}`);\n                    } else {\n                        RwLog.error(SOURCE, `Unhandled: ${msg}`);\n                    }\n                    //RwLog.error(SOURCE, `routeId:${routeId}, tzoMins:${tzoMins} \\n\\n${err}`)\n                    reject(err);\n                })\n\n        });\n    }\n}","export class RwViewUtils {\n\n    static mapGetViewBounds(map: H.Map): H.geo.Rect {\n        return map.getViewModel().getLookAtData().bounds.getBoundingBox();\n    }\n\n    static mapSetViewBounds(map: H.Map, bounds: H.geo.Rect, opt_animate?: boolean) {\n        //console.log(\"mapSetViewBounds\", bounds, opt_animate);\n\n        //bug: HERE: This does not seem to animate wo/position parameter\n        //let data: H.map.ViewModel.ILookAtData = {bounds: bounds};\n        let data: H.map.ViewModel.ILookAtData = {bounds: bounds, position: bounds.getCenter()};\n        map.getViewModel().setLookAtData(data, opt_animate);\n    }\n\n    static mapSetViewCenter(map: H.Map, centroid: H.geo.Point, opt_animate?: boolean) {\n        //console.log(\"mapSetViewCenter\", centroid, opt_animate);\n        let data: H.map.ViewModel.ILookAtData = {position: centroid};\n        map.getViewModel().setLookAtData(data, opt_animate);\n    }\n\n\n    static mapSetViewPoint(map: H.Map, position: H.geo.IPoint, zoom: number, opt_animate?: boolean) {\n        //console.log(\"mapSetViewPoint\", position, opt_animate);\n        let data: H.map.ViewModel.ILookAtData = {position: position, zoom: zoom};\n        map.getViewModel().setLookAtData(data, opt_animate);\n    }\n\n}\n\n\n// static mapGetViewBounds(map: H.Map):H.geo.Rect{\n//   // let mapAny = map as any;\n//   // return mapAny.getViewModel().getLookAtData().bounds.getBoundingBox();\n//   //return mapAny.getViewModel().getLookAtData().getBoundingBox();\n//   return map.getViewModel().getLookAtData().bounds.getBoundingBox();\n// }\n//\n// static mapSetViewBounds(map: H.Map, bounds: H.geo.Rect, opt_animate?: boolean){\n//   let data: H.map.ViewModel.ILookAtData = {bounds: bounds};\n//   map.getViewModel().setLookAtData(data, opt_animate);\n//   // let mapAny = map as any;\n//   // let viewBounds = mapAny\n//   //     .getViewModel()\n//   //     .setLookAtData({bounds: bounds }, opt_animate);\n// }\n//\n// static mapSetViewCenter(map: H.Map, centroid: H.geo.Point, opt_animate?: boolean){\n//   let data: H.map.ViewModel.ILookAtData = {position: centroid};\n//   //bounds:new H.geo.Rect(1,1, 2, 3)}\n//   map.getViewModel().setLookAtData(data , opt_animate);\n// }\n\n","import theStore from \"@/store\";\nimport {RwStop} from \"@/app/dem/RwStop\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport {RwRoutePick} from \"@/app/dem/RwRoute\";\n\n\nexport class RwTaskSpace {\n\n    get globals(): RwGlobals {\n        return theGlobals;\n    }\n\n    selectedTasks: RwStop[] = [];\n\n    get selectedTask(): RwStop {\n        return theStore.getters.selectedTask;\n    }\n\n    set selectedTask(val: RwStop) {\n        theStore.dispatch(\"selectedTask\", val);\n    }\n\n    get showTaskRoutePicker(): boolean {\n        return theStore.getters.showTaskRoutePicker;\n    }\n\n    set showTaskRoutePicker(val: boolean) {\n        theStore.dispatch(\"showTaskRoutePicker\", val);\n    }\n\n    pendingRoutePick;\n\n    showRoutePicker(srcId: string): Promise<RwRoutePick> {\n        this.showTaskRoutePicker = true;\n        //console.log(\"showRoutePicker srcId m_routePickerSrcId\", srcId, self.m_routePickerSrcId);\n        return new Promise<RwRoutePick>((resolve) => {\n            this.pendingRoutePick = resolve;\n        });\n    }\n\n    // get selectedStop(): RwStop { return theStore.getters.selectedStop; }\n    // set selectedStop(val: RwStop) { theStore.dispatch(\"selectedStop\", val); }\n\n\n    // get showTaskEdit(): boolean{return store.getters.showEditSked;}\n    // set showTaskEdit(val: boolean){store.dispatch(\"showTaskEdit\", val);}\n\n    // get selectedTaskPin(): RwPin { return store.getters.selectedTaskPin; }\n    // set selectedTaskPin(val: RwPin) { store.dispatch(\"selectedTaskPin\", val); }\n\n\n    // deleteTask(task: RwStop) {\n    //   const self = this;\n    //   //this.space.selectedTask = task;\n    //\n    //   ///xTEST: ACTIONS: RwTaskList onDeleteClick\n    //   this.globals.deleteTask(task)\n    //     .then((isDeleted) => {\n    //       if (isDeleted) {\n    //         self.globals.showSnack(\"Task Deleted\", \"success\");\n    //       }\n    //       else {\n    //         self.globals.showSnack(\"Task Delete Failed\", \"error\");\n    //       }\n    //     })\n    //     .catch(err => {\n    //       self.globals.showSnack(`Task Delete Errored: ${err}`, \"error\");\n    //     });\n    //\n    // }\n\n\n}\n\nexport default new RwTaskSpace();\n","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCheckbox } from 'vuetify/lib/components/VCheckbox';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"scrollable\":\"\",\"persistent\":\"\",\"max-width\":\"600px\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.escPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.enterPress.apply(null, arguments)}]},model:{value:(_vm.globals.showCCExpire),callback:function ($$v) {_vm.$set(_vm.globals, \"showCCExpire\", $$v)},expression:\"globals.showCCExpire\"}},[_c(VCard,[_c(VToolbar,{attrs:{\"dense\":\"\",\"max-height\":\"48px\",\"color\":_vm.globals.backColorBar}},[_c(VIcon,{staticClass:\"mr-3\",attrs:{\"color\":\"orange\"}},[_vm._v(\"mdi-alert\")]),_c(VToolbarTitle,[_vm._v(\"Card Expiration Notice\")])],1),_c(VCardText,[(_vm.globals.valCCPopup==1)?_c(VRow,{staticClass:\"mx-4 mt-6\"},[_c(VCol,{staticClass:\"text-left\"},[_c('span',[_vm._v(\"The card on file for this account (\"+_vm._s(_vm.maskedCardInfo)+\") will expire at the end of this month (\"+_vm._s(_vm.cardExpiry)+\").\")])])],1):_vm._e(),(_vm.globals.valCCPopup!=1&&_vm.globals.valCCPopup!=3)?_c(VRow,{staticClass:\"mx-4 mt-6\"},[_c(VCol,{staticClass:\"text-left\"},[_c('span',[_vm._v(\"The card on file for this account (\"+_vm._s(_vm.maskedCardInfo)+\") will expire after \"+_vm._s(_vm.cardExpiry)+\".\")])])],1):_vm._e(),(_vm.globals.valCCPopup==3)?_c(VRow,{staticClass:\"mx-4 mt-6\"},[_c(VCol,{staticClass:\"text-left\"},[_c('span',[_vm._v(\"The card on file for this account (\"+_vm._s(_vm.maskedCardInfo)+\") expired at the end of \"+_vm._s(_vm.cardExpiry)+\".\")])])],1):_vm._e(),_c(VRow,{staticClass:\"mx-4\"},[_c(VCol,{staticClass:\"text-left\"},[_c('span',[_vm._v(\"To prevent an interruption in service, please update your payment method below.\")])])],1),_c(VRow,{staticClass:\"mx-4\"},[_c(VCol,{staticClass:\"text-left\"},[_c('span',[_vm._v(\"You can also update later through your Account page under Quota & Billing.\")])])],1),_c(VCheckbox,{staticClass:\"mx-4\",attrs:{\"label\":\"Do not warn again for this card\"},model:{value:(_vm.notShowCheck),callback:function ($$v) {_vm.notShowCheck=$$v},expression:\"notShowCheck\"}})],1),_c(VCardActions,[_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":_vm.escPress}},[_vm._v(\"Close\")]),_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":_vm.portalPress}},[_vm._v(\"Billing Portal\")]),_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.enterPress}},[_vm._v(\"Update Payment Method\")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\n\n@Component\nexport default class RwCCExpirePopup extends Vue {\n\n  updatePaymentUrl: string = '';\n  billingPortalUrl: string = '';\n\n  cardExpiry: string = '';\n  maskedCardInfo: string = '';\n\n  notShowCheck = false;\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  mounted() {\n    this.updatePaymentUrl = this.plannerSpace.updatePaymentUrl;\n    this.billingPortalUrl = this.plannerSpace.billingPortalUrl;\n    this.cardExpiry = this.plannerSpace.cardExpiry;\n    this.maskedCardInfo = this.plannerSpace.maskedCardInfo;\n  }\n\n  get plannerSpace(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  portalPress() {\n    if (this.notShowCheck) {\n      this.globals.hideCCPopup = true;\n    }\n    window.open(this.billingPortalUrl, \"_blank\");\n    this.globals.showCCExpire = false;\n    this.globals.valCCPopup = 0;\n  }\n\n  enterPress() {\n    if (this.notShowCheck) {\n      this.globals.hideCCPopup = true;\n    }\n    window.open(this.updatePaymentUrl, \"_blank\");\n    this.globals.showCCExpire = false;\n    this.globals.valCCPopup = 0;\n  }\n\n  escPress() {\n    if (this.notShowCheck) {\n      this.globals.hideCCPopup = true;\n    }\n    this.globals.showCCExpire = false;\n    this.globals.valCCPopup = 0;\n  }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwCCExpirePopup.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwCCExpirePopup.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwCCExpirePopup.vue?vue&type=template&id=43cf966e&scoped=true&\"\nimport script from \"./RwCCExpirePopup.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwCCExpirePopup.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"43cf966e\",\n  null\n  \n)\n\nexport default component.exports","// Styles\nimport \"../../../src/components/VAutocomplete/VAutocomplete.sass\"; // Extensions\n\nimport VSelect from '../VSelect/VSelect';\nimport VAutocomplete from '../VAutocomplete/VAutocomplete'; // Utils\n\nimport { keyCodes } from '../../util/helpers';\n/* @vue/component */\n\nexport default VAutocomplete.extend({\n  name: 'v-combobox',\n  props: {\n    delimiters: {\n      type: Array,\n      default: () => []\n    },\n    returnObject: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data: () => ({\n    editingIndex: -1\n  }),\n  computed: {\n    computedCounterValue() {\n      return this.multiple ? this.selectedItems.length : (this.internalSearch || '').toString().length;\n    },\n\n    hasSlot() {\n      return VSelect.options.computed.hasSlot.call(this) || this.multiple;\n    },\n\n    isAnyValueAllowed() {\n      return true;\n    },\n\n    menuCanShow() {\n      if (!this.isFocused) return false;\n      return this.hasDisplayedItems || !!this.$slots['no-data'] && !this.hideNoData;\n    },\n\n    searchIsDirty() {\n      return this.internalSearch != null;\n    }\n\n  },\n  methods: {\n    onInternalSearchChanged(val) {\n      if (val && this.multiple && this.delimiters.length) {\n        const delimiter = this.delimiters.find(d => val.endsWith(d));\n\n        if (delimiter != null) {\n          this.internalSearch = val.slice(0, val.length - delimiter.length);\n          this.updateTags();\n        }\n      }\n\n      this.updateMenuDimensions();\n    },\n\n    genInput() {\n      const input = VAutocomplete.options.methods.genInput.call(this);\n      delete input.data.attrs.name;\n      input.data.on.paste = this.onPaste;\n      return input;\n    },\n\n    genChipSelection(item, index) {\n      const chip = VSelect.options.methods.genChipSelection.call(this, item, index); // Allow user to update an existing value\n\n      if (this.multiple) {\n        chip.componentOptions.listeners = { ...chip.componentOptions.listeners,\n          dblclick: () => {\n            this.editingIndex = index;\n            this.internalSearch = this.getText(item);\n            this.selectedIndex = -1;\n          }\n        };\n      }\n\n      return chip;\n    },\n\n    onChipInput(item) {\n      VSelect.options.methods.onChipInput.call(this, item);\n      this.editingIndex = -1;\n    },\n\n    // Requires a manual definition\n    // to overwrite removal in v-autocomplete\n    onEnterDown(e) {\n      e.preventDefault(); // If has menu index, let v-select-list handle\n\n      if (this.getMenuIndex() > -1) return;\n      this.$nextTick(this.updateSelf);\n    },\n\n    onKeyDown(e) {\n      const keyCode = e.keyCode;\n\n      if (e.ctrlKey || ![keyCodes.home, keyCodes.end].includes(keyCode)) {\n        VSelect.options.methods.onKeyDown.call(this, e);\n      } // If user is at selection index of 0\n      // create a new tag\n\n\n      if (this.multiple && keyCode === keyCodes.left && this.$refs.input.selectionStart === 0) {\n        this.updateSelf();\n      } else if (keyCode === keyCodes.enter) {\n        this.onEnterDown(e);\n      } // The ordering is important here\n      // allows new value to be updated\n      // and then moves the index to the\n      // proper location\n\n\n      this.changeSelectedIndex(keyCode);\n    },\n\n    onTabDown(e) {\n      // When adding tags, if searching and\n      // there is not a filtered options,\n      // add the value to the tags list\n      if (this.multiple && this.internalSearch && this.getMenuIndex() === -1) {\n        e.preventDefault();\n        e.stopPropagation();\n        return this.updateTags();\n      }\n\n      VAutocomplete.options.methods.onTabDown.call(this, e);\n    },\n\n    selectItem(item) {\n      // Currently only supports items:<string[]>\n      if (this.editingIndex > -1) {\n        this.updateEditing();\n      } else {\n        VAutocomplete.options.methods.selectItem.call(this, item); // if selected item contains search value,\n        // remove the search string\n\n        if (this.internalSearch && this.multiple && this.getText(item).toLocaleLowerCase().includes(this.internalSearch.toLocaleLowerCase())) {\n          this.internalSearch = null;\n        }\n      }\n    },\n\n    setSelectedItems() {\n      if (this.internalValue == null || this.internalValue === '') {\n        this.selectedItems = [];\n      } else {\n        this.selectedItems = this.multiple ? this.internalValue : [this.internalValue];\n      }\n    },\n\n    setValue(value) {\n      VSelect.options.methods.setValue.call(this, value === undefined ? this.internalSearch : value);\n    },\n\n    updateEditing() {\n      const value = this.internalValue.slice();\n      const index = this.selectedItems.findIndex(item => this.getText(item) === this.internalSearch); // If user enters a duplicate text on chip edit,\n      // don't add it, move it to the end of the list\n\n      if (index > -1) {\n        const item = typeof value[index] === 'object' ? Object.assign({}, value[index]) : value[index];\n        value.splice(index, 1);\n        value.push(item);\n      } else {\n        value[this.editingIndex] = this.internalSearch;\n      }\n\n      this.setValue(value);\n      this.editingIndex = -1;\n      this.internalSearch = null;\n    },\n\n    updateCombobox() {\n      // If search is not dirty, do nothing\n      if (!this.searchIsDirty) return; // The internal search is not matching\n      // the internal value, update the input\n\n      if (this.internalSearch !== this.getText(this.internalValue)) this.setValue(); // Reset search if using slot to avoid a double input\n\n      const isUsingSlot = Boolean(this.$scopedSlots.selection) || this.hasChips;\n      if (isUsingSlot) this.internalSearch = null;\n    },\n\n    updateSelf() {\n      this.multiple ? this.updateTags() : this.updateCombobox();\n    },\n\n    updateTags() {\n      const menuIndex = this.getMenuIndex(); // If the user is not searching\n      // and no menu item is selected\n      // or if the search is empty\n      // do nothing\n\n      if (menuIndex < 0 && !this.searchIsDirty || !this.internalSearch) return;\n\n      if (this.editingIndex > -1) {\n        return this.updateEditing();\n      }\n\n      const index = this.selectedItems.findIndex(item => this.internalSearch === this.getText(item)); // If the duplicate item is an object,\n      // copy it, so that it can be added again later\n\n      const itemToSelect = index > -1 && typeof this.selectedItems[index] === 'object' ? Object.assign({}, this.selectedItems[index]) : this.internalSearch; // If it already exists, do nothing\n      // this might need to change to bring\n      // the duplicated item to the last entered\n\n      if (index > -1) {\n        const internalValue = this.internalValue.slice();\n        internalValue.splice(index, 1);\n        this.setValue(internalValue);\n      } // If menu index is greater than 1\n      // the selection is handled elsewhere\n      // TODO: find out where\n\n\n      if (menuIndex > -1) return this.internalSearch = null;\n      this.selectItem(itemToSelect);\n      this.internalSearch = null;\n    },\n\n    onPaste(event) {\n      var _a;\n\n      this.$emit('paste', event);\n      if (!this.multiple || this.searchIsDirty) return;\n      const pastedItemText = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text/vnd.vuetify.autocomplete.item+plain');\n\n      if (pastedItemText && this.findExistingIndex(pastedItemText) === -1) {\n        event.preventDefault();\n        VSelect.options.methods.selectItem.call(this, pastedItemText);\n      }\n    },\n\n    clearableCallback() {\n      this.editingIndex = -1;\n      VAutocomplete.options.methods.clearableCallback.call(this);\n    }\n\n  }\n});\n//# sourceMappingURL=VCombobox.js.map","import { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VColorPicker } from 'vuetify/lib/components/VColorPicker';\nimport { VCombobox } from 'vuetify/lib/components/VCombobox';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VRadio } from 'vuetify/lib/components/VRadioGroup';\nimport { VRadioGroup } from 'vuetify/lib/components/VRadioGroup';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VStepper } from 'vuetify/lib/components/VStepper';\nimport { VStepperContent } from 'vuetify/lib/components/VStepper';\nimport { VStepperHeader } from 'vuetify/lib/components/VStepper';\nimport { VStepperItems } from 'vuetify/lib/components/VStepper';\nimport { VStepperStep } from 'vuetify/lib/components/VStepper';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{staticStyle:{\"overflow-y\":\"hidden\"},attrs:{\"max-width\":\"700px\",\"overlay-color\":\"#000\",\"overlay-opacity\":\".7\",\"persistent\":\"\",\"content-class\":\"dialog-with-scroll\",\"scrollable\":\"\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.enterPress.apply(null, arguments)}},model:{value:(_vm.globals.showOnboardSettings),callback:function ($$v) {_vm.$set(_vm.globals, \"showOnboardSettings\", $$v)},expression:\"globals.showOnboardSettings\"}},[_c(VCard,{staticClass:\"dialog-card\",class:_vm.globals.theme,attrs:{\"flat\":\"\"}},[_c(VToolbar,{attrs:{\"color\":_vm.globals.backColorBar,\"dense\":\"\",\"max-height\":\"48px\",\"flat\":\"\"}},[_c(VToolbarTitle,[_vm._v(_vm._s(_vm.title))])],1),_c(VCardText,{staticClass:\"mb-2\",class:_vm.globals.theme,staticStyle:{}},[_c(VTabsItems,{staticStyle:{\"height\":\"100%\"},attrs:{\"solo-inverted\":\"\",\"dense\":\"\"},model:{value:(_vm.idxTab),callback:function ($$v) {_vm.idxTab=$$v},expression:\"idxTab\"}},[_c(VTabItem,{key:\"0\",staticClass:\"fill-height\",staticStyle:{\"height\":\"100%\"}},[_c(VCard,{staticClass:\"fill-height d-flex flex-column\",attrs:{\"flat\":\"\",\"color\":_vm.cardColor}},[_c(VCardText,{staticClass:\"flex-grow-1\"},[_c(VRow,{staticClass:\"ma-4\"},[_c(VCol,{attrs:{\"align\":\"left\"}},[_c('h3',{staticClass:\"mb-2\"},[_vm._v(\"Welcome to RoadWarrior!\")]),_c('p',[_vm._v(\" Please take a moment to customize some settings, so we can efficiently plan your Routes. \")]),_c('p',[_c('b',[_vm._v(\"In a rush?\")]),_vm._v(\" Once you set your Location Settings, you can use our presets for the remaining steps. You can always update any defaults in the Settings menu later. \")])])],1)],1)],1)],1),_c(VTabItem,{key:\"1\",staticStyle:{\"height\":\"100%\"}},[_c(VCard,{attrs:{\"flat\":\"\",\"color\":_vm.cardColor}},[_c(VCardText,[_c('span',{attrs:{\"align\":\"left\",\"my\":\"4\"}},[_c('p',[_vm._v(\" To provide the most accurate route times and distances, we use your location as the start point of your routes. \")]),_c('p',[_vm._v(\" In order to do this, we'll prompt you to provide web geolocation permissions. If you would like manually set your start instead, you can also specify that below. \")])]),_c('span',{staticClass:\"font-weight-bold\",attrs:{\"align\":\"left\"}},[_c('p',{staticClass:\"mb-0\"},[_vm._v(\"Default Starting Location\")])]),_c(VRow,[_c(VRadioGroup,{staticClass:\"pl-2\",attrs:{\"hide-details\":\"\",\"dense\":\"\"},model:{value:(_vm.defaultLocChoice),callback:function ($$v) {_vm.defaultLocChoice=$$v},expression:\"defaultLocChoice\"}},[_c(VRadio,{attrs:{\"value\":0,\"label\":\"Use Geolocation\"}}),_c(VRadio,{attrs:{\"value\":1,\"label\":\"Manually select location\"}})],1)],1)],1)],1)],1),_c(VTabItem,{key:\"2\",staticStyle:{\"height\":\"100%\"}},[_c('div',[_c('p',{staticClass:\"font-weight-bold my-4\"},[_vm._v(\" Your current default location \")])]),_c(VRow,[_c(VCol,{staticClass:\"align-center\"},[(!_vm.gpsUpdating)?_c(VImg,{staticClass:\"ma-auto\",style:(_vm.picHeightStyle),attrs:{\"max-width\":\"100%\",\"src\":_vm.locImageUrl},scopedSlots:_vm._u([{key:\"placeholder\",fn:function(){return [_c(VRow,{staticClass:\"fill-height ma-0\",attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c(VProgressCircular,{attrs:{\"indeterminate\":\"\",\"color\":\"grey lighten-5\"}})],1)]},proxy:true}],null,false,4034393411)}):_vm._e(),(_vm.gpsUpdating)?_c(VProgressCircular,{attrs:{\"indeterminate\":\"\"}}):_vm._e()],1)],1),_c(VBtn,{staticClass:\"mt-4\",attrs:{\"outlined\":\"\"},on:{\"click\":_vm.chooseNewLocation}},[_vm._v(\" Manually select a different location \")])],1),_c(VTabItem,{key:\"3\",staticStyle:{\"height\":\"100%\"}},[_c(VStepper,{staticClass:\"mb-2 elevation-0\",class:_vm.globals.theme,staticStyle:{\"background-color\":\"transparent\",\"height\":\"100%\",\"overflow-y\":\"auto\"},attrs:{\"flat\":\"\"},model:{value:(_vm.idxStep),callback:function ($$v) {_vm.idxStep=$$v},expression:\"idxStep\"}},[_c(VStepperHeader,{staticStyle:{\"height\":\"72px\"},attrs:{\"flat\":\"\"}},[_c(VStepperStep,{attrs:{\"editable\":_vm.idxStep > 1,\"complete\":_vm.idxStep > 1,\"step\":\"1\"}},[_vm._v(\" \"+_vm._s(_vm.idxStep == 1 ? 'Color' : '')+\" \")]),_c(VStepperStep,{attrs:{\"editable\":_vm.idxStep > 2,\"complete\":_vm.idxStep > 2,\"step\":\"2\"}},[_vm._v(\" \"+_vm._s(_vm.idxStep == 2 ? 'Routes' : '')+\" \")]),_c(VStepperStep,{attrs:{\"editable\":_vm.idxStep > 3,\"complete\":_vm.idxStep > 3,\"step\":\"3\"}},[_vm._v(_vm._s(_vm.idxStep == 3 ? 'Time' : '')+\" \")]),_c(VStepperStep,{attrs:{\"editable\":_vm.idxStep > 4,\"complete\":_vm.idxStep > 4,\"step\":\"4\"}},[_vm._v(\" \"+_vm._s(_vm.idxStep == 4 ? 'Notifications' : '')+\" \")]),_c(VStepperStep,{attrs:{\"complete\":_vm.idxStep > 5,\"step\":\"5\"}},[_vm._v(_vm._s(_vm.idxStep == 5 ? 'Confirm' : ''))])],1),_c(VStepperItems,{staticStyle:{\"height\":\"calc(100% - 72px)\"},attrs:{\"flat\":\"\"}},[_c(VStepperContent,{attrs:{\"step\":\"1\"}},[_c(VCard,{staticStyle:{\"height\":\"100%\"},attrs:{\"flat\":\"\",\"color\":_vm.cardColor}},[_c(VCardText,{staticStyle:{\"height\":\"100%\"}},[_c(VRow,[_c(VCol,{attrs:{\"align\":\"left\"}},[_c('p',[_vm._v(\" RoadWarrior has a few types of location pins. Here you'll set the default colors. \")]),_c('p',[_vm._v(\" Click on any icon to get started with customizing, or click next if you're happy with the pre-set defaults. \")])])],1),_c(VRow,{staticClass:\"pointer\",class:_vm.hoverTheme,on:{\"click\":_vm.onStopClick}},[_c(VCol,{attrs:{\"cols\":\"10\",\"align\":\"left\",\"align-self\":\"center\"}},[_c('p',{staticClass:\"mb-0\"},[_c('b',[_vm._v(\"Stops\")])]),_c('p',{staticClass:\"mt-0\"},[_vm._v(\" The locations that make up every RoadWarrior Route. \")])]),_c(VCol,{attrs:{\"cols\":\"2\",\"align\":\"right\",\"align-self\":\"center\"}},[_c(VBtn,{attrs:{\"outlined\":\"\",\"fab\":\"\",\"x-small\":\"\",\"color\":_vm.stopColor}},[_c(VIcon,{on:{\"click\":_vm.onStopClick}},[_vm._v(\"mdi-map-marker\")])],1),_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticClass:\"pointer\",class:_vm.hoverTheme,on:{\"click\":_vm.onTaskClick}},[_c(VCol,{attrs:{\"cols\":\"10\",\"align\":\"left\",\"align-self\":\"center\"}},[_c('p',{staticClass:\"mb-0\"},[_c('b',[_vm._v(\"Tasks\")])]),_c('p',{staticClass:\"mt-0\"},[_vm._v(\" The 'to-dos' that don't have a Route to call home yet. \")])]),_c(VCol,{attrs:{\"cols\":\"2\",\"align\":\"right\",\"align-self\":\"center\"}},[_c(VBtn,{attrs:{\"outlined\":\"\",\"fab\":\"\",\"x-small\":\"\",\"color\":_vm.taskColor}},[_c(VIcon,{on:{\"click\":_vm.onStopClick}},[_vm._v(\"mdi-clipboard-check\")])],1),_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticClass:\"pointer\",class:_vm.hoverTheme,on:{\"click\":_vm.onSiteClick}},[_c(VCol,{attrs:{\"cols\":\"10\",\"align\":\"left\",\"align-self\":\"center\"}},[_c('p',{staticClass:\"mb-0\"},[_c('b',[_vm._v(\"Favorites\")])]),_c('p',{staticClass:\"mt-0\"},[_vm._v(\" The locations that you will frequently re-use. \")])]),_c(VCol,{attrs:{\"cols\":\"2\",\"align\":\"right\",\"align-self\":\"center\"}},[_c(VBtn,{attrs:{\"outlined\":\"\",\"fab\":\"\",\"x-small\":\"\",\"color\":_vm.siteColor}},[_c(VIcon,{on:{\"click\":_vm.onSiteClick}},[_vm._v(\"mdi-star-circle\")])],1),_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1)],1)],1)],1),_c(VStepperContent,{attrs:{\"step\":\"2\"}},[_c(VCard,{attrs:{\"color\":_vm.cardColor}},[_c(VCardText,[_c(VRow,[_c(VCol,{attrs:{\"align\":\"left\"}},[_c('p',[_vm._v(\" RoadWarrior's optimization algorithm is designed to mold to your individual needs to create the perfect Routes for you. Help us get to know your preferences so that each Route is pre-set for success. \")])])],1),_c(VRow,{staticClass:\"pointer\",class:_vm.hoverTheme,on:{\"click\":_vm.onUnitsClick}},[_c(VCol,{attrs:{\"cols\":\"4\",\"align\":\"left\",\"align-self\":\"center\"}},[_c('p',{staticClass:\"mb-0\"},[_c('b',[_vm._v(\"Distance Units\")])]),_c('p',{staticClass:\"mt-0\"})]),_c(VCol,{attrs:{\"align\":\"right\",\"align-self\":\"center\"}},[_c('span',[_vm._v(_vm._s(_vm.distUnitsText))])]),_c(VCol,{attrs:{\"cols\":\"2\",\"align\":\"right\",\"align-self\":\"center\"}},[_c(VIcon,[_vm._v(\"mdi-road-variant\")]),_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticClass:\"pointer\",class:_vm.hoverTheme,on:{\"click\":_vm.onOptModeClick}},[_c(VCol,{attrs:{\"cols\":\"6\",\"align\":\"left\",\"align-self\":\"center\"}},[_c('p',{staticClass:\"mb-0\"},[_c('b',[_vm._v(\"Optimization Mode\")])]),_c('p',{staticClass:\"my-0\"},[_vm._v(\" Prioritizes saving time or saving miles. \")])]),_c(VCol,{attrs:{\"align\":\"right\",\"align-self\":\"center\"}},[_c('span',[_vm._v(_vm._s(_vm.optModeText))])]),_c(VCol,{attrs:{\"cols\":\"2\",\"align\":\"right\",\"align-self\":\"center\"}},[(_vm.optMode == 1)?_c(VIcon,[_vm._v(\"mdi-ruler\")]):_vm._e(),(_vm.optMode == 2)?_c(VIcon,[_vm._v(\"mdi-timer\")]):_vm._e(),_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticClass:\"pointer\",class:_vm.hoverTheme,on:{\"click\":_vm.onTravelModeClick}},[_c(VCol,{attrs:{\"cols\":\"6\",\"align\":\"left\",\"align-self\":\"center\"}},[_c('p',{staticClass:\"mb-0\"},[_c('b',[_vm._v(\"Travel Mode\")])]),_c('p',{staticClass:\"my-0\"},[_vm._v(\"Optimizes based on path types.\")])]),_c(VCol,{attrs:{\"align\":\"right\",\"align-self\":\"center\"}},[_c('span',[_vm._v(_vm._s(_vm.travelModeText))])]),_c(VCol,{attrs:{\"cols\":\"2\",\"align\":\"right\",\"align-self\":\"center\"}},[(_vm.travelMode == 'driving')?_c(VIcon,[_vm._v(\"mdi-car\")]):_vm._e(),(_vm.travelMode == 'bicycling')?_c(VIcon,[_vm._v(\"mdi-bike\")]):_vm._e(),(_vm.travelMode == 'walking')?_c(VIcon,[_vm._v(\"mdi-walk\")]):_vm._e(),_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticClass:\"pointer\",class:_vm.hoverTheme,on:{\"click\":_vm.onRoundTripClick}},[_c(VCol,{attrs:{\"cols\":\"6\",\"align\":\"left\",\"align-self\":\"center\"}},[_c('p',{staticClass:\"mb-0\"},[_c('b',[_vm._v(\"Route Type\")])]),_c('p',{staticClass:\"my-0\"},[_vm._v(\" Sets your Route's relative end point. \")])]),_c(VCol,{attrs:{\"align\":\"right\",\"align-self\":\"center\"}},[_c('span',[_vm._v(_vm._s(_vm.roundTripText))])]),_c(VCol,{attrs:{\"cols\":\"2\",\"align\":\"right\",\"align-self\":\"center\"}},[(_vm.roundTripSelected == true)?_c(VIcon,[_vm._v(\"mdi-refresh\")]):_vm._e(),(_vm.roundTripSelected == false)?_c(VIcon,[_vm._v(\"mdi-arrow-right\")]):_vm._e(),_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticClass:\"pointer\",class:_vm.hoverTheme,on:{\"click\":_vm.onAvoidsClick}},[_c(VCol,{attrs:{\"cols\":\"6\",\"align\":\"left\",\"align-self\":\"center\"}},[_c('p',{staticClass:\"mb-0\"},[_c('b',[_vm._v(\"Avoids\")])]),_c('p',{staticClass:\"my-0\"},[_vm._v(\" Omits certain road features on your Route. \")])]),_c(VCol,{attrs:{\"align\":\"right\",\"align-self\":\"center\"}},[_c('span',[_vm._v(_vm._s(_vm.avoidsText))])]),_c(VCol,{attrs:{\"cols\":\"2\",\"align\":\"right\",\"align-self\":\"center\"}},[(_vm.avoids.length == 0)?_c(VIcon,[_vm._v(\"mdi-minus-circle-outline\")]):_vm._e(),(_vm.avoids.length !== 0)?_c(VIcon,[_vm._v(\"mdi-minus-circle\")]):_vm._e(),_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1)],1)],1)],1),_c(VStepperContent,{attrs:{\"step\":\"3\"}},[_c(VCard,{attrs:{\"flat\":\"\",\"color\":_vm.cardColor}},[_c(VCardText,[_c(VRow,[_c(VCol,{attrs:{\"align\":\"left\"}},[_c('p',[_vm._v(\" For your routing experience to be most accurate, please provide us with estimates of the times listed below. \")])])],1),_c(VRow,{staticClass:\"pointer\",class:_vm.hoverTheme,on:{\"click\":_vm.onVisitTimeClick}},[_c(VCol,{attrs:{\"cols\":\"6\",\"align\":\"left\",\"align-self\":\"center\"}},[_c('p',{staticClass:\"mb-0\"},[_c('b',[_vm._v(\"Visit Time\")])]),_c('p',{staticClass:\"mt-0\"},[_vm._v(\" Minutes spent at each location, on average. \")])]),_c(VCol,{attrs:{\"align\":\"right\",\"align-self\":\"center\"}},[_c('span',[_vm._v(_vm._s(_vm.visitTime)+\" minutes\")])]),_c(VCol,{attrs:{\"cols\":\"2\",\"align\":\"right\",\"align-self\":\"center\"}},[_c(VIcon,[_vm._v(\"mdi-clock\")]),_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticClass:\"pointer\",class:_vm.hoverTheme,on:{\"click\":_vm.onRouteTimeClick}},[_c(VCol,{attrs:{\"cols\":\"6\",\"align\":\"left\",\"align-self\":\"center\"}},[_c('p',{staticClass:\"mb-0\"},[_c('b',[_vm._v(\"Route Time\")])]),_c('p',{staticClass:\"mt-0\"},[_vm._v(\" Hours your Routes take to complete, on average. \")])]),_c(VCol,{attrs:{\"align\":\"right\",\"align-self\":\"center\"}},[_c('span',[_vm._v(_vm._s(_vm.routeTime / 60)+\" hours\")])]),_c(VCol,{attrs:{\"cols\":\"2\",\"align\":\"right\",\"align-self\":\"center\"}},[_c(VIcon,[_vm._v(\"mdi-routes-clock\")]),_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1)],1)],1)],1),_c(VStepperContent,{attrs:{\"step\":\"4\"}},[_c(VCard,{attrs:{\"flat\":\"\",\"color\":_vm.cardColor}},[_c(VCardText,[(\n                          _vm.globals.checkNotificationOnboard() === 'default'\n                        )?_c(VRow,[_c(VCol,{attrs:{\"align\":\"left\",\"align-self\":\"center\"}},[_c('span',[_vm._v(\"RoadWarrior can notify you with \"),_c('b',[_vm._v(\"push notifications\")]),_vm._v(\" as your day progresses.\")]),_c('br'),_c('span',[_vm._v(\"When you click next, you'll see a permissions request appear in your browser. Once you decline or accept, you won't be asked again. Any future changes must be made from your browser settings.\")])])],1):_vm._e(),(\n                          _vm.globals.checkNotificationOnboard() === 'granted'\n                        )?_c(VRow,[_c(VCol,{attrs:{\"align\":\"left\",\"align-self\":\"center\"}},[_c('span',[_vm._v(\"Push notifications successfully enabled on this device. Hit \"),_c('b',[_vm._v(\"Next\")]),_vm._v(\" to review all settings and complete setup.\")])])],1):_vm._e(),(_vm.globals.checkNotificationOnboard() === 'denied')?_c(VRow,[_c(VCol,{attrs:{\"align\":\"left\",\"align-self\":\"center\"}},[_c('span',[_vm._v(\"You won't receive push notifications from RoadWarrior. Hit \"),_c('b',[_vm._v(\"Next\")]),_vm._v(\" to review all settings and complete setup.\")])])],1):_vm._e()],1)],1)],1),_c(VStepperContent,{attrs:{\"step\":\"5\"}},[_c(VCard,{attrs:{\"flat\":\"\",\"color\":_vm.cardColor}},[_c(VCardText,[_c(VRow,[_c(VCol,{attrs:{\"align\":\"left\"}},[_c('span',{attrs:{\"align\":\"left\"}},[_vm._v(\" You're all set! Please take a moment to review your defaults below. Make any changes by clicking on the icon you wish to change. \")])])],1),_c(VRow,[_c(VCol,{attrs:{\"cols\":\"6\"}},[_c('span',[_vm._v(\"Colors:\")]),_c(VRow,{staticStyle:{\"margin-left\":\"auto\",\"margin-right\":\"auto\"},attrs:{\"align\":\"center\"}},[_c(VCol,{attrs:{\"cols\":\"3\"}}),_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({attrs:{\"color\":_vm.stopColor},on:{\"click\":function($event){_vm.idxStep = 1}}},on),[_vm._v(\"mdi-map-marker\")])]}}])},[_c('span',[_vm._v(\"Stop Color\")])])],1),_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({attrs:{\"color\":_vm.taskColor},on:{\"click\":function($event){_vm.idxStep = 1}}},on),[_vm._v(\"mdi-clipboard-check\")])]}}])},[_c('span',[_vm._v(\"Task Color\")])])],1),_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({attrs:{\"color\":_vm.siteColor},on:{\"click\":function($event){_vm.idxStep = 1}}},on),[_vm._v(\"mdi-star-circle\")])]}}])},[_c('span',[_vm._v(\"Favorite Color\")])])],1)],1)],1),_c(VCol,[_c('span',[_vm._v(\"Routes:\")]),_c(VRow,[_c(VCol,{attrs:{\"cols\":\"1\"}}),_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 2}}},on),[_vm._v(\"mdi-road-variant\")])]}}])},[_c('span',[_vm._v(\"Units: \"+_vm._s(_vm.distUnitsText))])])],1),(_vm.optMode == 2)?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 2}}},on),[_vm._v(\"mdi-timer\")])]}}],null,false,237166472)},[_c('span',[_vm._v(\"Optimization Mode: Fastest Time\")])])],1):_vm._e(),(_vm.optMode == 1)?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 2}}},on),[_vm._v(\"mdi-ruler\")])]}}],null,false,435381651)},[_c('span',[_vm._v(\"Optimization Mode: Shortest Distance\")])])],1):_vm._e(),(_vm.travelMode == 'driving')?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 2}}},on),[_vm._v(\"mdi-car\")])]}}],null,false,3254677311)},[_c('span',[_vm._v(\"Travel Mode: Driving\")])])],1):_vm._e(),(_vm.travelMode == 'bicycling')?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 2}}},on),[_vm._v(\"mdi-bike\")])]}}],null,false,3791710794)},[_c('span',[_vm._v(\"Travel Mode: Biking\")])])],1):_vm._e(),(_vm.travelMode == 'walking')?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 2}}},on),[_vm._v(\"mdi-walk\")])]}}],null,false,3258342366)},[_c('span',[_vm._v(\"Travel Mode: Walking\")])])],1):_vm._e(),(_vm.isRoundTrip == true)?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 2}}},on),[_vm._v(\"mdi-refresh\")])]}}],null,false,3137237906)},[_c('span',[_vm._v(\"Route Type: Round Trip\")])])],1):_vm._e(),(_vm.isRoundTrip == false)?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 2}}},on),[_vm._v(\"mdi-arrow-right\")])]}}],null,false,3267858427)},[_c('span',[_vm._v(\"Route Type: One Way\")])])],1):_vm._e(),(_vm.avoids.length == 0)?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 2}}},on),[_vm._v(\"mdi-minus-circle-outline\")])]}}],null,false,2155316081)},[_c('span',[_vm._v(\"No Default Avoids\")])])],1):_vm._e(),(_vm.avoids.length !== 0)?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 2}}},on),[_vm._v(\"mdi-minus-circle\")])]}}],null,false,1736458588)},[_c('span',[_vm._v(\"Avoid: \"+_vm._s(_vm.avoidsText))])])],1):_vm._e()],1)],1)],1),_c(VRow,[_c(VCol,{attrs:{\"cols\":\"6\"}},[_c('span',[_vm._v(\"Location:\")]),_c(VRow,[_c(VCol,{attrs:{\"cols\":\"4\"}}),(_vm.isDynStart == true)?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxTab = 1}}},on),[_vm._v(\"mdi-crosshairs-gps\")])]}}],null,false,2815469055)},[_c('span',[_vm._v(\"Auto-set Start\")])])],1):_vm._e(),(_vm.isDynStart == false)?_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxTab = 1}}},on),[_vm._v(\"mdi-crosshairs-off\")])]}}],null,false,3857785140)},[_c('span',[_vm._v(\"Manually Set Start\")])])],1):_vm._e(),_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxTab = 2}}},on),[_vm._v(\"mdi-home\")])]}}])},[_c('span',[_vm._v(\"(\"+_vm._s(_vm.lat.toFixed(4))+\", \"+_vm._s(_vm.lng.toFixed(4))+\")\")])])],1)],1)],1),_c(VCol,[_c('span',[_vm._v(\"Time:\")]),_c(VRow,[_c(VCol,{attrs:{\"cols\":\"4\"}}),_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 3}}},on),[_vm._v(\"mdi-clock\")])]}}])},[_c('span',[_vm._v(_vm._s(_vm.visitTime)+\" mins per Stop\")])])],1),_c(VCol,{attrs:{\"cols\":\"2\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({on:{\"click\":function($event){_vm.idxStep = 3}}},on),[_vm._v(\"mdi-routes-clock\")])]}}])},[_c('span',[_vm._v(_vm._s(_vm.routeTime / 60)+\" hours per Route\")])])],1)],1)],1)],1)],1)],1)],1)],1)],1),(_vm.globals.m_showReloPicker)?_c('RwReloPicker',{attrs:{\"init-title\":_vm.globals.m_reloPickerInitTitle,\"init-lat\":_vm.lat,\"init-lng\":_vm.lng},on:{\"onReloPick\":_vm.onReloPick}}):_vm._e()],1),_c(VTabItem,{key:\"4\"},[_c(VRow,{staticClass:\"ma-4\"},[_c(VCol,{attrs:{\"align\":\"left\"}},[_c('p',[_vm._v(\" Stops are the locations that make up each Route. You'll be working with Stops more than any other location type, so pick a color you like! \")])])],1),[_c(VRow,{attrs:{\"justify\":\"space-around\"}},[_c(VColorPicker,{attrs:{\"swatches\":_vm.globals.swatches,\"flat\":\"\",\"hide-sliders\":\"\",\"hide-canvas\":\"\",\"hide-inputs\":\"\",\"show-swatches\":\"\",\"swatches-max-height\":\"200\"},nativeOn:{\"click\":function($event){return _vm.homeAndSave(_vm.idxTab)}},model:{value:(_vm.stopColor),callback:function ($$v) {_vm.stopColor=$$v},expression:\"stopColor\"}})],1)]],2),_c(VTabItem,{key:\"5\"},[_c(VRow,{staticClass:\"ma-4\"},[_c(VCol,{attrs:{\"align\":\"left\"}},[_c('p',[_vm._v(\" Tasks are 'to-do' locations that don't have a Route to call home yet. \")])])],1),[_c(VRow,{attrs:{\"justify\":\"space-around\"}},[_c(VColorPicker,{attrs:{\"swatches\":_vm.globals.swatches,\"flat\":\"\",\"hide-sliders\":\"\",\"hide-canvas\":\"\",\"hide-inputs\":\"\",\"show-swatches\":\"\",\"swatches-max-height\":\"200\"},nativeOn:{\"click\":function($event){return _vm.homeAndSave(_vm.idxTab)}},model:{value:(_vm.taskColor),callback:function ($$v) {_vm.taskColor=$$v},expression:\"taskColor\"}})],1)]],2),_c(VTabItem,{key:\"6\"},[_c(VRow,{staticClass:\"ma-4\"},[_c(VCol,{attrs:{\"align\":\"left\"}},[_c('p',[_vm._v(\" Favorites are your most common locations that you plan on re-using. They are not a part of any Route, but can be turned into Stops. \")])])],1),[_c(VRow,{attrs:{\"justify\":\"space-around\"}},[_c(VColorPicker,{attrs:{\"swatches\":_vm.globals.swatches,\"flat\":\"\",\"hide-sliders\":\"\",\"hide-canvas\":\"\",\"hide-inputs\":\"\",\"show-swatches\":\"\",\"swatches-max-height\":\"200\"},nativeOn:{\"click\":function($event){return _vm.homeAndSave(_vm.idxTab)}},model:{value:(_vm.siteColor),callback:function ($$v) {_vm.siteColor=$$v},expression:\"siteColor\"}})],1)]],2),_c(VTabItem,{key:\"7\"},[[_c(VRow,[_c(VCol,{attrs:{\"cols\":\"4\"}}),_c(VRadioGroup,{nativeOn:{\"click\":function($event){return _vm.homeAndSave(_vm.idxTab)}},model:{value:(_vm.unitsSelected),callback:function ($$v) {_vm.unitsSelected=$$v},expression:\"unitsSelected\"}},[_c(VRadio,{key:1,attrs:{\"label\":\"Miles\",\"value\":1},nativeOn:{\"click\":function($event){return _vm.onUnitRadio(1)}}}),_c(VRadio,{key:2,attrs:{\"label\":\"Kilometers\",\"value\":2},nativeOn:{\"click\":function($event){return _vm.onUnitRadio(2)}}})],1),_c(VCol,{attrs:{\"cols\":\"4\"}})],1)]],2),_c(VTabItem,{key:\"8\"},[_c(VRow,{attrs:{\"align\":\"center\"}},[_c(VCol,[_c(VAvatar,{attrs:{\"color\":\"#E2004F\",\"size\":\"60\"}},[(_vm.optMode == 2)?_c(VIcon,[_vm._v(\"mdi-timer\")]):_vm._e(),(_vm.optMode == 1)?_c(VIcon,[_vm._v(\"mdi-ruler\")]):_vm._e()],1)],1)],1),_c(VRow,[_c(VCol,{staticStyle:{\"margin-left\":\"auto\",\"margin-right\":\"auto\"},attrs:{\"cols\":\"10\"}},[(_vm.optMode == 2)?_c('span',{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Fastest Time is best for users looking to minimize total hours spent on the roads.\")]):_vm._e(),(_vm.optMode == 1)?_c('span',{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Shortest Distance is best for users looking to minimize miles driven or fuel usage.\")]):_vm._e(),_c('br')])],1),_c(VRow,[_c(VCol,{attrs:{\"cols\":\"4\"}}),_c(VRadioGroup,{nativeOn:{\"click\":function($event){return _vm.homeAndSave(_vm.idxTab)}},model:{value:(_vm.optModeSelected),callback:function ($$v) {_vm.optModeSelected=$$v},expression:\"optModeSelected\"}},[_c(VRadio,{key:0,attrs:{\"label\":\"Fastest Time\",\"value\":0},nativeOn:{\"click\":function($event){return _vm.onOptModeRadio(0)}}}),_c(VRadio,{key:1,attrs:{\"label\":\"Shortest Distance\",\"value\":1},nativeOn:{\"click\":function($event){return _vm.onOptModeRadio(1)}}})],1),_c(VCol,{attrs:{\"cols\":\"4\"}})],1)],1),_c(VTabItem,{key:\"9\"},[_c(VRow,{attrs:{\"align\":\"center\"}},[_c(VCol,[_c(VAvatar,{attrs:{\"color\":\"#E2004F\",\"size\":\"60\"}},[(_vm.travelMode == 'driving')?_c(VIcon,[_vm._v(\"mdi-car\")]):_vm._e(),(_vm.travelMode == 'bicycling')?_c(VIcon,[_vm._v(\"mdi-bike\")]):_vm._e(),(_vm.travelMode == 'walking')?_c(VIcon,[_vm._v(\"mdi-walk\")]):_vm._e()],1)],1)],1),_c(VRow,[_c(VCol,{attrs:{\"cols\":\"5\"}}),_c(VRadioGroup,{nativeOn:{\"click\":function($event){return _vm.homeAndSave(_vm.idxTab)}},model:{value:(_vm.travelMode),callback:function ($$v) {_vm.travelMode=$$v},expression:\"travelMode\"}},[_c(VRadio,{attrs:{\"label\":\"Driving\",\"value\":\"driving\"}}),_c(VRadio,{attrs:{\"label\":\"Bicycling\",\"value\":\"bicycling\"}}),_c(VRadio,{attrs:{\"label\":\"Walking\",\"value\":\"walking\"}})],1),_c(VCol,{attrs:{\"cols\":\"4\"}})],1)],1),_c(VTabItem,{key:\"10\"},[_c(VRow,{attrs:{\"align\":\"center\"}},[_c(VCol,[_c(VAvatar,{attrs:{\"color\":\"#E2004F\",\"size\":\"60\"}},[(_vm.isRoundTrip == true)?_c(VIcon,[_vm._v(\"mdi-refresh\")]):_vm._e(),(_vm.isRoundTrip == false)?_c(VIcon,[_vm._v(\"mdi-arrow-right\")]):_vm._e()],1)],1)],1),_c(VRow,[_c(VCol,{attrs:{\"cols\":\"5\"}}),_c(VRadioGroup,{nativeOn:{\"click\":function($event){return _vm.homeAndSave(_vm.idxTab)}},model:{value:(_vm.roundTripSelected),callback:function ($$v) {_vm.roundTripSelected=$$v},expression:\"roundTripSelected\"}},[_c(VRadio,{key:1,attrs:{\"label\":\"Round Trip\",\"value\":1},nativeOn:{\"click\":function($event){return _vm.onRoundTripRadio(1)}}}),_c(VRadio,{key:0,attrs:{\"label\":\"One Way\",\"value\":0},nativeOn:{\"click\":function($event){return _vm.onRoundTripRadio(0)}}})],1),_c(VCol,{attrs:{\"cols\":\"4\"}})],1)],1),_c(VTabItem,{key:\"11\"},[_c(VRow,{attrs:{\"align\":\"center\"}},[_c(VCol,[_c(VAvatar,{attrs:{\"color\":\"#E2004F\",\"size\":\"60\"}},[_c(VIcon,[_vm._v(\"mdi-minus-circle-outline\")])],1)],1)],1),_c(VRow,[_c(VCol,{staticStyle:{\"margin-left\":\"auto\",\"margin-right\":\"auto\"}},[_c('span',[_vm._v(\"Is it important to avoid any of the following on your Route?\")])])],1),_c(VRow,[_c(VCol,{staticStyle:{\"margin-left\":\"auto\",\"margin-right\":\"auto\"},attrs:{\"cols\":\"6\"}},[_c(VSelect,{attrs:{\"dense\":\"\",\"items\":_vm.avoidsList,\"multiple\":\"\",\"label\":\"Avoids\"},model:{value:(_vm.avoidsSelected),callback:function ($$v) {_vm.avoidsSelected=$$v},expression:\"avoidsSelected\"}})],1)],1)],1),_c(VTabItem,{key:\"12\"},[_c(VRow,[_c(VCol,{staticStyle:{\"margin-left\":\"auto\",\"margin-right\":\"auto\"},attrs:{\"cols\":\"10\"}},[_c('span',{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Visit Time is the average time in minutes you spend at each Stop. We use this to plan effectively for things like traffic. This can be customized on any Stop.\")]),_c('br')])],1),_c(VRow,{attrs:{\"align\":\"start\",\"no-gutters\":\"\"}},[_c(VRow,{staticClass:\"mt-4 mx-4\",staticStyle:{\"height\":\"100%\"},attrs:{\"align\":\"center\",\"justify\":\"center\",\"no-gutters\":\"\"}},[_c(VCol,{staticClass:\"text-left\"},[_c('div',{staticStyle:{\"font-weight\":\"bolder\"}},[_vm._v(\"Visit Time (minutes):\")]),_c('div',{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\" The expected amount of time spent at this stop. \")])]),_c(VForm,{ref:\"form\",attrs:{\"lazy-validation\":\"\",\"dense\":\"\"}},[_c(VTextField,{staticClass:\"text-right\",staticStyle:{\"max-width\":\"128px\"},attrs:{\"reverse\":\"\",\"rules\":_vm.visitRules,\"dense\":\"\",\"filled\":\"\",\"single-line\":\"\",\"type\":\"number\",\"hint\":\"Between 0 to 999\",\"persistent-hint\":true},model:{value:(_vm.visitTimeInput),callback:function ($$v) {_vm.visitTimeInput=$$v},expression:\"visitTimeInput\"}})],1)],1)],1)],1),_c(VTabItem,{key:\"13\"},[_c(VRow,[_c(VCol,{staticStyle:{\"margin-left\":\"auto\",\"margin-right\":\"auto\"},attrs:{\"cols\":\"10\"}},[_c('span',{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Route Duration is the average time in hours you expect each Route to last. We use this to allow Routes to run overnight or over multiple days, as needed.\")]),_c('br')])],1),_c(VRow,[_c(VCol,{staticStyle:{\"margin-left\":\"auto\",\"margin-right\":\"auto\"},attrs:{\"cols\":\"6\"}},[_c(VForm,{ref:\"form\",attrs:{\"lazy-validation\":\"\",\"dense\":\"\"}},[_c(VCombobox,{attrs:{\"items\":_vm.globals.routeTimes,\"clearable\":\"\",\"rules\":_vm.rteRules,\"hint\":\"168 hours (7 days) max.\",\"label\":\"Default Route Duration\",\"open-on-clear\":\"\",\"persistent-hint\":\"\",\"suffix\":\"hours\"},model:{value:(_vm.routeTimeHoursCalc),callback:function ($$v) {_vm.routeTimeHoursCalc=$$v},expression:\"routeTimeHoursCalc\"}})],1)],1)],1)],1),_c(VTabItem,{key:\"14\"},[_c(VRow,[_c(VCol,{staticStyle:{\"margin-left\":\"auto\",\"margin-right\":\"auto\"},attrs:{\"cols\":\"10\"}},[_c('br'),_c('span',{staticStyle:{\"font-size\":\"medium\"}},[_vm._v(\"Allowing location permissions will enable the RoadWarrior app to automatically center the map on your position. \"),_c('br'),_vm._v(\" If you accept, you will see a confirmation pop-up from your browser. Click 'Allow' in the pop-up to proceed with enabling permissions.\")]),_c('br')])],1)],1)],1)],1),_c(VCardActions,{staticClass:\"pb-6\",staticStyle:{\"height\":\"24px\"}},[(_vm.idxTab > 1)?_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":_vm.navBack}},[_vm._v(\"Back\")]):_vm._e(),_c(VSpacer),(_vm.idxTab === 0)?_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.checkOrConfirmLoc}},[_vm._v(\"Start Customizing\")]):_vm._e(),(_vm.idxTab === 1)?_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.promptOrChooseLoc}},[_vm._v(_vm._s(_vm.nextLocBtnTitle))]):_vm._e(),(_vm.idxTab === 14)?_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.promptLocation}},[_vm._v(\"Allow Location Access\")]):_vm._e(),(_vm.idxTab >= 11 && _vm.idxTab < 14)?_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){return _vm.homeAndSave(_vm.idxTab)}}},[_vm._v(\"Apply\")]):_vm._e(),(_vm.idxTab === 3 && _vm.idxStep !== 5 && _vm.idxStep !== 4)?_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.idxStep = 4}}},[_vm._v(\"Skip Remaining Presets\")]):_vm._e(),(_vm.idxTab === 2)?_c('div',[(!_vm.globals.showStartingLocOnlyOnboard)?_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.goToStepper}},[_vm._v(\"Next\")]):_vm._e(),_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\",\"disabled\":_vm.gpsUpdating},on:{\"click\":_vm.save}},[_vm._v(\"Finish\")])],1):_vm._e(),(\n            _vm.idxTab === 3 &&\n            _vm.idxStep !== 5 &&\n            (_vm.globals.checkNotificationOnboard() !== 'default' ||\n              _vm.idxStep !== 4)\n          )?_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){_vm.idxStep++}}},[_vm._v(\"Next \")]):_vm._e(),(\n            _vm.idxTab === 3 &&\n            _vm.idxStep === 4 &&\n            _vm.globals.checkNotificationOnboard() === 'default'\n          )?_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.checkNotes}},[_vm._v(\"Next \")]):_vm._e(),(_vm.idxTab === 3 && _vm.idxStep === 5)?_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.save}},[_vm._v(\"Save & Finish\")]):_vm._e()],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport theSettingSpace, {RwSettingSpace} from \"@/app/views/account/RwSettingSpace\";\nimport RwReloPicker from \"@/app/views/pickers/RwReloPicker.vue\";\nimport {RwGeoPoint} from \"@/app/utils/RwGeoUtils\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport {OnboardingSteps, OnboardingTab} from \"@/app/RwEnums\";\nimport {RwTaskSearch} from \"@/app/dal/RwTaskSearch\";\nimport {RwConstants} from \"@/app/RwConstants\";\n\n@Component({components: {RwReloPicker}})\nexport default class RwOnboardSettings extends Vue {\n\n  //#region Props\n\n  idxTab: OnboardingTab = OnboardingTab.Welcome;\n  idxStep: OnboardingSteps = OnboardingSteps.Colors;\n  idxStepTab: 0;\n\n  isLocationSet: boolean = false;\n\n  m_stopColor: string = \"\";\n  m_taskColor: string = \"\";\n  m_siteColor: string = \"\";\n\n  m_optMode: number = 2;\n  m_travelMode: string = \"\";\n\n  m_isRoundTrip: boolean = false;\n  m_avoids: string[] = null;\n  m_units: number = 0;\n\n  m_visitTime: number = 0;\n  m_visitTimeInput: number = RwPrefUtils.visitTime;\n  m_routeTime: number = 0;\n\n  m_lat: number = 0;\n  m_lng: number = 0;\n  m_isDynStart: boolean = false;\n\n  visitTrigger = 0;\n  isVisitRangeValid = false;\n\n  avoidsList = ['Highways', 'Tolls', 'Ferries'];\n  startText = ['Use Geolocation', 'Use Default'];\n\n  defaultLocChoice: number = 0;\n  gpsUpdating = false;\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get settingSpace(): RwSettingSpace {\n    return theSettingSpace;\n  }\n\n  get stopColor(): string {\n    if (!this.m_stopColor && this.settingSpace.stopColor) {\n      this.m_stopColor = this.settingSpace.stopColor;\n    }\n    return this.m_stopColor;\n  }\n\n  set stopColor(val: string) {\n    this.m_stopColor = val;\n  }\n\n  get taskColor(): string {\n    if (!this.m_taskColor && this.settingSpace.taskColor) {\n      this.m_taskColor = this.settingSpace.taskColor;\n    }\n    return this.m_taskColor;\n  }\n\n  set taskColor(val: string) {\n    this.m_taskColor = val;\n  }\n\n  get siteColor(): string {\n    if (!this.m_siteColor && this.settingSpace.siteColor) {\n      this.m_siteColor = this.settingSpace.siteColor;\n    }\n    return this.m_siteColor;\n  }\n\n  set siteColor(val: string) {\n    this.m_siteColor = val;\n  }\n\n  get optMode(): number {\n    if (!this.m_optMode && this.settingSpace.optMode) {\n      this.m_optMode = this.settingSpace.optMode;\n    }\n    return this.m_optMode;\n  }\n\n  set optMode(val: number) {\n    this.m_optMode = val;\n  }\n\n  get travelMode(): string {\n    if (!this.m_travelMode && this.settingSpace.travelMode) {\n      this.m_travelMode = this.settingSpace.travelMode;\n    }\n    return this.m_travelMode;\n  }\n\n  set travelMode(val: string) {\n    this.m_travelMode = val;\n  }\n\n  get isRoundTrip(): boolean {\n    if (!this.m_isRoundTrip == null) {\n      this.m_isRoundTrip = this.settingSpace.isRoundTrip;\n    }\n    return this.m_isRoundTrip;\n  }\n\n  set isRoundTrip(val: boolean) {\n    this.m_isRoundTrip = val;\n  }\n\n  get avoids(): string[] {\n    if (!this.m_avoids) {\n      this.m_avoids = this.settingSpace.avoids;\n    }\n    return this.m_avoids;\n  }\n\n  set avoids(val: string[]) {\n    this.m_avoids = val;\n  }\n\n  get units(): number {\n    if (this.m_units == 0) {\n      this.m_units = this.settingSpace.distUnits;\n    }\n    return this.m_units;\n  }\n\n  set units(val: number) {\n    this.m_units = val;\n  }\n\n  get visitTime(): number {\n    if (!this.m_visitTime && this.settingSpace.visitTime) {\n      this.m_visitTime = this.settingSpace.visitTime;\n    }\n    return this.m_visitTime;\n  }\n\n  set visitTime(val: number) {\n    this.m_visitTime = val;\n  }\n\n  get visitTimeInput(): number {\n    return this.m_visitTimeInput;\n  }\n\n  set visitTimeInput(val: number) {\n    this.m_visitTimeInput = val;\n  }\n\n  get routeTime(): number {\n    if (!this.m_routeTime && this.settingSpace.routeTime) {\n      this.m_routeTime = this.settingSpace.routeTime;\n    }\n    return this.m_routeTime;\n  }\n\n  set routeTime(val: number) {\n    this.m_routeTime = val;\n  }\n\n  get lat(): number {\n    if (!this.m_lat && this.settingSpace.startLat) {\n      this.m_lat = this.settingSpace.startLat;\n    }\n    return this.m_lat;\n  }\n\n  set lat(val: number) {\n    this.m_lat = val;\n  }\n\n  get lng(): number {\n    if (!this.m_lng && this.settingSpace.startLng) {\n      this.m_lng = this.settingSpace.startLng;\n    }\n    return this.m_lng;\n  }\n\n  set lng(val: number) {\n    this.m_lng = val;\n  }\n\n  get isDynStart(): boolean {\n    if (!this.m_isDynStart && this.settingSpace.isDynPoint) {\n      this.m_isDynStart = this.settingSpace.isDynPoint;\n    }\n    return this.m_isDynStart;\n  }\n\n  set isDynStart(val: boolean) {\n    this.m_isDynStart = val;\n  }\n\n  get title(): string {\n    let title: string;\n    switch (this.idxTab) {\n        //@formatter:off\n      case 0:\n        title = \"RoadWarrior Defaults Setup\";\n        break;\n      case 1:\n        title = \"Default Location\";\n        break;\n      case 2:\n        title = \"Confirm Location\";\n        break;\n      case 3:\n        title = \"Map & Route Defaults\";\n        break;\n      case 4:\n        title = \"Stop Color\";\n        break;\n      case 5:\n        title = \"Task Color\";\n        break;\n      case 6:\n        title = \"Favorite Color\";\n        break;\n      case 7:\n        title = \"Distance Units\";\n        break;\n      case 8:\n        title = \"Optimize Mode\";\n        break;\n      case 9:\n        title = \"Travel Mode\";\n        break;\n      case 10:\n        title = \"Route Type\";\n        break;\n      case 11:\n        title = \"Avoids\";\n        break;\n      case 12:\n        title = \"Visit Time\";\n        break;\n      case 13:\n        title = \"Route Time\";\n        break;\n      case 14:\n        title = \"Grant Location Permission\";\n        break;\n    }\n    return title;\n  }\n\n  get visitRules(): any[] {\n    return [\n      v => v <= 999 || 'Max 999 mins',\n      v => !!v || 'Value is required',\n      v => /^[0-9]+$/.test(v) || 'Whole minutes only'\n    ];\n  }\n\n  get rteRules(): any[] {\n    return [\n      v => v <= 168 || 'Max 168 hours (one week)',\n      v => v > 0 || 'Must be greater than 0',\n      v => !!v || 'Value is required',\n      v => /^[0-9]+$/.test(v) || 'Whole numbers only'\n    ];\n  }\n\n  get rules() {\n    const self = this;\n    return {\n      required: value => {\n        if (!!value || value === 0) {\n          //console.log(\"isVisitRangeValid\", self.isVisitRangeValid)\n          return true;\n        } else {\n          //console.log(\"isVisitRangeValid\", self.isVisitRangeValid)\n          return false;\n        }\n      },\n      visitRange: value => {\n        if (value >= 0 && value <= 999) {\n          self.isVisitRangeValid = true;\n          //console.log(\"isVisitRangeValid\", self.isVisitRangeValid)\n          return true;\n        } else {\n          self.isVisitRangeValid = false;\n          //console.log(\"isVisitRangeValid\", self.isVisitRangeValid)\n          return 'Between 0 to 999'\n        }\n      },\n    }\n  }\n\n  get locImageUrl(): string {\n    const apiKey = RwConstants.hereApiKey;\n    return `https://image.maps.hereapi.com/mia/v3/base/mc/overlay:zoom=14/650x500/jpeg?apiKey=` +\n      `${apiKey}&overlay=point:${this.lat},${this.lng};label=$num;color=%23000;text-color=%23000;text-outline-color=%23000;size=large&copyright=false`;\n  }\n\n  get nextLocBtnTitle(): string {\n    if (this.defaultLocChoice === 0) {\n      return \"Confirm Geolocation Permissions\"\n    } else {\n      return \"Pick Default Location\"\n    }\n  }\n\n  get distUnitsText(): string {\n    if (this.units == 1) {\n      return 'Miles'\n    } else {\n      return 'Kilometers'\n    }\n  }\n\n  get unitsSelected(): number {\n    if (this.units == 1) {\n      return 1;\n    } else {\n      return 2;\n    }\n  }\n\n  set unitsSelected(val: number) {\n    if (val == 1) {\n      this.units = 1;\n    } else {\n      this.units = 2;\n    }\n  }\n\n  get optModeText(): string {\n    if (this.optMode == 1) {\n      return 'Shortest Distance'\n    } else {\n      return 'Fastest Time'\n    }\n  }\n\n  get optModeSelected(): number {\n    if (this.optMode == 1) {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n\n  set optModeSelected(val: number) {\n    if (val == 1) {\n      this.optMode = 1;\n    } else {\n      this.optMode = 2;\n    }\n  }\n\n  get travelModeText(): string {\n    if (this.travelMode == 'walking') {\n      return 'Walking';\n    } else if (this.travelMode == 'driving') {\n      return 'Driving';\n    } else {\n      return 'Bicycling'\n    }\n  }\n\n  get roundTripText(): string {\n    if (this.isRoundTrip == true) {\n      return 'Round Trip';\n    } else {\n      return 'One Way'\n    }\n  }\n\n  get roundTripSelected(): number {\n    if (this.isRoundTrip == true) {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n\n  set roundTripSelected(val: number) {\n    if (val == 0) {\n      this.isRoundTrip = false;\n    } else {\n      this.isRoundTrip = true;\n    }\n  }\n\n  get avoidsText(): string {\n    if (this.avoids) {\n      // console.warn(\"this.avoids: \", this.avoids);\n      if (this.avoids.length == 0) {\n        return 'No Avoids Selected';\n      } else if (this.avoids.length == 1) {\n        return this.avoids[0];\n      } else if (this.avoids.length == 2) {\n        return this.avoids[0] + \" and \" + this.avoids[1];\n      } else if (this.avoids.length == 3) {\n        return this.avoids[0] + \", \" + this.avoids[1] + \", and \" + this.avoids[2];\n      }\n    } else {\n      return 'No Avoids Selected';\n    }\n  }\n\n  get avoidsSelected(): string[] {\n    let avoidsArr: string[] = [];\n    if (this.avoids.length != 0) {\n      if (this.avoids.includes('highways')) {\n        avoidsArr.push('Highways');\n      }\n      if (this.avoids.includes('tolls')) {\n        avoidsArr.push('Tolls');\n      }\n      if (this.avoids.includes('ferries')) {\n        avoidsArr.push('Ferries');\n      }\n    }\n    return avoidsArr;\n  }\n\n  set avoidsSelected(val: string[]) {\n    if (val) {\n      if (val.includes('Highways') && val.includes('Tolls') && val.includes('Ferries')) {\n        this.m_avoids = ['highways', 'tolls', 'ferries'];\n      } else if (val.includes('Highways') && val.includes('Tolls') && !val.includes('Ferries')) {\n        this.m_avoids = ['highways', 'tolls'];\n      } else if (val.includes('Highways') && !val.includes('Tolls') && val.includes('Ferries')) {\n        this.m_avoids = ['highways', 'ferries'];\n      } else if (!val.includes('Highways') && val.includes('Tolls') && val.includes('Ferries')) {\n        this.m_avoids = ['tolls', 'ferries'];\n      } else if (val.includes('Highways') && !val.includes('Tolls') && !val.includes('Ferries')) {\n        this.m_avoids = ['highways'];\n      } else if (!val.includes('Highways') && val.includes('Tolls') && !val.includes('Ferries')) {\n        this.m_avoids = ['tolls'];\n      } else if (!val.includes('Highways') && !val.includes('Tolls') && val.includes('Ferries')) {\n        this.m_avoids = ['ferries'];\n      } else {\n        this.m_avoids = [];\n      }\n    }\n  }\n\n  get startTypeSelected(): string {\n    this.m_isDynStart = (this.isDynStart === true) ? true : false;\n    return (this.isDynStart === true) ? 'Geolocation-Based' : 'Manually Set';\n  }\n\n  set startTypeSelected(val: string) {\n    this.m_isDynStart = (val == 'Geolocation-Based') ? true : false;\n  }\n\n  get visitTimeSelected(): number {\n    return this.m_visitTime;\n  }\n\n  set visitTimeSelected(val: number) {\n    if (val < 0) {\n      this.m_visitTime = 0;\n    } else if (val > 999) {\n      this.m_visitTime = 999;\n    } else {\n      this.m_visitTime = val;\n    }\n  }\n\n  get visitTimeCalc(): number {\n    let trigger1 = this.visitTrigger;\n    //console.log(\"GET visitTimeCalc m_visitTime, defaultVisitTime\", this.m_visitTime, RwPrefUtils.visitTime)\n    return this.m_visitTime;\n  }\n\n  set visitTimeCalc(val: number) {\n    if (val >= 0 && val <= 999) {\n      this.m_visitTime = Math.round(val);\n    } else {\n      if (val < 0) this.m_visitTime = 0;\n      if (val > 999) this.m_visitTime = 999;\n    }\n    this.visitTrigger++;\n  }\n\n  get routeTimeHours(): number {\n    let val = this.m_routeTime / 60;\n    //console.warn(\"get routeTimeHours: \", val);\n    return val;\n  }\n\n  set routeTimeHours(val: number) {\n    this.m_routeTime = (val * 60);\n    //console.warn(\"set routeTimeHours: \", this.m_routeTime);\n  }\n\n  get routeTimeHoursCalc(): number {\n    let val = this.m_routeTime / 60;\n    //console.warn(\"get routeTimeHours: \", val);\n    return val;\n  }\n\n  set routeTimeHoursCalc(val: number) {\n    let temp = val;\n    if (temp >= 1 && temp <= 168) {\n      val = Math.round(temp);\n    } else {\n      if (temp < 1) val = 1;\n      if (temp > 168) val = 168;\n    }\n    this.m_routeTime = (val * 60);\n    //console.warn(\"set routeTimeHours: \", this.m_routeTime);\n  }\n\n  //Styles\n\n  windowHeight = \"\";\n\n  onWindowHeight() {\n    this.windowHeight = document.documentElement.clientHeight + \"px\";\n  }\n\n  get heightStyle() {\n    return `height:calc(${this.windowHeight} - 230px)`;\n  }\n\n  get dialogStyle() {\n    return `height:calc(${this.windowHeight} - 130px)`;\n  }\n\n  get picHeightStyle() {\n    return `height:calc(${this.windowHeight} - 400px)`;\n  }\n\n  get hoverTheme() {\n    return this.globals.isDarkMode ? 'hover-dark' : 'hover-light';\n  }\n\n  get cardColor() {\n    return this.globals.isDarkMode ? \"#1e1e1e\" : \"#ffffff\";\n  }\n\n  get stepperStyle() {\n    return this.globals.isDisp ? \"width:35%;background-color: transparent;height:60px\" : \"width:30%;background-color: transparent;height:60px\";\n  }\n\n  //#endregion\n\n  //#region Lifecycle\n\n  mounted() {\n    this.globals.checkGeoLocationPerms();\n    this.onWindowHeight();\n    this.routeTimeHours = this.routeTime / 60;\n    if (this.globals.showStartingLocOnlyOnboard)\n    {\n      this.idxTab = 1;\n    }\n  }\n\n  created() {\n    window.addEventListener(\"resize\", this.onWindowHeight, {passive: true});\n  }\n\n  destroyed() {\n    window.removeEventListener(\"resize\", this.onWindowHeight);\n  }\n\n  //#endregion\n\n  //#region User Actions\n\n  enterPress() {\n    if (this.idxTab == 3 && this.idxStep < 5 && (this.globals.checkNotificationOnboard() != 'default' || this.idxStep != 4)) {\n      this.idxStep++;\n    } else if (this.idxStep == 4 && this.globals.checkNotificationOnboard() == 'default') {\n      this.checkNotes();\n    } else if (this.idxTab < 3) {\n      this.idxTab++;\n    } else if (this.idxTab >= 11 && this.idxTab < 14) {\n      this.homeAndSave(this.idxTab);\n    } else if (this.idxTab == 3 && this.idxStep == 5) {\n      this.save();\n    }\n  }\n\n  isValidForm() {\n    let vueForm = this.$refs.form as any;\n    let isValid = vueForm.validate();\n    return isValid;\n  }\n\n  navBack() {\n    if (this.idxTab === OnboardingTab.ConfirmStartLoc ||\n        (this.idxTab === OnboardingTab.StepperDefaults && this.idxStep === OnboardingSteps.Colors)) {\n      this.idxTab--;\n    } else if (this.idxTab === OnboardingTab.StepperDefaults && this.idxStep !== OnboardingSteps.Colors) {\n      this.idxStep--;\n    } else if (this.idxTab > OnboardingTab.StepperDefaults && this.idxTab != 14) {\n      this.idxTab = OnboardingTab.StepperDefaults;\n    } else if (this.idxTab == 14) {\n      this.idxTab = 1;\n    }\n  }\n\n  checkOrConfirmLoc() {\n    switch (this.globals.checkGeoOnboard()) {\n      default:\n      case \"prompt\":\n        this.idxTab = OnboardingTab.PrimeGPSAccess;\n        break;\n\n      case \"granted\":\n        this.updateGPSConfirmationLoc();\n        this.idxTab = 2;\n        break;\n\n      case \"denied\":\n        if (this.settingSpace.startLat === 0 && this.settingSpace.startLng === 0) {\n          this.idxTab = OnboardingTab.PrimeGPSAccess;\n        } else {\n          this.idxTab = OnboardingTab.ConfirmStartLoc;\n        }\n        break;\n    }\n  }\n\n  promptOrChooseLoc() {\n    if (this.defaultLocChoice === 0) {\n      this.promptForGPSPermissions();\n    } else {\n      this.manualPickLocation();\n    }\n  }\n\n  chooseNewLocation() {\n    this.manualPickLocation(false);\n  }\n\n  manualPickLocation(navAfterChoice: boolean = true) {\n    let self = this;\n    let SOURCE = \"RwRouteEdit.showRelo\";\n    this.globals.defaultStartRelo(this.lat, this.lng, true)\n        .then((coord) => {\n          this.lat = coord[0];\n          this.lng = coord[1];\n          this.isLocationSet = true;\n          if (navAfterChoice) {\n            this.idxTab = OnboardingTab.ConfirmStartLoc;\n          }\n        })\n        .catch(err => {\n          RwLog.error(SOURCE, `Unhandled: ${err}`);\n        })\n  }\n\n  onReloPick(coord: RwGeoPoint) {\n    this.globals.onReloPick(coord);\n  }\n\n  promptForGPSPermissions() {\n    //console.log(\"onSearchLocationClick self.isGpsEnabled\", self.isGpsButtonDisabled);\n    this.globals.checkGeoLocationPerms()\n        .then((status) => {\n          //console.log(\"onSearchLocationClick self.isGpsEnabled\", self.isGpsButtonDisabled);\n          if (status && status.state) {\n            switch (status.state) {\n              case \"granted\":\n                this.updateGPSConfirmationLoc();\n                this.idxTab = OnboardingTab.ConfirmStartLoc;\n                break;\n              case \"denied\":\n                this.globals.showSnack(\"Geolocation Permission was previously denied. To enable automatic map centering on your location, \" +\n                    \"you can update your preference in Browser >> Settings >> Permissions >> Location \", \"warning\")\n                break;\n              case \"prompt\":\n                //Permission Priming Goes Here\n                this.idxTab = 14;\n            }\n          }\n        });\n\n  }\n\n  promptLocation() {\n    this.globals.promptForLocationPermission().then(success => {\n      if (success) {\n        this.updateGPSConfirmationLoc();\n        this.idxTab = OnboardingTab.ConfirmStartLoc;\n      } else {\n        this.idxTab = 1;\n        this.defaultLocChoice = 1;\n        this.globals.showSnack(\"Please manually set location.\", 'warning');\n      }\n    })\n  }\n\n  goToStepper() {\n    if (this.lat !== 0 && this.lng !== 0) {\n      const search = new RwTaskSearch();\n      search.getCountryCode(this.lat, this.lng)\n          .then(result => {\n            if (result === \"USA\") {\n              this.units = 1;\n            } else {\n              this.units = 2;\n            }\n          });\n    }\n    this.globals.hasOnboarded = true;\n    this.idxTab = OnboardingTab.StepperDefaults;\n  }\n\n\n  save() {\n    this.globals.hasOnboarded = true;\n    this.settingSpace.stopColor = this.m_stopColor;\n    this.settingSpace.taskColor = this.m_taskColor;\n    this.settingSpace.siteColor = this.m_siteColor;\n    this.settingSpace.optMode = this.m_optMode;\n    this.settingSpace.travelMode = this.m_travelMode;\n    this.settingSpace.isRoundTrip = this.m_isRoundTrip;\n    this.settingSpace.avoids = this.m_avoids;\n    this.settingSpace.distUnits = this.m_units;\n    this.settingSpace.visitTime = this.m_visitTime;\n    this.settingSpace.routeTime = this.m_routeTime;\n    this.settingSpace.startLat = this.m_lat;\n    this.settingSpace.startLng = this.m_lng;\n    this.settingSpace.isDynPoint = this.m_isDynStart;\n    RwPrefUtils.stopColor = this.stopColor;\n    RwPrefUtils.siteColor = this.siteColor;\n    RwPrefUtils.taskColor = this.taskColor;\n    RwPrefUtils.optimizeType = this.optMode;\n    RwPrefUtils.travelMode = this.travelMode;\n    RwPrefUtils.isRoundTrip = this.isRoundTrip;\n    RwPrefUtils.avoids = this.avoids;\n    RwPrefUtils.distUnits = this.units;\n    RwPrefUtils.visitTime = this.visitTime;\n    RwPrefUtils.routeSpan = this.routeTime;\n    RwPrefUtils.startLat = this.lat;\n    RwPrefUtils.startLng = this.lng;\n    RwPrefUtils.isDynPoint = this.isDynStart;\n    this.globals.saveWebPrefs();\n    this.globals.showOnboardSettings = false;\n    this.globals.m_showRouteNew = false;\n    this.globals.createNewRoute();\n    if (this.globals.showPODTutorialOnOnboard) {\n      this.globals.showPODTutorial = true;\n    } else {\n      this.globals.setShowOnboardTipsTimer();\n    }\n  }\n\n  homeAndSave(tab: number) {\n    switch (tab) {\n      case 4:\n        this.settingSpace.stopColor = this.m_stopColor;\n        RwPrefUtils.stopColor = this.stopColor;\n        break;\n      case 5:\n        this.settingSpace.taskColor = this.m_taskColor;\n        RwPrefUtils.taskColor = this.taskColor;\n        break;\n      case 6:\n        this.settingSpace.siteColor = this.m_siteColor;\n        RwPrefUtils.siteColor = this.siteColor;\n        break;\n      case 7:\n        this.settingSpace.distUnits = this.m_units;\n        RwPrefUtils.distUnits = this.units;\n        break;\n      case 8:\n        this.settingSpace.optMode = this.m_optMode;\n        RwPrefUtils.optimizeType = this.optMode;\n        break;\n      case 9:\n        this.settingSpace.travelMode = this.m_travelMode;\n        RwPrefUtils.travelMode = this.travelMode;\n        break;\n      case 10:\n        this.settingSpace.isRoundTrip = this.m_isRoundTrip;\n        RwPrefUtils.isRoundTrip = this.isRoundTrip;\n        break;\n      case 11:\n        this.settingSpace.avoids = this.m_avoids;\n        RwPrefUtils.avoids = this.avoids;\n        break;\n      case 12:\n        this.visitTimeAutoReturn(this.visitTimeInput);\n        break;\n      case 13:\n        this.routeTimeAutoReturn(this.routeTimeHours * 60);\n        break;\n    }\n    if (tab <= 11) {\n      this.globals.saveWebPrefs();\n      setTimeout(this.home, 500);\n    }\n  }\n\n  visitTimeAutoReturn(val: number) {\n    if (this.isValidForm()) {\n      if (val > 0 && val <= 999) {\n        this.visitTime = Math.round(val);\n      } else if (val <= 0) {\n        this.visitTime = 0;\n      } else {\n        this.visitTime = 999;\n      }\n      this.visitTimeInput = this.visitTime;\n      RwPrefUtils.visitTime = this.visitTime;\n      this.settingSpace.visitTime = this.m_visitTime;\n      this.globals.saveWebPrefs();\n      setTimeout(this.home, 500);\n    } else {\n      this.globals.showSnack(\"Please check your inputs and try again\", \"error\");\n    }\n\n  }\n\n  routeTimeAutoReturn(val: number) {\n    if (this.isValidForm()) {\n      RwPrefUtils.routeSpan = val;\n      this.settingSpace.routeTime = val;\n      this.globals.saveWebPrefs();\n      setTimeout(this.home, 500);\n    } else {\n      this.globals.showSnack(\"Please check your inputs and try again\", \"error\");\n    }\n  }\n\n  home() {\n    this.idxTab = 3;\n  }\n\n  onStopClick() {\n    this.idxTab = 4;\n  }\n\n  onTaskClick() {\n    this.idxTab = 5;\n  }\n\n  onSiteClick() {\n    this.idxTab = 6;\n  }\n\n  onUnitsClick() {\n    this.idxTab = 7;\n  }\n\n  onOptModeClick() {\n    this.idxTab = 8;\n  }\n\n  onTravelModeClick() {\n    this.idxTab = 9;\n  }\n\n  onRoundTripClick() {\n    this.idxTab = 10;\n  }\n\n  onAvoidsClick() {\n    this.idxTab = 11;\n  }\n\n  onVisitTimeClick() {\n    this.idxTab = 12;\n  }\n\n  onRouteTimeClick() {\n    this.idxTab = 13;\n  }\n\n  onUnitRadio(val) {\n    if (val == 1) {\n      this.m_units = 1;\n      this.units = 1;\n    } else {\n      this.m_units = 2;\n      this.units = 2;\n    }\n  }\n\n  onOptModeRadio(val) {\n    if (val == 0) {\n      this.m_optMode = 2;\n      this.optMode = 2;\n    } else {\n      this.m_optMode = 1;\n      this.optMode = 1;\n    }\n  }\n\n  onRoundTripRadio(val) {\n    if (val == 0) {\n      this.m_isRoundTrip = false;\n      this.isRoundTrip = false;\n    } else {\n      this.m_isRoundTrip = true;\n      this.isRoundTrip = true;\n    }\n  }\n\n  //#endregion\n\n  //#region Helper APIs\n\n  checkNotes() {\n    const self = this;\n    const SOURCE = \"RwOnboardSettings.checkNotes\";\n    this.idxStep++;\n    if (Notification.permission == 'default') {\n      self.globals.browserNotesRequest();\n    } else {\n      RwLog.warn(SOURCE, `Notification.permission: ${Notification.permission}`)\n    }\n  }\n\n  updateGPSConfirmationLoc() {\n    this.gpsUpdating = true;\n    RwGlobals\n        .getGeolocation()\n        .then((pos) => {\n          //console.log(\"pos\",(pos));\n          this.lat = pos.coords.latitude;\n          this.lng = pos.coords.longitude;\n        })\n        .finally(() => this.gpsUpdating = false);\n  }\n\n  //#endregion\n\n  // get travelModeSelected(): string {\n  //   if (this.travelMode === 'walking') {\n  //     this.m_travelMode = 'walking';\n  //     return 'Walk';\n  //   }\n  //   else if (this.travelMode === 'driving') {\n  //     this.m_travelMode = 'driving';\n  //     return 'Drive';\n  //   }\n  //   else {\n  //     this.m_travelMode = 'bicycling';\n  //     return 'Bike'\n  //   }\n  // }\n  //\n  // set travelModeSelected(val: string) {\n  //   if (val == 'Walk') {\n  //     this.m_travelMode = 'walking';\n  //   }\n  //   else if (val === 'Drive') {\n  //     this.m_travelMode = 'driving';\n  //   }\n  //   else {\n  //     this.m_travelMode = 'bicycling';\n  //   }\n  // }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwOnboardSettings.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwOnboardSettings.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwOnboardSettings.vue?vue&type=style&index=0&id=c8271a42&prod&scoped=true&lang=scss&\"","import { render, staticRenderFns } from \"./RwOnboardSettings.vue?vue&type=template&id=c8271a42&scoped=true&\"\nimport script from \"./RwOnboardSettings.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwOnboardSettings.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwOnboardSettings.vue?vue&type=style&index=0&id=c8271a42&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"c8271a42\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"scrollable\":\"\",\"persistent\":\"\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\",\"max-width\":\"600px\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.escPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.enterPress.apply(null, arguments)}]},model:{value:(_vm.globals.showDeleteDriver),callback:function ($$v) {_vm.$set(_vm.globals, \"showDeleteDriver\", $$v)},expression:\"globals.showDeleteDriver\"}},[_c(VCard,{attrs:{\"max-height\":\"350px\"}},[_c(VToolbar,{attrs:{\"max-height\":\"48px\",\"dense\":\"\",\"color\":_vm.globals.backColorBar}},[_c(VImg,{attrs:{\"height\":\"32px\",\"width\":\"32px\",\"contain\":\"\",\"max-width\":\"56px\",\"src\":_vm.selectedDriver.imageUrl}}),_c(VToolbarTitle,[_vm._v(\"Delete User - \"+_vm._s(_vm.selectedDriver.formatDisplayName))])],1),_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme},[_c(VTabs,{attrs:{\"grow\":\"\",\"solo-inverted\":\"\"},model:{value:(_vm.idxTab),callback:function ($$v) {_vm.idxTab=$$v},expression:\"idxTab\"}},[_c(VTabItem,{key:\"0\"},[_c('span',{staticClass:\"popupText\"},[_vm._v(\" Are you sure you want to delete \"+_vm._s(_vm.selectedDriver.userName)+\"? \"),_c('b',[_vm._v(\"This action cannot be undone,\"),_c('br'),_vm._v(\" and any new Users you create this month will be billed as a new User.\")]),_c('br'),_c('br'),_vm._v(\" If you'd instead like to swap this User's credentials and keep the User,\"),_c('b',[_vm._v(\" please Replace your User instead.\")])])]),_c(VTabItem,{key:\"1\"},[_c('span',{staticClass:\"popupText\"},[_vm._v(\" This will permanently delete \"+_vm._s(_vm.selectedDriver.userName)+\"'s account, and cannot be undone. \")])])],1)],1),_c(VCardActions,[_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.globals.showDeleteDriver = false}}},[_vm._v(\"Cancel\")]),_c(VSpacer),(_vm.isFirstTab)?_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":_vm.onClickDeleteDriver}},[_vm._v(\"Delete User\")]):_vm._e(),(_vm.isFirstTab)?_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){_vm.globals.showReplaceDriver=true, _vm.globals.showDeleteDriver=false}}},[_vm._v(\"Replace User \")]):_vm._e(),(!_vm.isFirstTab)?_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.onClickDeleteDriver}},[_vm._v(\"Delete User\")]):_vm._e()],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport theDriverSpace, {RwDriverSpace} from \"@/app/views/drivers/RwDriverSpace\";\nimport {RwUser} from \"@/app/dem/RwUser\";\nimport {RwTaskLicense} from \"@/app/dal/RwTaskLicense\";\nimport theStore from \"@/store\"\nimport {RwConstants} from \"@/app/RwConstants\";\n\n@Component\nexport default class RwDeleteDriver extends Vue {\n\n  _idxTab = 0;\n\n  get idxTab(): number {\n    let tab = (this.globals.showDeletePrompt) ? 0 : 1;\n    this.$data._idxTab = tab;\n    return this.$data._idxTab;\n  }\n\n  set idxTab(val: number) {\n    this._idxTab = val;\n  }\n\n  get driverSpace(): RwDriverSpace {\n    return theDriverSpace;\n  }\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n\n  get selectedDriver(): RwUser {\n    //console.warn(\"RwDriverEdit get selectedDriver\", this.driverSpace.selectedDriver.name);\n    return theStore.getters.selectedDriver;\n  }\n\n  set selectedDriver(val: RwUser) {\n    theStore.dispatch(\"selectedDriver\", val);\n  }\n\n  escPress(event: Event) {\n    event.stopPropagation();\n    this.globals.showDeleteDriver = false;\n    //!//this.driverSpace.showDeleteDriver = false;\n    // this.saveDriverChanges();\n  }\n\n  enterPress(event: Event) {\n    event.stopPropagation();\n\n    //!//this.driverSpace.showDeleteDriver = false;\n    if (this.isFirstTab) {\n      this.globals.showReplaceDriver = true;\n      this.globals.showDeleteDriver = false;\n      //!//this.driverSpace.showReplaceDriver=true;\n      //!//this.driverSpace.showDeleteDriver=false;\n    } else {\n      this.onClickDeleteDriver();\n    }\n    // this.saveDriverChanges();\n  }\n\n\n  get isFirstTab(): boolean {\n    return this.idxTab === 0;\n  }\n\n  onClickDeleteDriver() {\n    let self = this;\n    this.driverSpace.showDeleteDriver = false;\n    if (!this.selectedDriver || this.selectedDriver.userId === RwConstants.EmptyGuid) {\n      this.globals.showSnack(\"Driver is Not Selected\", \"error\");\n      return;\n    }\n    RwTaskLicense.deleteDriver(this.selectedDriver.userId)\n        .then(success => {\n          let isRemoved = self.globals.removeDriver(this.selectedDriver.userId);\n          if (isRemoved) {\n            this.$gtm.trackEvent({\n              event: 'flex-user-remove'\n            });\n            this.selectedDriver = null;\n            this.globals.showDeleteDriver = false;\n            this.globals.showSnack(\"User Deleted\", \"success\");\n            //!//this.driverSpace.selectedDriver = null;\n          }\n        })\n        .catch(err => {\n          this.globals.showSnack(\"Failed to Delete User\", \"error\");\n        });\n  }\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwDeleteDriver.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwDeleteDriver.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwDeleteDriver.vue?vue&type=template&id=b8cfbe2c&scoped=true&\"\nimport script from \"./RwDeleteDriver.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwDeleteDriver.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"b8cfbe2c\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VDialog,{attrs:{\"scrollable\":\"\",\"persistent\":\"\",\"max-width\":\"600px\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.escPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;_vm.password.length > 3 ? _vm.onPassChange(_vm.password) : _vm.editPasswordDialog = false}]},model:{value:(_vm.globals.showEditDriverPass),callback:function ($$v) {_vm.$set(_vm.globals, \"showEditDriverPass\", $$v)},expression:\"globals.showEditDriverPass\"}},[_c(VCard,{attrs:{\"max-height\":\"325px\"}},[_c(VToolbar,{attrs:{\"dense\":\"\",\"max-height\":\"48px\",\"color\":_vm.globals.backColorBar}},[_c(VImg,{attrs:{\"height\":\"32px\",\"width\":\"32px\",\"contain\":\"\",\"max-width\":\"56px\",\"src\":_vm.selectedDriver.imageUrl}}),_c(VToolbarTitle,[_vm._v(\"Change Password\")])],1),_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme},[_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('div',{staticClass:\"text-left\"},[_c('div',{staticClass:\"popupText\"},[_c('p',{staticClass:\"text-wrap\"},[_vm._v(\" Changing your User's password may immediately log them out on any active devices. Ensure your Users don't have a Route in-progress before proceeding. \")])])])]),_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\"}},[(_vm.globals.showEditDriverPass)?_c(VTextField,{ref:\"pwFocus\",attrs:{\"autofocus\":\"\",\"id\":\"pwFocus\",\"required\":\"\",\"rules\":_vm.passwordRules,\"label\":\"New Password\",\"type\":\"password\",\"dense\":\"\",\"autocomplete\":\"one-time-code\"},model:{value:(_vm.password),callback:function ($$v) {_vm.password=$$v},expression:\"password\"}}):_vm._e()],1)],1),_c(VCardActions,[_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.globals.showEditDriverPass=false}}},[_vm._v(\"Cancel\")]),_c(VBtn,{attrs:{\"text\":\"\",\"disabled\":_vm.password.length<4,\"color\":\"primary\"},on:{\"click\":function($event){return _vm.onPassChange(_vm.password)}}},[_vm._v(\"Save\")])],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport {RwUser} from \"@/app/dem/RwUser\";\nimport {RwTaskDriver} from \"@/app/dal/RwTaskDriver\";\nimport theStore from \"@/store\"\nimport {RwLog} from \"@/app/dal/RwLog\";\n\n@Component\nexport default class RwDriverPassEdit extends Vue {\n\n  password: string = \"\";\n\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get passwordRules(): any[] {\n    if (this.password) {\n      return [v => v.length >= 4 || 'Minimum 4 characters.'];\n    }\n  }\n\n  // get driverSpace(): RwDriverSpace {\n  //     return theDriverSpace;\n  // }\n\n  get selectedDriver(): RwUser {\n    return theStore.getters.selectedDriver;\n  }\n\n  set selectedDriver(val: RwUser) {\n    theStore.dispatch(\"selectedDriver\", val);\n  }\n\n  escPress(event: Event) {\n    event.stopPropagation();\n    this.globals.showEditDriverPass = false;\n\n  }\n\n  onPassChange(newPass: string) {\n    const SOURCE = \"RwDriverPassEdit.onPassChange\";\n    let uid = this.selectedDriver.userId;\n    this.globals.showEditDriverPass = false;\n    RwTaskDriver.changeDriverPassword(uid, newPass)\n        .then(() => {\n          this.globals.userPass = newPass;\n          this.globals.showSnack(\"Password Updated\", \"success\")\n        })\n        .catch((err) => {\n          if (theGlobals.checkNotHandled(err)) {\n            let status = err.status;\n            if (status !== 403 && status !== 401) {\n              RwLog.error(SOURCE, `Unhandled: driverUserId:${uid}, driverNewPassword:${newPass} \\n\\nerror:${JSON.stringify(err)} `);\n            }\n          }\n          this.globals.showSnack(\"Failed to Update Password\", \"error\")\n        });\n  }\n\n  mounted() {\n    const self = this;\n    //console.log(\"activated\");\n\n    setTimeout(function () {\n      self.$nextTick(function () {\n        (self.$refs.pwFocus as HTMLInputElement).focus();\n      });\n    }, 100);\n\n  }\n\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwDriverPassEdit.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwDriverPassEdit.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwDriverPassEdit.vue?vue&type=template&id=1f69be6a&scoped=true&\"\nimport script from \"./RwDriverPassEdit.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwDriverPassEdit.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1f69be6a\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VDialog,{attrs:{\"scrollable\":\"\",\"persistent\":\"\",\"max-width\":\"600px\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.escPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;_vm.userNameSuffix.length > 3 ? _vm.onUNameChange() : _vm.globals.showEditDriverUname = false}]},model:{value:(_vm.globals.showEditDriverUname),callback:function ($$v) {_vm.$set(_vm.globals, \"showEditDriverUname\", $$v)},expression:\"globals.showEditDriverUname\"}},[_c(VCard,{attrs:{\"max-height\":\"400px\"}},[_c(VToolbar,{attrs:{\"dense\":\"\",\"max-height\":\"48px\",\"color\":_vm.globals.backColorBar}},[_c(VImg,{attrs:{\"height\":\"32px\",\"width\":\"32px\",\"contain\":\"\",\"max-width\":\"56px\",\"src\":_vm.selectedDriver.imageUrl}}),_c(VToolbarTitle,[_vm._v(\"Change \"+_vm._s(_vm.selectedDriver.name)+\"'s Username\")])],1),_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme},[_c(VRow,[_c(VCol,[_c('div',{staticClass:\"pa-3 pb-0\"},[_vm._v(\"Changing your User's username will log them out on next sync. Ensure your User isn't on a Route before proceeding. \")])])],1),_c(VForm,{ref:\"form\",staticClass:\"pa-3 pb-0\",attrs:{\"lazy-validation\":\"\"},on:{\"submit\":function($event){$event.preventDefault();}},model:{value:(_vm.valid),callback:function ($$v) {_vm.valid=$$v},expression:\"valid\"}},[_c(VRow,{staticClass:\"ma-4\",attrs:{\"justify\":\"center\",\"align\":\"center\"}},[_c(VTextField,{ref:\"field\",attrs:{\"filled\":\"\",\"prefix\":_vm.teamDomainDot,\"autofocus\":\"\",\"hint\":\"User will use this to log in. Team domain will affix to front of each username.\",\"label\":\"Username\",\"rules\":_vm.userNameRules,\"dense\":\"\",\"clearable\":\"\"},model:{value:(_vm.userNameSuffix),callback:function ($$v) {_vm.userNameSuffix=$$v},expression:\"userNameSuffix\"}})],1)],1)],1),_c(VCardActions,[_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.globals.showEditDriverUname=false}}},[_vm._v(\"Cancel\")]),_c(VBtn,{attrs:{\"text\":\"\",\"disabled\":!_vm.valid,\"color\":\"primary\"},on:{\"click\":function($event){return _vm.onUNameChange()}}},[_vm._v(\"Save\")])],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport theDriverSpace, {RwDriverSpace} from \"@/app/views/drivers/RwDriverSpace\";\nimport {RwUser} from \"@/app/dem/RwUser\";\nimport theStore from \"@/store\"\nimport {RwTaskLicense} from \"@/app/dal/RwTaskLicense\";\nimport {RwLog} from \"@/app/dal/RwLog\";\n\n@Component\nexport default class RwDriverUnameEdit extends Vue {\n\n\n  valid: boolean = false;\n\n  m_teamDomainDot: string;\n  m_userNameSuffix: string;\n\n  initialUserName: string = this.selectedDriver.userName;\n  //\n  // get initialUserName(): string {\n  //   return this.selectedDriver.userName;\n  // }\n\n  get userNameRules(): any[] {\n    if (this.userNameSuffix) {\n      return [\n        v => v.length >= 4 && v != this.initialUserNameSuffix || 'Minimum 4 characters; new username must not match current username.',\n        v => v.length <= 16 || 'Username must not exceed 16 characters.',\n        v => this.globals.isAlpha(v) || 'Username must be alphanumeric.',\n        v => (this.driversUsernames.indexOf(v.toLowerCase()) == -1) || 'Username already in use.'\n      ];\n    }\n  }\n\n  //#region globals/space setup\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get driverSpace(): RwDriverSpace {\n    return theDriverSpace;\n  }\n\n  get selectedDriver(): RwUser {\n    return theStore.getters.selectedDriver;\n  }\n\n  set selectedDriver(val: RwUser) {\n    theStore.dispatch(\"selectedDriver\", val);\n  }\n\n  get driversUsernames(): string[] {\n    const unames = [];\n    for (let driver of this.globals.drivers) {\n      if (driver.userId != this.selectedDriver.userId) unames.push(driver.userName.toLowerCase().replace(this.teamDomainDot.toLowerCase(), ''));\n    }\n    return unames;\n  }\n\n  get userNameSuffix(): string {\n    if (!this.m_userNameSuffix) {\n      //console.warn(\"get userNameSuffix userName\", this.selectedDriver.userName);\n      if (this.selectedDriver.userName.includes(\"@\")) {\n        this.m_userNameSuffix = this.selectedDriver.userName.substring(0, this.selectedDriver.userName.lastIndexOf(\"@\") - 1);\n      } else {\n        this.m_userNameSuffix = this.selectedDriver.userName.substring(this.selectedDriver.userName.lastIndexOf(\".\") + 1);\n      }\n    }\n    // console.warn('get this.userNameSuffix: ', this.m_userNameSuffix);\n    // console.warn ('this.initialUserNameSuffix: ', this.initialUserNameSuffix);\n    return this.m_userNameSuffix;\n  }\n\n  set userNameSuffix(val: string) {\n    // console.warn('usernameSuffix being set: ', this.m_userNameSuffix);\n    // console.warn('initialUserNameSuffix should still be:', this.initialUserNameSuffix);\n    this.m_userNameSuffix = val;\n  }\n\n  get teamDomainDot(): string {\n    if (!this.m_teamDomainDot) {\n      if (this.globals.isSubTeam) {\n        this.m_teamDomainDot = this.globals.teamDomain + \".\" + this.globals.subDomain + \".\";\n        //console.warn(\"this.globals.isSubTeam==TRUE: \", this.m_teamDomainDot);\n      } else {\n        this.m_teamDomainDot = this.globals.teamDomain + \".\";\n        //console.warn(\"this.globals.isSubTeam==FALSE: \", this.m_teamDomainDot);\n      }\n    }\n    //console.warn(\"this.teamDomainDot gotten:\", this.m_teamDomainDot);\n    return this.m_teamDomainDot;\n  }\n\n  get initialUserNameSuffix(): string {\n    return this.selectedDriver.userName.substring(this.selectedDriver.userName.lastIndexOf(\".\") + 1);\n  }\n\n\n  onUNameChange() {\n    let self = this;\n    let SOURCE = \"RwDriverEdit.onUnameChange\";\n    let unString: string = null;\n    let isValidForm = this.isValidForm();\n    if (isValidForm) {\n      // if ((this.$refs.form as Vue & { validate: () => boolean }).validate()) {\n      const fullyQualUN = this.m_teamDomainDot + this.m_userNameSuffix;\n      const existingDriverUN = this.globals.drivers.find(d => d.userName.toLowerCase() === fullyQualUN.toLowerCase());\n      if (!existingDriverUN) {\n        this.globals.showEditDriverUname = false;\n        this.selectedDriver.userName = this.m_teamDomainDot + this.m_userNameSuffix;\n        unString = this.m_userNameSuffix;\n        if (this.initialUserName != this.selectedDriver.userName) {\n          // console.warn ('passed if statement: initial username != new username');\n          //update username\n          RwTaskLicense.changeDriverUsername(this.selectedDriver.userId, unString)\n              .then(() => {\n                self.selectedDriver.lastUpdated = new Date();\n                self.globals.commitDrivers();\n                self.globals.showSnack(\"Driver Updated\", \"success\");\n              })\n              .catch(err => {\n                this.selectedDriver.userName = this.initialUserNameSuffix;\n                RwLog.consoleError(SOURCE, \"WTF: update error\", err.toString());\n                self.globals.showSnack(\"Failed to Update Driver\", \"error\");\n              });\n        }\n      } else {\n        this.globals.showSnack(\"You already have a driver with this username, please choose another.\", \"error\");\n      }\n    }\n  }\n\n  isValidForm() {\n    let vueForm = this.$refs.form as any;\n    let isValid = vueForm.validate();\n    //TODO: Remove doublecheck validation after monitoring if vue form validation is not the issue\n    if (isValid) {\n      const alphaRegex = /^[a-zA-Z0-9_]+$/;\n      if (!this.userNameSuffix.match(alphaRegex)) {\n        isValid = false;\n        RwLog.error(\"RwDriverUnameEdit.isValidForm\", `form validation not catching invalid username, ${this.userNameSuffix}`);\n      }\n    }\n\n    return isValid;\n  }\n\n  escPress(event: Event) {\n    event.stopPropagation();\n    this.globals.showEditDriverUname = false;\n  }\n\n  mounted() {\n    const self = this;\n    //console.log(\"activated\");\n\n\n    setTimeout(function () {\n      self.$nextTick(function () {\n        (self.$refs.field as HTMLInputElement).focus();\n      });\n    }, 100);\n\n  }\n\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwDriverUnameEdit.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwDriverUnameEdit.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwDriverUnameEdit.vue?vue&type=template&id=50335d2d&scoped=true&\"\nimport script from \"./RwDriverUnameEdit.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwDriverUnameEdit.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"50335d2d\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VCard,{staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},attrs:{\"height\":\"100\"}},[_c(VToolbar,{attrs:{\"color\":_vm.globals.backColorBar,\"dense\":\"\",\"max-height\":\"48px\"}},[(_vm.selectedDriver)?_c(VImg,{attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"max-width\":\"56px\",\"src\":_vm.selectedDriver.imageUrl}}):_vm._e(),_c(VToolbarTitle,{staticClass:\"ml-2\"},[_vm._v(\" \"+_vm._s(_vm.selectedDriver ? _vm.selectedDriver.formatDisplayName : \"Select User\")+\" \")]),_c(VSpacer),(_vm.selectedDriver)?_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.launchEditDriver.apply(null, arguments)}}},on),[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1)]}}],null,false,104467817)},[_c('span',[_vm._v(\"Edit User\")])]):_vm._e(),(_vm.selectedDriver)?_c(VMenu,{scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"}},on),[_c(VIcon,[_vm._v(\"mdi-dots-vertical\")])],1)]}}],null,false,2097855828)},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VListItem,{on:{\"click\":_vm.launchEditUname}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-textbox\")])],1),_c(VListItemTitle,[_vm._v(\"Change Username\")])],1),_c(VListItem,{on:{\"click\":_vm.launchEditPassword}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-textbox-password\")])],1),_c(VListItemTitle,[_vm._v(\"Change Password\")])],1),_c(VListItem,{on:{\"click\":_vm.onPickClick}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-access-point\")])],1),_c(VListItemTitle,[_vm._v(\"Push Test\")])],1),_c(VListItem,{on:{\"click\":_vm.launchReplaceDriver}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-account-convert\")])],1),_c(VListItemTitle,[_vm._v(\"Replace User\")])],1),_c(VListItem,{on:{\"click\":_vm.launchDeleteDriver}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,[_vm._v(\"Delete User\")])],1),_c(VDivider),(!_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onDock()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-dock-right\")])],1),_c(VListItemTitle,[_vm._v(\"Dock Window\")])],1):_vm._e(),(_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onPop()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-open-in-new\")])],1),_c(VListItemTitle,[_vm._v(\"Float Panel\")])],1):_vm._e(),(_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onCloseDock()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close-box\")])],1),_c(VListItemTitle,[_vm._v(\"Close Panel\")])],1):_vm._e(),(!_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onClosePop()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close-box\")])],1),_c(VListItemTitle,[_vm._v(\"Close Window\")])],1):_vm._e()],1)],1):_vm._e()],1),(_vm.driver)?_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme,staticStyle:{\"height\":\"calc(100% - 48px)\",\"width\":\"100%\",\"overflow-y\":\"auto\"}},[_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\"Name:\")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.selectedDriver.name)+\" \")])]),_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Username: \"),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({staticClass:\"mb-2\",attrs:{\"color\":\"#555\",\"icon\":\"\",\"text\":\"\",\"small\":\"\"}},on),[_vm._v(\"mdi-information-outline\")])]}}],null,false,1738710592)},[_c('span',{staticClass:\"labelText\"},[_vm._v(\"Users will use this to log-in.\")])])],1),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.selectedDriver.userName)+\" \")])]),_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Access Type: \"),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({staticClass:\"mb-2\",attrs:{\"color\":\"#555\",\"icon\":\"\",\"small\":\"\"}},on),[_vm._v(\"mdi-information-outline\")])]}}],null,false,1221178571)},[_c('span',{staticClass:\"labelText\"},[_c('b',[_vm._v(\"Normal and restricted users\")]),_vm._v(\" cannot delete Routes,\"),_c('br'),_vm._v(\" \"),_c('b',[_vm._v(\"Elevated Users and Dispatchers\")]),_vm._v(\" can.\")])])],1),(_vm.selectedDriver)?_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.selectedDriver.formatAccessType == 'Unknown' ? 'Restricted Driver' : _vm.selectedDriver.formatAccessType)+\" \")]):_vm._e()]),(_vm.driver.email)?_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\"Email: \"),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({staticClass:\"mb-2\",attrs:{\"color\":\"#555\",\"icon\":\"\",\"text\":\"\",\"small\":\"\"}},on),[_vm._v(\"mdi-information-outline\")])]}}],null,false,1738710592)},[_c('span',{staticClass:\"labelText\"},[_vm._v(\"Not for logging in. \"),_c('br'),_vm._v(\" Users should use their username to log-in.\")])])],1),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.selectedDriver.email)+_vm._s(_vm.selectedDriver.email ? \" \" : \"no email registered\")+\" \")])]):_vm._e()],1):_vm._e(),(_vm.globals.showDeleteDriver)?_c('RwDeleteDriver'):_vm._e(),(_vm.globals.showReplaceDriver)?_c('RwReplaceDriver'):_vm._e(),(_vm.globals.showEditDriverPass)?_c('RwDriverPassEdit'):_vm._e(),(_vm.globals.showEditDriverUname)?_c('RwDriverUnameEdit'):_vm._e(),(_vm.globals.showPingTest)?_c('RwPingTest'):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport theStore from \"@/store\"\nimport {Component, Prop, Vue, Watch} from \"vue-property-decorator\";\nimport {RwUser} from \"@/app/dem/RwUser\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport theDriverSpace, {RwDriverSpace} from \"@/app/views/drivers/RwDriverSpace\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport RwDriverPassEdit from \"@/app/views/drivers/RwDriverPassEdit.vue\";\nimport RwDriverUnameEdit from \"@/app/views/drivers/RwDriverUnameEdit.vue\";\nimport RwDeleteDriver from \"@/app/views/drivers/RwDeleteDriver.vue\";\nimport RwReplaceDriver from \"@/app/views/drivers/RwReplaceDriver.vue\";\nimport RwPingTest from \"@/app/views/drivers/RwPingTest.vue\";\n\n\n@Component({\n  components: {\n    RwPingTest,\n    RwDriverPassEdit,\n    RwReplaceDriver,\n    RwDeleteDriver,\n    RwDriverUnameEdit,\n  }\n})\nexport default class RwDriverView extends Vue {\n  @Prop(Boolean) readonly isPopup: boolean;\n  @Prop(RwUser) readonly driver: RwUser;\n\n  overlay = true;\n  absolute = true;\n  opacity = 0.75;\n\n  _name: string = \"\";\n  _email: string = \"\";\n  _accessType: number = 0;\n  profileImage: string = \"profileImage\";\n  password: string = \"\";\n  deleteDriverDialog: boolean = false;\n  teamDomain: string = \"\";\n  teamDomainDot: string = \"\";\n\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get driverSpace(): RwDriverSpace {\n    return theDriverSpace;\n  }\n\n  get isDocked(): boolean {\n    return !this.isPopup;\n  }\n\n  get selectedDriver(): RwUser {\n    return this.driver;\n  }\n\n  get isDarkMode(): boolean {\n    return this.globals.isDarkMode;\n  }\n\n\n  @Watch(\"selectedDriver\")\n  watchShowEdit(val: RwUser) {\n    //RwLog.consoleWarn(`RwUserInfoEdit.watchShowEdit`, val);\n    if (this.driver) {\n      this.accessType = val.accessType - 1;\n      this.selectedDriver.userName = val.userName;\n      this.selectedDriver.name = val.name;\n      this.selectedDriver.email = val.email;\n    }\n\n  }\n\n\n  launchEditDriver() {\n    this.teamDomain = this.globals.teamDomain;\n    this.teamDomainDot = this.globals.teamDomain + \".\";\n    this.globals.showDriverEdit(this.driver)\n    this.onClosePop();\n  }\n\n\n  get name(): string {\n    if (!this._name) {\n      this._name = this.selectedDriver.name;\n    }\n    return this._name;\n  }\n\n  set name(val: string) {\n    this._name = val\n  }\n\n  get email(): string {\n    if (!this._email) {\n      this._email = this.selectedDriver.email;\n    }\n    return this._email;\n  }\n\n  set email(val: string) {\n    this._email = val;\n  }\n\n  get accessType(): number {\n    if (!this._accessType) {\n      this._accessType = this.selectedDriver.accessType;\n    }\n    return this._accessType;\n  }\n\n  set accessType(val: number) {\n    this._accessType = val;\n  }\n\n  launchEditUname() {\n    this.globals.showEditDriverUname = true;\n    theStore.dispatch(\"showEditDriverUname\", true);\n    this.onClosePop();\n  }\n\n  launchEditPassword() {\n    this.globals.showEditDriverPass = true;\n    theStore.dispatch(\"showEditDriverPass\", true);\n    this.onClosePop();\n  }\n\n  // launchEditPhoto() {\n  //   //DEFER: Deal with Coupling of AvatarEdit & DriverEdit\n  //   //DEFER: Punt by eliminating action from View\n  //   this.globals.showDriverEdit(this.driver)\n  //   // theStore.dispatch(\"showEditDriver\", true);\n  //   // theStore.dispatch(\"showEditAvatar\", true);\n  //   // this.globals.showEditAvatar = true;\n  //   // this.globals.showEditDriver = true;\n  //   this.onClosePop();\n  // }\n\n  onPickClick() {\n    let showPopup = RwPrefUtils.hidePingPopup == false;\n    if (showPopup) {\n      theStore.dispatch(\"showPingTest\", true);\n      this.globals.showPingTest = true;\n      //!//this.driverSpace.showPingTest = true;\n    } else {\n      this.driverSpace.pingDriver();\n    }\n    this.onClosePop();\n  }\n\n  launchReplaceDriver() {\n    this.deleteDriverDialog = false;\n    this.teamDomain = this.globals.teamDomain;\n    this.teamDomainDot = this.globals.teamDomain + \".\";\n    theStore.dispatch(\"showReplaceDriver\", true);\n    this.globals.showReplaceDriver = true;\n    this.onClosePop();\n  }\n\n  launchDeleteDriver() {\n    if (this.globals.enablePurchaseOps) {\n      this.deleteDriverDialog = true;\n      let showPopup = RwPrefUtils.hideDeletePopup == false;\n      if (showPopup) {\n        theStore.dispatch(\"showDeletePrompt\", true);\n        this.globals.showDeletePrompt = true;\n        //!//this.driverSpace.showDeletePrompt = true;\n      } else {\n        theStore.dispatch(\"showDeletePrompt\", false);\n\n        this.globals.showDeletePrompt = false;\n        //!//this.driverSpace.showDeletePrompt = false;\n      }\n      theStore.dispatch(\"showDeletePrompt\", true);\n      this.globals.showDeleteDriver = true;\n      this.onClosePop();\n    } else {\n      this.globals.showConfirmDialog(\"Add/Remove drivers temporarily disabled in Beta\",\n          \"Adding and removing drivers is temporarily disabled in the RoadWarrior Beta, please use legacy Team for now\" +\n          \" if you need to add or remove drivers.\", \"Ok\", \"\");\n    }\n  }\n\n  onPop() {\n    this.$emit(\"onPop\");\n  }\n\n  onDock() {\n    this.$emit(\"onDock\");\n  }\n\n  onClosePop() {\n    this.$emit(\"onClosePop\");\n  }\n\n  onCloseDock() {\n    this.$emit(\"onCloseDock\");\n  }\n\n  onDeleted() {\n    this.$emit(\"onDeleted\");\n  }\n\n  finalLength: string = this.detMaxTextLength();\n\n  detMaxTextLength(): string {\n    let length = window.innerWidth;\n    if (this.isPopup == true) {\n      length = 600\n    } else {\n      length = (length > 1000) ? Math.floor(length * 0.3) - 150 : length;\n    }\n    let output = \"max-width: \" + length.toString() + \"px\";\n    this.finalLength = output;\n\n    return output;\n  }\n\n  mounted() {\n    window.addEventListener('resize', this.detMaxTextLength);\n  }\n\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwDriverView.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwDriverView.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwDriverView.vue?vue&type=style&index=0&id=279fb012&prod&scoped=true&lang=scss&\"","import { render, staticRenderFns } from \"./RwDriverView.vue?vue&type=template&id=279fb012&scoped=true&\"\nimport script from \"./RwDriverView.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwDriverView.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwDriverView.vue?vue&type=style&index=0&id=279fb012&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"279fb012\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCheckbox } from 'vuetify/lib/components/VCheckbox';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VDialog,{attrs:{\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\",\"scrollable\":\"\",\"persistent\":\"\",\"max-width\":\"600px\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.escPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.enterPress.apply(null, arguments)}]},model:{value:(_vm.globals.showPingTest),callback:function ($$v) {_vm.$set(_vm.globals, \"showPingTest\", $$v)},expression:\"globals.showPingTest\"}},[_c(VCard,{attrs:{\"max-height\":\"400\"}},[_c(VToolbar,{attrs:{\"max-height\":\"48px\",\"color\":_vm.globals.backColorBar,\"dense\":\"\"}},[_c(VImg,{attrs:{\"height\":\"32px\",\"width\":\"32px\",\"contain\":\"\",\"max-width\":\"56px\",\"src\":_vm.selectedDriver.imageUrl}}),_c(VToolbarTitle,[_vm._v(\"Push Test for \"+_vm._s(_vm.selectedDriver.formatDisplayName))])],1),_c(VCardText,{staticClass:\"popupText mt-2\",class:_vm.globals.theme},[_c('br'),_vm._v(\" The Push Test is designed to help troubleshoot connection issues to the selected Driver's mobile device.\"),_c('br'),_c('br'),_vm._v(\" Click \"),_c('b',[_vm._v(\"Ping\")]),_vm._v(\" below to test your connection. This may take several minutes depending on the mobile device's connectivity.\"),_c('br'),_c('br'),_c('b',[_vm._v(\"You may continue to work while this test runs\")]),_vm._v(\", a result will appear as a popup at the bottom of your screen when the ping is complete. \"),_c('br'),_c('br'),_c(VCheckbox,{attrs:{\"label\":\"Got it, do not show this again.\"},model:{value:(_vm.globals.hidePingPopup),callback:function ($$v) {_vm.$set(_vm.globals, \"hidePingPopup\", $$v)},expression:\"globals.hidePingPopup\"}})],1),_c(VCardActions,[_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.globals.showPingTest=false}}},[_vm._v(\"Cancel\")]),_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){return _vm.driverSpace.pingDriver()}}},[_vm._v(\"Ping\")])],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport theDriverSpace, {RwDriverSpace} from \"@/app/views/drivers/RwDriverSpace\";\nimport {RwUser} from \"@/app/dem/RwUser\";\n\n@Component\nexport default class RwAvatarEdit extends Vue {\n\n  get driverSpace(): RwDriverSpace {\n    return theDriverSpace;\n  }\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get selectedDriver(): RwUser {\n    return this.globals.selectedDriver;\n  }\n\n  set selectedDriver(val: RwUser) {\n    this.globals.selectedDriver = val;\n  }\n\n  escPress(event: Event) {\n    event.stopPropagation();\n    this.globals.showPingTest = false;\n\n  }\n\n  enterPress(event: Event) {\n    event.stopPropagation();\n    this.driverSpace.pingDriver();\n    this.globals.showPingTest = false;\n  }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPingTest.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPingTest.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwPingTest.vue?vue&type=template&id=87ca5f32&scoped=true&\"\nimport script from \"./RwPingTest.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPingTest.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"87ca5f32\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VDialog,{staticStyle:{\"max-height\":\"650px\"},attrs:{\"persistent\":\"\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\",\"max-width\":\"600px\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.escPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.enterPress.apply(null, arguments)}]},model:{value:(_vm.globals.showReplaceDriver),callback:function ($$v) {_vm.$set(_vm.globals, \"showReplaceDriver\", $$v)},expression:\"globals.showReplaceDriver\"}},[_c(VCard,[_c(VToolbar,{attrs:{\"elevation\":\"0\",\"dense\":\"\",\"max-height\":\"48px\",\"color\":_vm.globals.backColorBar}},[_c(VImg,{attrs:{\"height\":\"32px\",\"width\":\"32px\",\"contain\":\"\",\"max-width\":\"56px\",\"src\":_vm.selectedDriver.imageUrl}}),_c(VToolbarTitle,[_vm._v(\"Replace User \"+_vm._s(_vm.selectedDriver.formatDisplayName))])],1),_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme},[_c('br'),_c('span',{staticClass:\"popupText\"},[_vm._v(\"Replacing a User will log out the old User immediately, and cannot be undone.\")]),_c('br'),_c('br'),_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c(VTextField,{attrs:{\"filled\":\"\",\"autofocus\":\"\",\"dense\":\"\",\"label\":\"New Driver Name\",\"rules\":_vm.nameRules,\"required\":\"\"},model:{value:(_vm.name),callback:function ($$v) {_vm.name=$$v},expression:\"name\"}})],1),_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c(VTextField,{attrs:{\"filled\":\"\",\"label\":\"New Username\",\"counter\":\"16\",\"prefix\":_vm.teamDomainDot,\"rules\":_vm.userNameRules,\"hint\":\"Must be different \",\"required\":\"\"},model:{value:(_vm.userNameSuffix),callback:function ($$v) {_vm.userNameSuffix=$$v},expression:\"userNameSuffix\"}})],1),_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c(VTextField,{attrs:{\"dense\":\"\",\"label\":\"New Password\",\"type\":\"password\",\"hint\":\"minimum 4 characters\",\"required\":\"\",\"filled\":\"\"},model:{value:(_vm.password),callback:function ($$v) {_vm.password=$$v},expression:\"password\"}})],1)],1),_c(VCardActions,[_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.globals.showReplaceDriver = false}}},[_vm._v(\"Cancel\")]),_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\",\"disabled\":!_vm.applyValid},on:{\"click\":function($event){return _vm.onClickReplaceDriver(_vm.userNameSuffix, _vm.password, _vm.name)}}},[_vm._v(\"Replace User \")])],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport {RwUser} from \"@/app/dem/RwUser\";\nimport {RwTaskDriver} from \"@/app/dal/RwTaskDriver\";\nimport theStore from \"@/store\"\nimport {RwTaskSync} from \"@/app/dal/RwTaskSync\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport {ReplaceDriverError} from \"@/app/RwEnums\";\n\n@Component\nexport default class RwReplaceDriver extends Vue {\n\n  name: string = \"\";\n  userNameSuffix: string = \"\";\n  password: string = \"\";\n\n  // _teamDomainDot: string;\n\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  // get driverSpace(): RwDriverSpace {\n  //   return theDriverSpace;\n  // }\n\n\n  get selectedDriver(): RwUser {\n\n    return theStore.getters.selectedDriver;\n  }\n\n  set selectedDriver(val: RwUser) {\n    theStore.dispatch(\"selectedDriver\", val);\n  }\n\n  get teamDomainDot(): string {\n    let teamDomainDot = (!this.$data._teamDomainDot) ? this.globals.teamDomain + \".\" : !this.$data._teamDomainDot;\n    this.$data._teamDomainDot = teamDomainDot;\n    return this.$data._teamDomainDot;\n  }\n\n  get userNameRules(): any[] {\n    return [\n      v => (v.length <= 16 && this.globals.isAlpha(v)) || 'Username must have up to 16 letters and numbers.',\n      v => (this.driversUsernames.indexOf(v.toLowerCase()) === -1) || 'Username already in use.',\n      v => (!this.isSelf(v)) || 'Must change username to replace.'\n    ];\n  }\n\n  isSelf(val: string): boolean {\n    if ((this.globals.teamDomain + \".\" + val).toLowerCase() === this.selectedDriver.userName.toLowerCase()) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  get nameRules(): any[] {\n    if (this.name) {\n      return [\n        v => v.length >= 4 || 'Minimum 4 characters.',\n        v => this.globals.isValidName(v) || 'Name cannot contain special characters and must be less than 50 chars'\n      ]\n    }\n  }\n\n\n  get applyValid(): boolean {\n    if (this.name === '' || this.isSelf(this.userNameSuffix) || this.userNameSuffix.length < 3 || this.password.length < 4 ||\n        this.userNameSuffix.length > 16 || !this.globals.isValidName(this.name) || !this.globals.isAlpha(this.userNameSuffix) ||\n        this.driversUsernames.indexOf(this.userNameSuffix.toLowerCase()) > -1) {\n      // console.warn(\"Apply Valid getter returning False\");\n      return false;\n    } else {\n      // console.warn(\"Apply Valid getter returning True\");\n      return true;\n    }\n  }\n\n  escPress(event: Event) {\n    event.stopPropagation();\n    this.globals.showReplaceDriver = false;\n  }\n\n  enterPress(event: Event) {\n    if (this.applyValid) {\n      // console.warn(\"Enterpress returning valid True\");\n      event.stopPropagation();\n      (this.userNameSuffix && this.password && this.name)\n          ? this.onClickReplaceDriver(this.userNameSuffix, this.password, this.name)\n          : this.globals.showSnack(\"Please ensure all fields are filled in.\", \"error\");\n    } else {\n      // console.warn(\"Enterpress returning valid False\");\n      this.globals.showSnack(\"Check error messages and try again.\", \"error\");\n\n    }\n  }\n\n  get driversUsernames(): string[] {\n    const unames = [];\n    for (let driver of this.globals.drivers) {\n      if (driver.userId != this.selectedDriver.userId) unames.push(driver.userName.toLowerCase().replace(this.teamDomainDot.toLowerCase(), ''));\n    }\n    return unames;\n  }\n\n  onClickReplaceDriver(newUNameSuffix: string, newPass: string, newName: string) {\n    const SOURCE = \"onClickReplaceDriver\"\n    // let newUName = this.globals.teamDomain + \".\" + newUNameSuffix;\n    this.globals.showReplaceDriver = false;\n    RwTaskDriver.replaceDriver(this.selectedDriver.userId, newUNameSuffix, newPass, newName)\n        .then((errCode) => {\n          if (!errCode) {\n            this.globals.showReplaceDriver = false;\n            this.globals.showSnack(\"User Replaced\", \"success\");\n            this.$emit(\"onAction\", \"replaceDriver\");\n            this.globals.drivers = this.globals.drivers.filter(drv => drv.userId !== this.selectedDriver.userId);\n            RwTaskSync.syncDelta(this.globals.selectedRoute?.routeId || null)\n                .then(deltas => {\n                  if (this.globals.selectedRoute) {\n                    this.globals.mergeDeltas(deltas);\n                  } else {\n                    this.globals.mergeDrivers(deltas.drivers);\n                  }\n                });\n          } else {\n            switch (errCode) {\n              case ReplaceDriverError.InvalidUserNamePassword:\n                this.globals.showSnack(`Please choose a valid username and password for the new driver and try again.`, \"error\");\n                break;\n\n              case ReplaceDriverError.NewDriverAlreadyExists:\n                this.globals.showSnack(`The driver ${newUNameSuffix} already exists, please choose a different username`);\n                break;\n\n              case ReplaceDriverError.InvalidDriverToReplace:\n                this.globals.showSnack(`The driver you are replacing is not valid, please refresh and try again.`, \"error\");\n                break;\n\n              default:\n                this.globals.showSnack(\"Sorry, we had an error replacing that user.\", \"error\");\n                break;\n            }\n\n          }\n        })\n        .catch(err => {\n          let status = !!err.Code ? err.Code : err.status;\n          this.globals.showSnack(\"Failed to Replace User\", \"error\");\n          if (status === 403) {\n            RwLog.warn(SOURCE, `Token invalid error: ${JSON.stringify(err)}`);\n          } else if (status === 504) {\n            RwLog.warn(SOURCE, `Network error: ${JSON.stringify(err)}`)\n          } else if (err.response) {\n            if ((err && err.isHandled) == false) {\n              RwLog.error(SOURCE, `Response error: ${JSON.stringify(err)}`);\n            } else {\n              RwLog.warn(SOURCE, `Response error: ${JSON.stringify(err)}`);\n            }\n          } else if (err.request) {\n            // client never received a response, or request never left\n            RwLog.error(SOURCE, `Request error: ${JSON.stringify(err)}`);\n          } else {\n            // anything else\n            RwLog.error(SOURCE, `Unhandled: ${JSON.stringify(err)}`);\n          }\n        });\n\n  }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwReplaceDriver.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwReplaceDriver.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwReplaceDriver.vue?vue&type=template&id=13fa83a4&scoped=true&\"\nimport script from \"./RwReplaceDriver.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwReplaceDriver.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"13fa83a4\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCheckbox } from 'vuetify/lib/components/VCheckbox';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{staticClass:\"overflow-y-hidden\",attrs:{\"scrollable\":\"\",\"persistent\":\"\",\"max-width\":\"600px\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.escPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.enterPress.apply(null, arguments)}]},model:{value:(_vm.globals.showLimitPopup),callback:function ($$v) {_vm.$set(_vm.globals, \"showLimitPopup\", $$v)},expression:\"globals.showLimitPopup\"}},[_c(VCard,[_c(VToolbar,{attrs:{\"dense\":\"\",\"max-height\":\"48px\",\"color\":_vm.globals.backColorBar}},[_c(VIcon,{attrs:{\"color\":\"orange\"}},[_vm._v(\"mdi-alert\")]),_c(VToolbarTitle,[_vm._v(_vm._s(_vm.title))])],1),_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme},[_c(VTabsItems,{attrs:{\"grow\":\"\",\"solo-inverted\":\"\"},model:{value:(_vm.idxTab),callback:function ($$v) {_vm.idxTab=$$v},expression:\"idxTab\"}},[_c(VTabItem,{key:\"0\"},[_c(VRow,{staticClass:\"mx-4 mt-4\"},[_c(VCol,{staticClass:\"text-left\"},[_c('span',[_vm._v(\"\\\"\"+_vm._s(_vm.globals.activeRoute.name)+\"\\\" is less than 50 new Stops away from hitting the \"),_c('b',[_vm._v(\"500 Stop History limit\")]),_vm._v(\".\")]),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({attrs:{\"color\":\"grey\",\"size\":\"medium\"}},on),[_vm._v(\"mdi-help-circle-outline\")])]}}])},[_c('span',{staticStyle:{\"font-size\":\"small\",\"color\":\"grey\"}},[_vm._v(\" The History Limit prevents data backlogs that can slow down your app and lead to inaccurate reporting. \")])])],1)],1),_c(VRow,{staticClass:\"mx-4\"},[_c(VCol,{staticClass:\"text-left\"},[_c('span',[_vm._v(\"Once this Route reaches 500 cumulative Stops (active and deleted), you will no longer be able to add new Stops to the Route. \")])])],1),_c(VRow,{staticClass:\"mx-4\"},[_c(VCol,{staticClass:\"text-left\"},[_c('span',[_vm._v(\"To prevent unexpected interruption later, you may \"),_c('b',[_vm._v(\"create a copy of the current Route\")]),_vm._v(\", which will keep all current Stops, settings, and other features, or \"),_c('b',[_vm._v(\"start a new Route\")]),_vm._v(\".\")])])],1)],1),_c(VTabItem,{key:\"1\"},[_c(VRow,{staticClass:\"mx-4 mt-4\"},[_c(VCol,{staticClass:\"text-left\"},[_c('span',[_vm._v(\"\\\"\"+_vm._s(_vm.globals.activeRoute.name)+\"\\\" has reached the \"),_c('b',[_vm._v(\"500 Stop History limit\")]),_vm._v(\".\")]),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({attrs:{\"color\":\"grey\",\"size\":\"medium\"}},on),[_vm._v(\"mdi-help-circle-outline\")])]}}])},[_c('span',{staticStyle:{\"font-size\":\"small\",\"color\":\"grey\"}},[_vm._v(\" The History Limit prevents data backlogs that can slow down your app and lead to inaccurate reporting. \")])]),_c('span',[_vm._v(\" This Route can no longer support new Stops.\")])],1)],1),_c(VRow,{staticClass:\"mx-4\"},[_c(VCol,{staticClass:\"text-left\"},[_c('span',[_vm._v(\"To continue working, you may \"),_c('b',[_vm._v(\"create a copy of the current Route\")]),_vm._v(\", which will keep all current Stops, settings, and other features, or \"),_c('b',[_vm._v(\"start a new Route\")]),_vm._v(\".\")])])],1)],1)],1),_c(VCheckbox,{staticClass:\"ma-4\",attrs:{\"label\":\"Archive Current Route after New Route created\"},model:{value:(_vm.archiveRoute),callback:function ($$v) {_vm.archiveRoute=$$v},expression:\"archiveRoute\"}}),(_vm.idxTab===0)?_c(VCheckbox,{staticClass:\"mx-4\",attrs:{\"label\":\"Do not warn me again\"},model:{value:(_vm.notShowCheck),callback:function ($$v) {_vm.notShowCheck=$$v},expression:\"notShowCheck\"}}):_vm._e()],1),_c(VCardActions,[(_vm.idxTab === 0)?_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":_vm.escPress}},[_vm._v(\"Close\")]):_vm._e(),_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.enterPress}},[_vm._v(\"Continue\")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\n\n\n@Component\nexport default class RwProfileEdit extends Vue {\n\n  idxTab: number = 0;\n  showPassword: boolean = false;\n  notShowCheck: boolean = false;\n  archiveRoute: boolean = false;\n\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get plannerSpace(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get title(): string {\n    if (this.idxTab == 0) {\n      return \"Route History Approaching Limit\";\n    } else {\n      return \"Route History Limit Reached\";\n    }\n  }\n\n  mounted() {\n    if (this.globals.prompt500Popup.includes(this.plannerSpace.activeRoute.routeId)) {\n      this.idxTab = 1;\n    }\n  }\n\n\n  enterPress() {\n    if (this.notShowCheck) {\n      this.globals.hide450Popup = true;\n    }\n    if (this.idxTab == 1) {\n      this.globals.prompt500Popup = [];\n    }\n    this.globals.prompt450Popup = [];\n    let origRoute = this.plannerSpace.activeRoute;\n    this.globals.showLimitPopup = false;\n    this.globals\n        .showRouteNew(false, null)\n        .then(pick => {\n          //console.log(\"onRouteAddClick callback\", pick);\n          if (pick) {\n            this.plannerSpace.openRouteInPlanner(pick);\n            if (this.globals.editAfterAdd) this.globals.showRouteEdit(pick);\n          }\n          if (this.archiveRoute) {\n            this.globals.confirmAndArchiveRoute(origRoute)\n                .then(() => {\n                  this.plannerSpace.closeRoute(origRoute);\n                })\n          }\n        });\n  }\n\n  escPress() {\n    if (this.idxTab === 0) {\n      if (this.notShowCheck) {\n        RwPrefUtils.hide450Popup = true;\n      }\n      this.globals.showLimitPopup = false;\n    }\n  }\n\n\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwLimitPopup.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwLimitPopup.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwLimitPopup.vue?vue&type=template&id=58953938&scoped=true&\"\nimport script from \"./RwLimitPopup.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwLimitPopup.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"58953938\",\n  null\n  \n)\n\nexport default component.exports","import { VBanner } from 'vuetify/lib/components/VBanner';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRadio } from 'vuetify/lib/components/VRadioGroup';\nimport { VRadioGroup } from 'vuetify/lib/components/VRadioGroup';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VStepper } from 'vuetify/lib/components/VStepper';\nimport { VStepperHeader } from 'vuetify/lib/components/VStepper';\nimport { VStepperStep } from 'vuetify/lib/components/VStepper';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',[_c(VBanner,{staticClass:\"mb-0 text-left\",staticStyle:{\"position\":\"relative\"},attrs:{\"icon\":\"warning\",\"color\":\"warning\"},model:{value:(_vm.showStopsViolationsBanner),callback:function ($$v) {_vm.showStopsViolationsBanner=$$v},expression:\"showStopsViolationsBanner\"}},[_vm._v(\" One or more stops have violations. \"),_c('span',{staticStyle:{\"text-decoration\":\"underline\",\"cursor\":\"pointer\"},on:{\"click\":function($event){_vm.showStopsViolationsList=true}}},[_vm._v(\" View details \")]),_c(VSpacer),_c(VBtn,{staticStyle:{\"position\":\"absolute\",\"top\":\"24px\",\"right\":\"15px\"},attrs:{\"text\":\"\",\"icon\":\"\"},on:{\"click\":_vm.dismissViolationWarning}},[_c(VIcon,[_vm._v(\"mdi-close\")])],1)],1),_c(VDialog,{attrs:{\"width\":\"600\"},model:{value:(_vm.showStopsViolationsList),callback:function ($$v) {_vm.showStopsViolationsList=$$v},expression:\"showStopsViolationsList\"}},[_c(VToolbar,[_c(VToolbarTitle,[_vm._v(\"Stops Violations\")]),_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.showStopsViolationsList = false}}},[_c(VIcon,[_vm._v(\"mdi-close\")])],1)],1),_c(VCard,[_c(VCardText,[_c(VList,{staticClass:\"pt-6\"},_vm._l((_vm.stopsWithViolations),function(stop){return _c(VListItem,{key:stop.stopId,on:{\"click\":function($event){return _vm.onClickViolation(stop)}}},[_c(VImg,{staticStyle:{\"max-width\":\"36px\"},attrs:{\"contain\":\"\",\"height\":\"36\",\"width\":\"36\",\"src\":stop.dataUrl}}),_c('span',[_vm._v(_vm._s(stop.name))]),_c(VSpacer),_c('span',[_vm._v(_vm._s(stop.violationText))])],1)}),1)],1),_c(VCardActions,[_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.showStopsViolationsList = false}}},[_vm._v(\" Close \")])],1)],1)],1),_c(VToolbar,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.space.showPlannerToolbar && !_vm.globals.showSearchPanel),expression:\"space.showPlannerToolbar && !globals.showSearchPanel\"}],attrs:{\"color\":_vm.globals.backColorBar,\"dense\":\"\",\"extended\":\"\"},scopedSlots:_vm._u([{key:\"extension\",fn:function(){return [_c(VTabs,{attrs:{\"show-arrows\":\"\"},model:{value:(_vm.idxTab),callback:function ($$v) {_vm.idxTab=$$v},expression:\"idxTab\"}},_vm._l((_vm.openRoutes),function(route,idxTab){return _c(VTab,{key:idxTab,attrs:{\"to\":route.plannerUrl,\"exact\":\"\"},on:{\"click\":function($event){return _vm.tabClick(route, idxTab)}}},[_c('span',{staticClass:\"text-none\",staticStyle:{\"font-size\":\"small\"},on:{\"contextmenu\":function($event){return _vm.showTabContextMenu($event, idxTab, route)}}},[_vm._v(\" \"+_vm._s(route.name)+\" \"),_c(VBtn,{staticStyle:{\"height\":\"32px\",\"width\":\"32px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.tabCloseClick(route)}}},[_c(VIcon,{attrs:{\"x-small\":\"\"}},[_vm._v(\"mdi-close\")])],1)],1),_c(VMenu,{attrs:{\"close-on-content-click\":true,\"position-x\":_vm.contextMenuX,\"position-y\":_vm.contextMenuY,\"absolute\":\"\",\"bottom\":\"\",\"offset-y\":\"\"},model:{value:(_vm.showingTabMenu),callback:function ($$v) {_vm.showingTabMenu=$$v},expression:\"showingTabMenu\"}},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VListItem,{attrs:{\"to\":_vm.contextUrl},on:{\"click\":function($event){return _vm.tabMenuClick(3)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"View Route\")])],1),_c(VListItem,{attrs:{\"to\":_vm.contextUrl},on:{\"click\":function($event){return _vm.tabMenuClick(4)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit Route\")])],1),_c(VDivider),_c(VListItem,{on:{\"click\":function($event){return _vm.tabMenuClick(0)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close-box\")])],1),_c(VListItemTitle,[_vm._v(\"Close This\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.tabMenuClick(1)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close-box\")])],1),_c(VListItemTitle,[_vm._v(\"Close Others\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.tabMenuClick(2)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close-box\")])],1),_c(VListItemTitle,[_vm._v(\"Close All\")])],1)],1)],1)],1)}),1),_c(VBtn,{staticStyle:{\"text-transform\":\"inherit\",\"font-weight\":\"600\",\"color\":\"#6B6B6B\"},attrs:{\"text\":\"\",\"color\":_vm.displayEmptyState ? 'primary' : 'normal'},on:{\"click\":_vm.onRouteAddPicker}},[_c(VIcon,[_vm._v(\"mdi-plus\")]),_c('span',[_vm._v(\"New route\")])],1)]},proxy:true}])},[(!_vm.isMobile)?_c(VToolbarTitle,[_vm._v(\"Planner\")]):_vm._e(),(!_vm.isMobile)?_c('div',{staticStyle:{\"width\":\"96px\"}}):_vm._e(),(!_vm.isMobile)?_c(VSpacer):_vm._e(),(true)?_c(VStepper,{staticClass:\"elevation-0\",style:(_vm.stepperStyle),attrs:{\"dense\":\"\",\"value\":_vm.stepFocus,\"flat\":\"\"}},[_c(VStepperHeader,[_c(VStepperStep,{attrs:{\"complete\":(_vm.stepFocus === 0 || _vm.stepFocus > 1) && _vm.openRoutes.length>0,\"step\":\"1\",\"editable\":\"\",\"edit-icon\":_vm.isMobile ? 'mdi-magnify' : '$complete',\"color\":\"#E91E63\"},on:{\"click\":_vm.onSearchClick}},[_vm._v(\" Search \")]),_c(VDivider),_c(VStepperStep,{attrs:{\"complete\":(_vm.stepFocus === 0 || _vm.stepFocus > 2) && _vm.openRoutes.length>0,\"step\":\"2\",\"editable\":\"\",\"edit-icon\":_vm.isMobile ? 'mdi-map-marker-path' : '$complete',\"color\":\"#E91E63\"},on:{\"click\":_vm.onOrderClick}},[_vm._v(\" Order \")]),(_vm.globals.isDisp)?_c(VDivider):_vm._e(),_c(VStepperStep,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.globals.isDisp),expression:\"globals.isDisp\"}],attrs:{\"complete\":(_vm.isAssigned) && _vm.openRoutes.length>0,\"isAssigned\":\"\",\"step\":\"3\",\"editable\":\"\",\"edit-icon\":_vm.isMobile ? 'mdi-account-multiple-check' : '$complete',\"color\":\"#E91E63\"},on:{\"click\":_vm.onAssignClick}},[_vm._v(\" Assign \")]),(false)?_c(VStepperStep,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.canShowPushStep),expression:\"canShowPushStep\"}],attrs:{\"complete\":false,\"step\":\"4\",\"editable\":\"\",\"edit-icon\":undefined,\"color\":\"#E91E63\"},on:{\"click\":_vm.onPushClick}},[_vm._v(\" Push \")]):_vm._e()],1)],1):_vm._e(),_c(VSpacer),_c(VDivider,{staticClass:\"mx-3\",attrs:{\"vertical\":\"\"}}),(!_vm.isMobile && !_vm.globals.isTabletView)?_c('div',[(!_vm.space.showDataLayerRoute)?_c(VChip,{staticClass:\"ma-2\",attrs:{\"close\":\"\",\"color\":\"primary\"},on:{\"click:close\":_vm.onCloseFilterHideStops}},[_vm._v(\" Hiding Stops \")]):_vm._e(),(!_vm.space.showDataLayerSites)?_c(VChip,{staticClass:\"ma-2\",attrs:{\"close\":\"\",\"color\":\"primary\"},on:{\"click:close\":_vm.onCloseFilterHideSites}},[_vm._v(\" Hiding Favorites \")]):_vm._e(),(_vm.globals.isDisp && !_vm.space.showDataLayerTasks)?_c(VChip,{staticClass:\"ma-2\",attrs:{\"close\":\"\",\"color\":\"primary\"},on:{\"click:close\":_vm.onCloseFilterHideTasks}},[_vm._v(\" Hiding Tasks \")]):_vm._e(),(_vm.space.showDataLayerRoute && _vm.space.isStopFiltered)?_c(VChip,{staticClass:\"ma-2\",attrs:{\"close\":\"\",\"color\":\"primary\"},on:{\"click:close\":_vm.onCloseFilterStops}},[_vm._v(\" Filtering Stops \")]):_vm._e(),(_vm.space.showDataLayerSites && _vm.space.isSiteFiltered)?_c(VChip,{staticClass:\"ma-2\",attrs:{\"close\":\"\",\"color\":\"primary\"},on:{\"click:close\":_vm.onCloseFilterSites}},[_vm._v(\" Filtering Favorites \")]):_vm._e(),(_vm.globals.isDisp && _vm.space.showDataLayerTasks && _vm.space.isTaskFiltered)?_c(VChip,{staticClass:\"ma-2\",attrs:{\"close\":\"\",\"color\":\"primary\"},on:{\"click:close\":_vm.onCloseFilterTasks}},[_vm._v(\" Filtering Tasks \")]):_vm._e()],1):_vm._e(),(_vm.globals.isTabletView && !_vm.isMobile && _vm.hasActiveFilters)?[_c(VBtn,{staticStyle:{\"position\":\"relative\"},attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.showTabletFilters = true;}}},[_c(VIcon,[_vm._v(\"mdi-filter\")]),_c('span',{staticClass:\"active-filters\"})],1),_c(VDialog,{attrs:{\"max-width\":\"450\"},model:{value:(_vm.showTabletFilters),callback:function ($$v) {_vm.showTabletFilters=$$v},expression:\"showTabletFilters\"}},[_c(VCard,[_c(VList,[(!_vm.space.showDataLayerRoute)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterHideStops}},[_vm._v(\" Hiding Stops \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e(),(!_vm.space.showDataLayerSites)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterHideSites}},[_vm._v(\" Hiding Favorites \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e(),(_vm.globals.isDisp && !_vm.space.showDataLayerTasks)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterHideTasks}},[_vm._v(\" Hiding Tasks \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e(),(_vm.space.showDataLayerRoute && _vm.space.isStopFiltered)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterStops}},[_vm._v(\" Filtering Stops \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e(),(_vm.space.showDataLayerSites && _vm.space.isSiteFiltered)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterSites}},[_vm._v(\" Filtering Favorites \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e(),(_vm.globals.isDisp && _vm.space.showDataLayerTasks && _vm.space.isTaskFiltered)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterTasks}},[_vm._v(\" Filtering Tasks \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e()],1),_c(VCardActions,[_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.showTabletFilters=false}}},[_vm._v(\"Close\")])],1)],1)],1)]:_vm._e(),(_vm.isMobile)?[_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.showMobileActions = true}}},[_c(VIcon,[_vm._v(\"mdi-dots-vertical\")])],1),_c(VDialog,{model:{value:(_vm.showMobileActions),callback:function ($$v) {_vm.showMobileActions=$$v},expression:\"showMobileActions\"}},[_c(VCard,[_c(VTabs,{staticClass:\"mobile-planner-tabs\",model:{value:(_vm.mobileActionsTabsIdx),callback:function ($$v) {_vm.mobileActionsTabsIdx=$$v},expression:\"mobileActionsTabsIdx\"}},[_c(VTabItem,{key:0},[_c(VList,[_c(VListItem,{on:{\"click\":() => { _vm.onDataLayers(); _vm.showMobileActions = false; }}},[_vm._v(\" Data Layers \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-layers\")])],1),_c(VListItem,{on:{\"click\":() => { _vm.onMultiEnter();_vm.showMobileActions = false; }}},[_vm._v(\" Multi Select Mode \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-checkbox-multiple-marked\")])],1),_c(VListItem,{on:{\"click\":function($event){_vm.mobileActionsTabsIdx = 1}}},[_vm._v(\" Active Filters \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-filter\")])],1)],1)],1),_c(VTabItem,{key:1},[_c(VList,[(!_vm.space.showDataLayerRoute)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterHideStops}},[_vm._v(\" Hiding Stops \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e(),(!_vm.space.showDataLayerSites)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterHideSites}},[_vm._v(\" Hiding Favorites \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e(),(_vm.globals.isDisp && !_vm.space.showDataLayerTasks)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterHideTasks}},[_vm._v(\" Hiding Tasks \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e(),(_vm.space.showDataLayerRoute && _vm.space.isStopFiltered)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterStops}},[_vm._v(\" Filtering Stops \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e(),(_vm.space.showDataLayerSites && _vm.space.isSiteFiltered)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterSites}},[_vm._v(\" Filtering Favorites \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e(),(_vm.globals.isDisp && _vm.space.showDataLayerTasks && _vm.space.isTaskFiltered)?_c(VListItem,{on:{\"click\":_vm.onCloseFilterTasks}},[_vm._v(\" Filtering Tasks \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-close\")])],1):_vm._e()],1)],1)],1),_c(VCardActions,[(_vm.mobileActionsTabsIdx===1)?_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.mobileActionsTabsIdx=0}}},[_vm._v(\"Back\")]):_vm._e(),_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":() => { _vm.showMobileActions=false;_vm.mobileActionsTabsIdx=0; }}},[_vm._v(\"Done \")])],1)],1)],1)]:_vm._e(),(!_vm.isMobile)?[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"disabled\":_vm.openRoutes.length<1 || !(_vm.space.showPanelMap ||_vm.space.showPanelList),\"icon\":\"\"},on:{\"click\":_vm.onDataLayers}},on),[_c(VIcon,{attrs:{\"color\":_vm.space.isLayerDelta ? 'primary' : 'normal'}},[_vm._v(\"mdi-layers\")])],1)]}}],null,false,3418528746)},[_c('span',[_vm._v(\"Data Layers\")])]),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"disabled\":_vm.openRoutes.length<1 || !(_vm.space.showPanelMap ||_vm.space.showPanelList),\"icon\":\"\"},on:{\"click\":function($event){return _vm.onMultiEnter()}}},on),[_c(VIcon,{attrs:{\"color\":_vm.colorMultiButton}},[_vm._v(\"mdi-checkbox-multiple-marked\")])],1)]}}],null,false,2520940825)},[_c('span',[_vm._v(\"Multi-Select Mode\")])]),_c(VDivider,{staticClass:\"mx-3\",attrs:{\"vertical\":\"\"}}),_c(VMenu,{attrs:{\"close-on-content-click\":false,\"nudge-width\":65,\"bottom\":\"\",\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"disabled\":_vm.openRoutes.length<1,\"elevation\":\"0\",\"icon\":\"\"}},on),[_c(VIcon,[_vm._v(\"mdi-dock-right\")])],1)]}}],null,false,3403137359),model:{value:(_vm.showPanelMenu),callback:function ($$v) {_vm.showPanelMenu=$$v},expression:\"showPanelMenu\"}},[_c(VCard,[_c(VList,[_c(VSubheader,[_vm._v(\"Panel Visibility\")]),_c(VDivider),_c(VListItem,[_c(VListItemAction,[_c(VSwitch,{staticClass:\"pre\",attrs:{\"label\":\"   Show Map Panel\"},model:{value:(_vm.space.showPanelMap),callback:function ($$v) {_vm.$set(_vm.space, \"showPanelMap\", $$v)},expression:\"space.showPanelMap\"}})],1)],1),_c(VListItem,[_c(VListItemAction,[_c(VSwitch,{staticClass:\"pre\",attrs:{\"label\":\"   Show List Panel\"},model:{value:(_vm.space.showPanelList),callback:function ($$v) {_vm.$set(_vm.space, \"showPanelList\", $$v)},expression:\"space.showPanelList\"}})],1)],1),_c(VListItem,[_c(VListItemAction,[_c(VSwitch,{staticClass:\"pre\",attrs:{\"label\":\"   Show Pin Panel\"},model:{value:(_vm.globals.showPinPanel),callback:function ($$v) {_vm.$set(_vm.globals, \"showPinPanel\", $$v)},expression:\"globals.showPinPanel\"}})],1)],1),(_vm.globals.isDisp)?_c(VListItem,[_c(VListItemAction,[_c(VSwitch,{staticClass:\"pre\",attrs:{\"label\":\"   Show Status Panel\"},model:{value:(_vm.space.showPanelStatus),callback:function ($$v) {_vm.$set(_vm.space, \"showPanelStatus\", $$v)},expression:\"space.showPanelStatus\"}})],1)],1):_vm._e()],1)],1)],1)]:_vm._e()],2),_c(VToolbar,{directives:[{name:\"show\",rawName:\"v-show\",value:(this.isMultiMode),expression:\"this.isMultiMode\"}],attrs:{\"color\":\"primary\",\"dense\":\"\"}},[(!_vm.isMobile)?[(_vm.isMultiModeSites || _vm.isMultiModeTasks)?_c(VTooltip,{attrs:{\"color\":\"#222\",\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [(_vm.isMultiModeSites || _vm.isMultiModeTasks)?_c(VBtn,_vm._g({attrs:{\"disabled\":_vm.selectedPinCount === 0,\"icon\":\"\"},on:{\"click\":function($event){return _vm.onMultiAddToRoute()}}},on),[_c(VIcon,[_vm._v(\"mdi-routes\")])],1):_vm._e()]}}],null,false,1173029290)},[_c('span',[_vm._v(\"Add To Route\")])]):_vm._e(),_c(VTooltip,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isMultiModeStops),expression:\"isMultiModeStops\"}],attrs:{\"color\":\"#222\",\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on:onCopy }){return [_c(VBtn,_vm._g({directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isMultiModeStops),expression:\"isMultiModeStops\"}],attrs:{\"disabled\":_vm.selectedPinCount === 0,\"icon\":\"\"},on:{\"click\":_vm.onMultiCopy}},onCopy),[_c(VIcon,[_vm._v(\"mdi-content-copy\")])],1)]}}],null,false,906617370)},[_c('span',[_vm._v(\"Move / Copy Stops\")])]),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"disabled\":_vm.selectedPinCount === 0,\"icon\":\"\"},on:{\"click\":function($event){return _vm.onMultiVisit()}}},on),[_c(VIcon,[_vm._v(\"mdi-timelapse\")])],1)]}}],null,false,638982037)},[_c('span',[_vm._v(\"Set Visit Time\")])]),(_vm.isMultiModeStops)?_c(VTooltip,{attrs:{\"color\":\"#222\",\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [(_vm.isMultiModeStops)?_c(VBtn,_vm._g({attrs:{\"disabled\":_vm.selectedPinCount === 0,\"icon\":\"\"},on:{\"click\":function($event){return _vm.onMultiSked()}}},on),[_c(VIcon,[_vm._v(\"mdi-calendar-clock\")])],1):_vm._e()]}}],null,false,3086102864)},[_c('span',[_vm._v(\"Set Schedule\")])]):_vm._e(),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"disabled\":_vm.selectedPinCount === 0,\"icon\":\"\"},on:{\"click\":function($event){return _vm.onMultiColor()}}},on),[_c(VIcon,[_vm._v(\"mdi-palette\")])],1)]}}],null,false,286652890)},[_c('span',[_vm._v(\"Set Color\")])]),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"disabled\":_vm.selectedPinCount === 0,\"icon\":\"\"},on:{\"click\":_vm.onMultiDelete}},on),[_c(VIcon,[_vm._v(\"mdi-delete\")])],1)]}}],null,false,2630415772)},[_c('span',[_vm._v(\"Delete Selected\")])]),_c(VDivider,{staticClass:\"mx-4\",attrs:{\"vertical\":\"\"}}),_c(VMenu,{attrs:{\"close-on-content-click\":false,\"bottom\":\"\",\"offset-y\":\"\",\"nudge-width\":\"128\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on:menu }){return [_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on:tooltip }){return [_c(VBtn,_vm._g({staticClass:\"text-none\",attrs:{\"elevation\":\"0\",\"icon\":\"\",\"text\":\"\"}},{ ...tooltip, ...menu }),[_c(VIcon,[_vm._v(_vm._s(_vm.multiModeTool === 0 ? 'mdi-cursor-default-click' : 'mdi-lasso'))])],1)]}}],null,true)},[_c('span',[_vm._v(\"Map Selection Tool\")])])]}}],null,false,3822611849),model:{value:(_vm.showMultiToolSelector),callback:function ($$v) {_vm.showMultiToolSelector=$$v},expression:\"showMultiToolSelector\"}},[_c(VCard,[_c(VList,[_c(VSubheader,[_vm._v(\"Pin Type Selector\")]),_c(VDivider),_c(VRadioGroup,{staticClass:\"mx-3\",model:{value:(_vm.multiModeTool),callback:function ($$v) {_vm.multiModeTool=$$v},expression:\"multiModeTool\"}},[_c(VRadio,{key:0,attrs:{\"value\":0,\"label\":\"Click Pins\"},nativeOn:{\"click\":function($event){return _vm.onMultiToolClick(0)}}}),_c(VRadio,{key:1,attrs:{\"value\":1,\"label\":\"Lasso Pins\"},nativeOn:{\"click\":function($event){return _vm.onMultiToolClick(1)}}})],1)],1)],1)],1),_c(VDivider,{staticClass:\"mx-4\",attrs:{\"vertical\":\"\"}}),_c(VMenu,{attrs:{\"close-on-content-click\":false,\"bottom\":\"\",\"offset-y\":\"\",\"nudge-width\":\"128\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on: menu }){return [_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on:tooltip }){return [_c(VBtn,_vm._g({staticClass:\"text-none\",attrs:{\"elevation\":\"0\",\"icon\":\"\",\"text\":\"\"}},{ ...tooltip, ...menu }),[_c(VIcon,[_vm._v(_vm._s(_vm.selectModeIcon))])],1)]}}],null,true)},[_c('span',[_vm._v(\"Multi-Mode Selector\")])])]}}],null,false,2532238952),model:{value:(_vm.showMultiModeSelector),callback:function ($$v) {_vm.showMultiModeSelector=$$v},expression:\"showMultiModeSelector\"}},[_c(VCard,[_c(VList,[_c(VSubheader,[_vm._v(\"Select Mode\")]),_c(VDivider),_c(VRadioGroup,{staticClass:\"mx-3\",model:{value:(_vm.multiMode),callback:function ($$v) {_vm.multiMode=$$v},expression:\"multiMode\"}},[_c(VRadio,{key:1,attrs:{\"value\":1,\"label\":\"Select Stop Pins\",\"name\":\"selectMode\"},nativeOn:{\"click\":function($event){return _vm.onMultiModeClick(1)}}}),_c(VRadio,{key:2,attrs:{\"value\":2,\"label\":\"Select Favorite Pins\",\"name\":\"selectMode\"},nativeOn:{\"click\":function($event){return _vm.onMultiModeClick(2)}}}),(_vm.globals.isDisp)?_c(VRadio,{key:3,attrs:{\"value\":3,\"label\":\"Select Task Pins\",\"name\":\"selectMode\"},nativeOn:{\"click\":function($event){return _vm.onMultiModeClick(3)}}}):_vm._e()],1)],1)],1)],1)]:_vm._e(),(_vm.isMobile)?[_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.showMobileMultiMode = true}}},[_c(VIcon,[_vm._v(\"mdi-dots-vertical\")])],1),_c(VDialog,{model:{value:(_vm.showMobileMultiMode),callback:function ($$v) {_vm.showMobileMultiMode=$$v},expression:\"showMobileMultiMode\"}},[_c(VCard,[_c(VTabs,{staticClass:\"mobile-planner-tabs\",model:{value:(_vm.mobileMultiModeIdx),callback:function ($$v) {_vm.mobileMultiModeIdx=$$v},expression:\"mobileMultiModeIdx\"}},[_c(VTabItem,{key:0},[_c(VList,[_c(VListItem,{on:{\"click\":_vm.onMultiAddToRoute}},[_vm._v(\" Add to Route \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-routes\")])],1),_c(VListItem,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isMultiModeStops),expression:\"isMultiModeStops\"}],on:{\"click\":_vm.onMultiCopy}},[_vm._v(\" Move / Copy Stops \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-content-copy\")])],1),_c(VListItem,{on:{\"click\":_vm.onMultiVisit}},[_vm._v(\" Set Visit Time \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-timelapse\")])],1),_c(VListItem,{on:{\"click\":_vm.onMultiSked}},[_vm._v(\" Set Schedule \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-calendar-clock\")])],1),_c(VListItem,{on:{\"click\":_vm.onMultiColor}},[_vm._v(\" Set Color \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-palette\")])],1),_c(VListItem,{on:{\"click\":_vm.onMultiDelete}},[_vm._v(\" Delete Selected \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItem,{on:{\"click\":function($event){_vm.mobileMultiModeIdx=1}}},[_vm._v(\" Map Selection Tool \"),_c(VSpacer),_c(VIcon,[_vm._v(_vm._s(_vm.multiModeTool === 0 ? 'mdi-cursor-default-click' : 'mdi-lasso'))])],1),_c(VListItem,{on:{\"click\":function($event){_vm.mobileMultiModeIdx=2}}},[_vm._v(\" Multi-Mode Selector \"),_c(VSpacer),_c(VIcon,[_vm._v(_vm._s(_vm.selectModeIcon))])],1)],1)],1),_c(VTabItem,{key:1},[_c(VList,[_c(VListItem,{on:{\"click\":() => { _vm.onMultiToolClick(0); _vm.mobileMultiModeIdx = 0; }}},[_vm._v(\" Click Pins \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-cursor-default-click\")])],1),_c(VListItem,{on:{\"click\":() => { _vm.onMultiToolClick(1); _vm.mobileMultiModeIdx =0;}}},[_vm._v(\" Lasso Pins \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-lasso\")])],1)],1)],1),_c(VTabItem,{key:2},[_c(VList,[_c(VListItem,{on:{\"click\":() => { _vm.onMultiModeClick(1); _vm.mobileMultiModeIdx = 0; }}},[_vm._v(\" Stop Pins \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-map-marker\")])],1),_c(VListItem,{on:{\"click\":() => { _vm.onMultiModeClick(2); _vm.mobileMultiModeIdx =0;}}},[_vm._v(\" Favorite Pins \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-star-circle\")])],1),(_vm.globals.isDisp)?_c(VListItem,{on:{\"click\":() => { _vm.onMultiModeClick(3); _vm.mobileMultiModeIdx =0;}}},[_vm._v(\" Task Pins \"),_c(VSpacer),_c(VIcon,[_vm._v(\"mdi-clipboard-check\")])],1):_vm._e()],1)],1)],1),_c(VCardActions,[_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.mobileMultiModeIdx!==0),expression:\"mobileMultiModeIdx!==0\"}],attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.mobileMultiModeIdx=0}}},[_vm._v(\"Back\")]),_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){_vm.showMobileMultiMode=false}}},[_vm._v(\"Done\")])],1)],1)],1)]:_vm._e(),_c(VSpacer),_c('span',[_vm._v(_vm._s(_vm.selectedPinCount)+\" Selected\")]),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.onMultiExit()}}},on),[_c(VIcon,[_vm._v(\"mdi-close\")])],1)]}}])},[_c('span',[_vm._v(\"Exit Multi-Select\")])])],2),(_vm.canShowPlannerBody)?_c(VRow,{staticClass:\"rw-container\",style:(_vm.upperBodyStyle),attrs:{\"no-gutters\":\"\"}},[_c(VBanner,{staticStyle:{\"width\":\"100%\"},attrs:{\"color\":_vm.space.invalidPinIcon,\"icon\":_vm.space.invalidPinIcon},model:{value:(_vm.space.showInvalidPinBanner),callback:function ($$v) {_vm.$set(_vm.space, \"showInvalidPinBanner\", $$v)},expression:\"space.showInvalidPinBanner\"}},[_c('div',{staticClass:\"d-flex justify-space-between align-center\",style:(`width: 100%;${_vm.space.invalidPinIcon === 'error' ? 'font-weight: 600;' : ''}`)},[_vm._v(\" \"+_vm._s(_vm.invalidPinMessage)+\" \"),_c(VBtn,{attrs:{\"small\":\"\",\"text\":\"\"},on:{\"click\":_vm.resetInvalidPinBanner}},[_c(VIcon,[_vm._v(\"close\")])],1)],1)]),_c(VBanner,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.canShowPushStep),expression:\"canShowPushStep\"}],staticStyle:{\"width\":\"100%\"},scopedSlots:_vm._u([{key:\"actions\",fn:function(){return [_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"normal\"},on:{\"click\":_vm.onPushDismiss}},[_vm._v(\" Dismiss \")]),_c(VBtn,{attrs:{\"disabled\":_vm.isPushPending,\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.onPushClick}},[_vm._v(\" Push Changes \")])]},proxy:true}],null,false,4157517075)},[_c('div',[_c(VIcon,{staticClass:\"mr-2\",attrs:{\"icon\":\"mdi-alert\",\"color\":\"yellow\"}},[_vm._v(\" mdi-alert \")]),_vm._v(\" Changes to an assigned route. It is recommended to minimize changes after assignment to avoid conflicts. \")],1)]),(!_vm.isMobile)?[_c(VCol,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isSearchMode),expression:\"isSearchMode\"}],class:`${_vm.backColor} search-panel`,style:(`${_vm.panelsHeight};width:512px`),attrs:{\"cols\":\"auto\"}},[_c('RwSearchPanel',{staticStyle:{\"height\":\"100%\"}})],1),(_vm.canShowMapPanel)?_c(VCol,{staticClass:\"rw-container\",style:(`${_vm.panelsHeight};${_vm.globals.showSearchPanel ? 'flex:1;':''}`),attrs:{\"cols\":_vm.globals.showSearchPanel ? 'auto': _vm.panelCols}},[_c('RwPlannerMap',{staticStyle:{\"height\":\"100%\",\"width\":\"100%\"}})],1):_vm._e(),(_vm.canShowListPanel)?_c(VCol,{class:_vm.backColor,style:(`${_vm.panelsHeight};width: 100%`),attrs:{\"cols\":_vm.panelCols}},[_c('RwPlannerList',{staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},attrs:{\"forceDropUpdate\":_vm.forceDropUpdateFlag},on:{\"addStop\":_vm.onSearchClick,\"orderRoute\":_vm.onOrderClick,\"assignToDriver\":_vm.onAssignClick}})],1):_vm._e(),(_vm.canShowPinPanel)?_c(VCol,{class:_vm.backColor,style:(_vm.panelsHeight),attrs:{\"cols\":_vm.panelCols}},[_c('RwPinPanel',{staticStyle:{\"height\":\"100%\"}})],1):_vm._e()]:_vm._e(),(_vm.isMobile)?[_c(VTabs,{staticClass:\"mobile-planner-tabs\",staticStyle:{\"position\":\"relative\",\"width\":\"100%\",\"height\":\"calc(100% - 50px)\"},attrs:{\"id\":\"mobile-panels\",\"show-arrows\":\"\"},model:{value:(_vm.mobilePanelTabsIdx),callback:function ($$v) {_vm.mobilePanelTabsIdx=$$v},expression:\"mobilePanelTabsIdx\"}},[_c(VTabsItems,{style:(`${_vm.mobilePanelsHeight};width:100%;`),attrs:{\"touchless\":\"\"},model:{value:(_vm.mobilePanelTabsIdx),callback:function ($$v) {_vm.mobilePanelTabsIdx=$$v},expression:\"mobilePanelTabsIdx\"}},[_c(VTabItem,{key:0,class:`${_vm.backColor} search-panel`,style:(`${_vm.mobilePanelsHeight};width: 100%;`)},[_c('RwSearchPanel',{style:(_vm.mobilePanelsHeight),on:{\"close\":() => this.mobilePanelTabsIdx=1}})],1),_c(VTabItem,{key:1,style:(`${_vm.mobilePanelsHeight};width:100%`)},[(!!_vm.activeRoute)?_c('RwPlannerMap',{style:(`${_vm.mobilePanelsHeight};width: 100%;`)}):_vm._e()],1),_c(VTabItem,{key:2},[_c('RwPlannerList',{style:(`${_vm.mobilePanelsHeight};width: 100%;`),attrs:{\"forceDropUpdate\":_vm.forceDropUpdateFlag}})],1),_c(VTabItem,{key:3},[_c('RwPinPanel',{style:(_vm.mobilePanelsHeight)})],1),_c(VTabItem,{key:4},[_c('RwPlannerStatus',{style:(_vm.mobilePanelsHeight)})],1)],1)],1),_c('div',{staticStyle:{\"width\":\"100%\",\"display\":\"flex\",\"align-items\":\"center\",\"justify-content\":\"center\",\"flex-wrap\":\"wrap\",\"height\":\"50px\"}},[_c(VBtn,{staticStyle:{\"width\":\"50%\",\"height\":\"100%\"},attrs:{\"disabled\":_vm.mobilePanelTabsIdx <= 1},on:{\"click\":function($event){_vm.mobilePanelTabsIdx -= 1}}},[_c('div',{staticStyle:{\"display\":\"flex\",\"flex-direction\":\"row\"}},[_c(VIcon,[_vm._v(\"mdi-arrow-left\")]),(_vm.mobilePanelTabsIdx === 2)?_c(VIcon,[_vm._v(\"mdi-map\")]):_vm._e(),(_vm.mobilePanelTabsIdx === 3)?_c(VIcon,[_vm._v(\"mdi-view-list\")]):_vm._e(),(_vm.mobilePanelTabsIdx === 4)?_c(VIcon,[_vm._v(\"mdi-flag\")]):_vm._e()],1)]),_c(VBtn,{staticStyle:{\"width\":\"50%\",\"height\":\"100%\"},attrs:{\"disabled\":_vm.mobilePanelTabsIdx >= 4},on:{\"click\":function($event){_vm.mobilePanelTabsIdx += 1}}},[_c('div',{staticStyle:{\"display\":\"flex\",\"flex-direction\":\"row\"}},[(_vm.mobilePanelTabsIdx === 1)?_c(VIcon,[_vm._v(\"mdi-view-list\")]):_vm._e(),(_vm.mobilePanelTabsIdx === 2)?_c(VIcon,[_vm._v(\"mdi-flag\")]):_vm._e(),(_vm.mobilePanelTabsIdx === 3)?_c(VIcon,[_vm._v(\"mdi-chart-timeline\")]):_vm._e(),_c(VIcon,[_vm._v(\"mdi-arrow-right\")])],1)])],1)]:_vm._e()],2):_vm._e(),(_vm.canShowStatusPanel && !_vm.isMobile)?_c(VRow,{staticClass:\"rw-container rw-status-panel\",class:_vm.backColor,style:(_vm.timelineStyle),attrs:{\"align\":\"center\",\"justify\":\"center\",\"no-gutters\":\"\"}},[_c('RwPlannerStatus')],1):_vm._e(),(_vm.space.showSearchOptions)?_c('RwSearchOptions'):_vm._e(),(_vm.space.showRouteOrder)?_c('RwRouteOrder'):_vm._e(),_c('RwRouteSummary'),(_vm.space.showDataLayers)?_c('RwPlannerLayers'):_vm._e(),(_vm.space.showMapOptions)?_c('RwPlannerMapOptions'):_vm._e(),(_vm.globals.showPinPopup)?_c('RwPinPopup'):_vm._e(),(_vm.globals.showClusterPicker)?_c('RwClusterPicker',{on:{\"onClusterPick\":_vm.onClusterPick}}):_vm._e(),(_vm.globals.m_showRoutePicker)?_c('RwRoutePicker',{attrs:{\"init-tab\":0,\"init-src-id\":_vm.globals.m_routePickerSrcId},on:{\"onRoutePick\":_vm.onRoutePick,\"onTasks\":_vm.onCopyMoveTasks}}):_vm._e(),(_vm.globals.showOnboardSettings && (_vm.globals.isPro||_vm.globals.isTeam))?_c('RwOnboardSettings'):_vm._e(),(_vm.space.showDropSelect)?_c('RwPlannerDropSelect',{on:{\"close\":function($event){return _vm.forceDropUpdate()}}}):_vm._e(),(_vm.space.showDropRemove)?_c('RwPlannerDropRemove'):_vm._e(),(_vm.globals.showCCExpire)?_c('RwCCExpirePopup'):_vm._e(),(_vm.globals.showLimitPopup)?_c('RwLimitPopup'):_vm._e(),(_vm.globals.showAddReport)?_c('RwAddCorrectDialog'):_vm._e(),(_vm.globals.showAddMissingReport)?_c('RwAddMissingReportDialog'):_vm._e(),(_vm.globals.showAddMissingReport)?_c('RwAddMissingFinalizeDialog'):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListGroup } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VSnackbar } from 'vuetify/lib/components/VSnackbar';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{ref:\"map\",staticClass:\"rw-inset unselectable\"},[_c(VSnackbar,{attrs:{\"absolute\":\"\",\"top\":true,\"timeout\":500000},model:{value:(_vm.showZoomSnack),callback:function ($$v) {_vm.showZoomSnack=$$v},expression:\"showZoomSnack\"}},[_c('div',{staticClass:\"py-2 px-5 d-flex flex-row\",class:_vm.snackColor},[_c('div',{staticClass:\"flex-grow-1 snack-text text-center\"},[_vm._v(\" \"+_vm._s(_vm.zoomText)+\" \")])])]),(false)?_c(VBtn,{staticStyle:{\"top\":\"20px\",\"background-color\":\"#00000040\"},attrs:{\"dark\":\"\",\"small\":\"\",\"absolute\":\"\",\"left\":\"\",\"fab\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.zoomLevel)+\" \")]):_vm._e(),_c(VBtn,{staticClass:\"mr-2\",staticStyle:{\"top\":\"20px\",\"background-color\":\"#00000040\"},attrs:{\"dark\":\"\",\"small\":\"\",\"absolute\":\"\",\"right\":\"\",\"fab\":\"\"},on:{\"click\":_vm.onMapOptions}},[_c(VIcon,{attrs:{\"color\":\"grey\"}},[_vm._v(\"mdi-settings\")])],1),(!_vm.globals.showSearchPanel)?_c(VMenu,{attrs:{\"close-on-content-click\":false,\"position-x\":_vm.menuX,\"position-y\":_vm.menuY,\"nudge-width\":\"256\",\"absolute\":\"\"},model:{value:(_vm.showMenuMap),callback:function ($$v) {_vm.showMenuMap=$$v},expression:\"showMenuMap\"}},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_c(VIcon,{staticClass:\"mr-2\"},[_vm._v(\"mdi-crosshairs\")]),_vm._v(\" At clicked location: \")],1),_c(VDivider),_c(VListItem,{on:{\"click\":_vm.onMapAddStopHere}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-map-marker\")])],1),_c(VListItemTitle,[_vm._v(\"Add Stop Here\")])],1),_c(VListItem,{on:{\"click\":_vm.onMapAddSiteHere}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-star\")])],1),_c(VListItemTitle,[_vm._v(\"Add Favorite Here\")])],1),(_vm.globals.isDisp)?_c(VListItem,{on:{\"click\":_vm.onMapAddTaskHere}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-clipboard-check\")])],1),_c(VListItemTitle,[_vm._v(\"Add Task Here\")])],1):_vm._e(),_c(VDivider),_c(VListItem,{on:{\"click\":_vm.onMapAddRouteHere}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-routes\")])],1),_c(VListItemTitle,[_vm._v(\"New Route Here\")])],1),_c(VListItem,{on:{\"click\":_vm.onMapSetDefaultHere}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-routes\")])],1),_c(VListItemTitle,[_vm._v(\"Set Default Start Here\")])],1),_c(VListItem,{on:{\"click\":_vm.onMapSetStartHere}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-routes\")])],1),_c(VListItemTitle,[_vm._v(\"Set Route Start Here\")])],1)],1)],1):_vm._e(),_c(VMenu,{attrs:{\"close-on-content-click\":false,\"position-x\":_vm.menuX,\"position-y\":_vm.menuY,\"nudge-width\":\"256\",\"absolute\":\"\"},model:{value:(_vm.showMenuRoutePin),callback:function ($$v) {_vm.showMenuRoutePin=$$v},expression:\"showMenuRoutePin\"}},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_c(VImg,{staticClass:\"mr-2\",staticStyle:{\"max-width\":\"56px\"},attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.pinClickedUrl}}),_vm._v(\" \"+_vm._s(_vm.pinClicked ? _vm.pinClicked.title : '')+\" \")],1),_c(VDivider),_c(VListItem,{on:{\"click\":function($event){return _vm.onRouteView(_vm.activeRoute)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"View Route\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onRouteEdit(_vm.activeRoute)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit Route\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onRouteCopy(_vm.activeRoute)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-content-copy\")])],1),_c(VListItemTitle,[_vm._v(\"Copy Route\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onRouteArchive(_vm.activeRoute)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-archive\")])],1),_c(VListItemTitle,[_vm._v(\"Archive Route\")])],1),_c(VDivider),_c(VListGroup,{attrs:{\"prepend-icon\":\"mdi-chevron-down\",\"no-action\":\"\",\"sub-group\":\"\",\"value\":false},on:{\"click\":_vm.onMoreMenu},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c(VListItemTitle,[_vm._v(\"More Actions\")])]},proxy:true}])},[(_vm.globals.isDisp)?_c(VListItem,{on:{\"click\":function($event){return _vm.onRouteAssign(_vm.activeRoute)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-account\")])],1),_c(VListItemTitle,[_vm._v(\"Assignment\")])],1):_vm._e(),_c(VListItem,{on:{\"click\":function($event){return _vm.onRouteStatus(_vm.activeRoute)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Change Status\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onRouteRelo(_vm.activeRoute)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-crosshairs\")])],1),_c(VListItemTitle,[_vm._v(\"Relocate Start\")])],1)],1)],1)],1),_c(VMenu,{attrs:{\"close-on-content-click\":false,\"position-x\":_vm.menuX,\"position-y\":_vm.menuY,\"nudge-width\":\"256\",\"absolute\":\"\"},model:{value:(_vm.showMenuStopPin),callback:function ($$v) {_vm.showMenuStopPin=$$v},expression:\"showMenuStopPin\"}},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_c(VImg,{staticClass:\"mr-2\",staticStyle:{\"max-width\":\"56px\"},attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.pinClickedUrl}}),_vm._v(\" \"+_vm._s(_vm.pinClicked ? _vm.pinClicked.title : '')+\" \")],1),_c(VDivider),_c(VListItem,{on:{\"click\":_vm.onStopView}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"View Full Stop\")])],1),_c(VListItem,{on:{\"click\":_vm.onStopEdit}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit Stop\")])],1),(_vm.globals.isActionAvailable(_vm.globals.Actions.deleteStops))?_c(VListItem,{on:{\"click\":_vm.onStopDelete}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,[_vm._v(\"Delete Stop\")])],1):_vm._e(),(!_vm.isStopCompleted())?_c(VListItem,{on:{\"click\":_vm.onStopCheckInScreen}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check-circle\")])],1),_c(VListItemTitle,[_vm._v(\"Check-In\")])],1):_c(VListItem,{on:{\"click\":_vm.onStopRestore}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-checkbox-blank-circle\")])],1),_c(VListItemTitle,[_vm._v(\"Restore\")])],1),_c(VDivider),(_vm.canStopShowMore())?_c(VListGroup,{staticStyle:{\"overflow-x\":\"auto\"},attrs:{\"prepend-icon\":\"mdi-chevron-down\",\"no-action\":\"\",\"sub-group\":\"\",\"value\":false},on:{\"click\":_vm.onMoreMenu},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c(VListItemTitle,[_vm._v(\"More Actions\")])]},proxy:true}],null,false,2946050079)},[(_vm.canStopAddSite())?_c(VListItem,{on:{\"click\":_vm.onStopAddSite}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-star\")])],1),_c(VListItemTitle,[_vm._v(\"Create Favorite\")])],1):_vm._e(),(_vm.globals.isDisp)?_c(VListItem,{on:{\"click\":_vm.onStopAddTask}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-clipboard-check\")])],1),_c(VListItemTitle,[_vm._v(\"Create Task\")])],1):_vm._e(),(_vm.canShowSkeds() && !_vm.isStopScheduled())?_c(VListItem,{on:{\"click\":_vm.onStopAddSked}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-calendar-clock\")])],1),_c(VListItemTitle,[_vm._v(\"Add Schedule\")])],1):_vm._e(),(_vm.canShowSkeds() && _vm.isStopScheduled() && _vm.globals.isActionAvailable(_vm.globals.Actions.deleteSked))?_c(VListItem,{on:{\"click\":_vm.onStopRemoveSked}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-calendar-clock\")])],1),_c(VListItemTitle,[_vm._v(\"Remove Schedule: \"+_vm._s(_vm.stopSkedText))])],1):_vm._e(),(!_vm.stopHasDrop())?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onAddDropStop(_vm.pinClicked)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-package-variant\")])],1),_c(VListItemTitle,[_vm._v(\"Add Drop Stop\")])],1):_vm._e(),(_vm.stopHasDrop())?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onAddDropStop(_vm.pinClicked)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-package-variant\")])],1),_c(VListItemTitle,[_vm._v(\"Replace Drop Stop\")])],1):_vm._e(),(_vm.space.canShowRemoveDropStop(_vm.pinClicked))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onRemoveDropStop(_vm.pinClicked)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-package-variant-closed\")])],1),_c(VListItemTitle,[_vm._v(\"Remove Drop Stop (\"+_vm._s(_vm.pinClickedDropStopName)+\")\")])],1):_vm._e(),(_vm.canShowMarkFirst())?_c(VListItem,{on:{\"click\":_vm.onStopMarkFirst}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-first\")])],1),_c(VListItemTitle,[_vm._v(\"Mark First\")])],1):_vm._e(),(_vm.canShowUnmarkFirst())?_c(VListItem,{on:{\"click\":_vm.onStopUnmarkFirst}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-first\")])],1),_c(VListItemTitle,[_vm._v(\"Unmark First\")])],1):_vm._e(),(_vm.canShowMarkFinal())?_c(VListItem,{on:{\"click\":_vm.onStopMarkFinal}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-last\")])],1),_c(VListItemTitle,[_vm._v(\"Mark Final\")])],1):_vm._e(),(_vm.canShowUnmarkFinal())?_c(VListItem,{on:{\"click\":_vm.onStopUnmarkFinal}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-last\")])],1),_c(VListItemTitle,[_vm._v(\"Unmark Final\")])],1):_vm._e(),_c(VListItem,{on:{\"click\":_vm.onStopRelocate}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-crosshairs\")])],1),_c(VListItemTitle,[_vm._v(\"Relocate Pin\")])],1),_c(VListItem,{on:{\"click\":_vm.onStopMoveCopy}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-content-copy\")])],1),_c(VListItemTitle,[_vm._v(\"Move to Another Route\")])],1)],1):_vm._e()],1)],1),_c(VMenu,{attrs:{\"close-on-content-click\":false,\"position-x\":_vm.menuX,\"position-y\":_vm.menuY,\"nudge-width\":\"256\",\"absolute\":\"\"},model:{value:(_vm.showMenuCheckin),callback:function ($$v) {_vm.showMenuCheckin=$$v},expression:\"showMenuCheckin\"}},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_c(VImg,{staticClass:\"mr-2\",staticStyle:{\"max-width\":\"56px\"},attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.pinClickedUrl}}),_vm._v(\" Check In Status: \"+_vm._s(_vm.pinClicked ? _vm.pinClicked.title : '')+\" \")],1),_c(VDivider),(_vm.pinnedStatus.length>0)?_c(VListGroup,{staticStyle:{\"overflow-x\":\"auto\"},attrs:{\"prepend-icon\":\"mdi-chevron-down\",\"no-action\":\"\",\"sub-group\":\"\",\"value\":false},on:{\"click\":_vm.onPinned},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c(VListItemTitle,[_vm._v(\"Pinned\")]),_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pin\")])],1)]},proxy:true}],null,false,1911030987)},[(_vm.pinnedStatus.includes('0'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(0)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-map-marker\")])],1),_c(VListItemTitle,[_vm._v(\"Active (Default)\")])],1):_vm._e(),(_vm.pinnedStatus.includes('1'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(1)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-map-marker\")])],1),_c(VListItemTitle,[_vm._v(\"New\")])],1):_vm._e(),(_vm.pinnedStatus.includes('10'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(10)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Complete (Default)\")])],1):_vm._e(),(_vm.pinnedStatus.includes('11'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(11)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Service Complete\")])],1):_vm._e(),(_vm.pinnedStatus.includes('12'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(12)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Left at Front Door/on Porch\")])],1):_vm._e(),(_vm.pinnedStatus.includes('13'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(13)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Left at Gate/in Lobby\")])],1):_vm._e(),(_vm.pinnedStatus.includes('14'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(14)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Left in Mail Area\")])],1):_vm._e(),(_vm.pinnedStatus.includes('15'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(15)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Handed to Customer\")])],1):_vm._e(),(_vm.pinnedStatus.includes('16'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(16)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Signature Collected\")])],1):_vm._e(),(_vm.pinnedStatus.includes('17'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(17)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Pick-Up Complete\")])],1):_vm._e(),(_vm.pinnedStatus.includes('20'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(20)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Incomplete (Default)\")])],1):_vm._e(),(_vm.pinnedStatus.includes('21'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(21)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Nobody There/Not Open\")])],1):_vm._e(),(_vm.pinnedStatus.includes('22'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(22)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Incorrect Address\")])],1):_vm._e(),(_vm.pinnedStatus.includes('23'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(23)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Address Unreachable\")])],1):_vm._e(),(_vm.pinnedStatus.includes('24'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(24)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Customer Refused\")])],1):_vm._e(),(_vm.pinnedStatus.includes('25'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(25)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Sent Text/Email\")])],1):_vm._e(),(_vm.pinnedStatus.includes('26'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(26)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Called/Left Voicemail\")])],1):_vm._e(),(_vm.pinnedStatus.includes('27'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(27)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Spoke with Customer\")])],1):_vm._e(),(_vm.pinnedStatus.includes('28'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(28)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Left a Note\")])],1):_vm._e(),(_vm.pinnedStatus.includes('29'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(29)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Attempt Again Later\")])],1):_vm._e(),(_vm.pinnedStatus.includes('30'))?_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(30)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,[_vm._v(\"Do Not Re-Attempt\")])],1):_vm._e()],1):_vm._e(),(_vm.pinnedStatus.length>0)?_c(VListGroup,{staticStyle:{\"overflow-x\":\"auto\"},attrs:{\"prepend-icon\":\"mdi-chevron-down\",\"no-action\":\"\",\"sub-group\":\"\",\"value\":false},on:{\"click\":_vm.onComplete},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c(VListItemTitle,[_vm._v(\"Complete\")]),_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1)]},proxy:true}],null,false,2840828843)},[_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(10)}}},[_c(VListItemTitle,[_vm._v(\"Complete (Default)\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(11)}}},[_c(VListItemTitle,[_vm._v(\"Service Complete\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(12)}}},[_c(VListItemTitle,[_vm._v(\"Left at Front Door/on Porch\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(13)}}},[_c(VListItemTitle,[_vm._v(\"Left at Gate/in Lobby\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(14)}}},[_c(VListItemTitle,[_vm._v(\"Left in Mail Area\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(15)}}},[_c(VListItemTitle,[_vm._v(\"Handed to Customer\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(16)}}},[_c(VListItemTitle,[_vm._v(\"Signature Collected\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(17)}}},[_c(VListItemTitle,[_vm._v(\"Pick-Up Complete\")])],1)],1):_vm._e(),(_vm.pinnedStatus.length>0)?_c(VListGroup,{staticStyle:{\"overflow-x\":\"auto\"},attrs:{\"prepend-icon\":\"mdi-chevron-down\",\"no-action\":\"\",\"sub-group\":\"\",\"value\":false},on:{\"click\":_vm.onIncomplete},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c(VListItemTitle,[_vm._v(\"Incomplete\")]),_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1)]},proxy:true}],null,false,2065927900)},[_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(20)}}},[_c(VListItemTitle,[_vm._v(\"Incomplete (Default)\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(21)}}},[_c(VListItemTitle,[_vm._v(\"Nobody There/Not Open\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(22)}}},[_c(VListItemTitle,[_vm._v(\"Incorrect Address\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(23)}}},[_c(VListItemTitle,[_vm._v(\"Address Unreachable\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(24)}}},[_c(VListItemTitle,[_vm._v(\"Customer Refused\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(25)}}},[_c(VListItemTitle,[_vm._v(\"Sent Text/Email\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(26)}}},[_c(VListItemTitle,[_vm._v(\"Called/Left Voicemail\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(27)}}},[_c(VListItemTitle,[_vm._v(\"Spoke with Customer\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(28)}}},[_c(VListItemTitle,[_vm._v(\"Left a Note\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(29)}}},[_c(VListItemTitle,[_vm._v(\"Attempt Again Later\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onCheckInStatus(30)}}},[_c(VListItemTitle,[_vm._v(\"Do Not Re-Attempt\")])],1)],1):_vm._e()],1)],1),_c(VMenu,{attrs:{\"close-on-content-click\":false,\"position-x\":_vm.menuX,\"position-y\":_vm.menuY,\"nudge-width\":\"256\",\"absolute\":\"\"},model:{value:(_vm.showMenuClusterPin),callback:function ($$v) {_vm.showMenuClusterPin=$$v},expression:\"showMenuClusterPin\"}},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_c(VImg,{staticClass:\"mr-2\",staticStyle:{\"max-width\":\"56px\"},attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.pinClickedUrl}}),_vm._v(\" \"+_vm._s(_vm.pinClicked ? _vm.pinClicked.title : '')+\" \")],1),_c(VDivider),_c(VListItem,{on:{\"click\":_vm.onClusterView}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"View Full Cluster\")])],1),_c(VListItem,{on:{\"click\":_vm.onClusterDelete}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,[_vm._v(\"Delete All\")])],1),(!_vm.isClusterCompleted())?_c(VListItem,{on:{\"click\":_vm.onClusterCheckIn}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check-circle\")])],1),_c(VListItemTitle,[_vm._v(\"Check-In All\")])],1):_c(VListItem,{on:{\"click\":_vm.onClusterRestore}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-checkbox-blank-circle\")])],1),_c(VListItemTitle,[_vm._v(\"Restore All\")])],1),_c(VDivider),(_vm.canStopShowMore())?_c(VListGroup,{staticStyle:{\"overflow-x\":\"auto\"},attrs:{\"prepend-icon\":\"mdi-chevron-down\",\"no-action\":\"\",\"sub-group\":\"\",\"value\":false},on:{\"click\":_vm.onMoreMenu},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c(VListItemTitle,[_vm._v(\"More Actions\")])]},proxy:true}],null,false,2946050079)},[(_vm.canStopAddSite())?_c(VListItem,{on:{\"click\":_vm.onStopAddSite}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-star\")])],1),_c(VListItemTitle,[_vm._v(\"Add Favorite\")])],1):_vm._e(),(_vm.canShowSkeds() && !_vm.isStopScheduled())?_c(VListItem,{on:{\"click\":_vm.onStopAddSked}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-calendar-clock\")])],1),_c(VListItemTitle,[_vm._v(\"Add Schedule\")])],1):_vm._e(),(_vm.canShowSkeds() && _vm.isStopScheduled() && _vm.globals.isActionAvailable(_vm.globals.Actions.deleteSked))?_c(VListItem,{on:{\"click\":_vm.onStopRemoveSked}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-calendar-clock\")])],1),_c(VListItemTitle,[_vm._v(\"Remove Schedule: \"+_vm._s(_vm.stopSkedText))])],1):_vm._e(),(_vm.canShowMarkFirst())?_c(VListItem,{on:{\"click\":_vm.onStopMarkFirst}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-first\")])],1),_c(VListItemTitle,[_vm._v(\"Mark First\")])],1):_vm._e(),(_vm.canShowUnmarkFirst())?_c(VListItem,{on:{\"click\":_vm.onStopUnmarkFirst}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-first\")])],1),_c(VListItemTitle,[_vm._v(\"Unmark First\")])],1):_vm._e(),(_vm.canShowMarkFinal())?_c(VListItem,{on:{\"click\":_vm.onStopMarkFinal}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-last\")])],1),_c(VListItemTitle,[_vm._v(\"Mark Final\")])],1):_vm._e(),(_vm.canShowUnmarkFinal())?_c(VListItem,{on:{\"click\":_vm.onStopUnmarkFinal}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-last\")])],1),_c(VListItemTitle,[_vm._v(\"Unmark Final\")])],1):_vm._e(),_c(VListItem,{on:{\"click\":_vm.onStopRelocate}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-crosshairs\")])],1),_c(VListItemTitle,[_vm._v(\"Relocate\")])],1)],1):_vm._e()],1)],1),_c(VMenu,{attrs:{\"close-on-content-click\":false,\"position-x\":_vm.menuX,\"position-y\":_vm.menuY,\"nudge-width\":\"256\",\"absolute\":\"\"},model:{value:(_vm.showMenuSitePin),callback:function ($$v) {_vm.showMenuSitePin=$$v},expression:\"showMenuSitePin\"}},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_c(VImg,{staticClass:\"mr-2\",staticStyle:{\"max-width\":\"56px\"},attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.pinClickedUrl}}),_vm._v(\" \"+_vm._s(_vm.pinClicked ? _vm.pinClicked.title : '')+\" \")],1),_c(VDivider),_c(VListItem,{on:{\"click\":_vm.onSiteView}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"View Full Favorite\")])],1),_c(VListItem,{on:{\"click\":_vm.onSiteEdit}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit Favorite\")])],1),(_vm.globals.isActionAvailable(_vm.globals.Actions.deleteSked))?_c(VListItem,{on:{\"click\":_vm.onSiteDelete}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,[_vm._v(\"Delete Favorite\")])],1):_vm._e(),(!_vm.space.isSiteRouted(_vm.pinClicked))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onSiteToRoute(_vm.pinClicked)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-content-copy\")])],1),_c(VListItemTitle,[_vm._v(\"Add To Route\")])],1):_vm._e(),_c(VDivider),_c(VListGroup,{attrs:{\"prepend-icon\":\"mdi-chevron-down\",\"no-action\":\"\",\"sub-group\":\"\",\"value\":false},on:{\"click\":_vm.onMoreMenu},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c(VListItemTitle,[_vm._v(\"More Actions\")])]},proxy:true}])},[_c(VListItem,{on:{\"click\":_vm.onSiteRelocate}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-crosshairs\")])],1),_c(VListItemTitle,[_vm._v(\"Relocate\")])],1)],1)],1)],1),_c(VMenu,{attrs:{\"close-on-content-click\":false,\"position-x\":_vm.menuX,\"position-y\":_vm.menuY,\"nudge-width\":\"256\",\"absolute\":\"\"},model:{value:(_vm.showMenuTaskPin),callback:function ($$v) {_vm.showMenuTaskPin=$$v},expression:\"showMenuTaskPin\"}},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_c(VImg,{staticClass:\"mr-2\",staticStyle:{\"max-width\":\"56px\"},attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.pinClickedUrl}}),_vm._v(\" \"+_vm._s(_vm.pinClicked ? _vm.pinClicked.title : '')+\" \")],1),_c(VDivider),_c(VListItem,{on:{\"click\":_vm.onTaskView}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"View Full Task\")])],1),_c(VListItem,{on:{\"click\":() => _vm.onTaskEdit()}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit Task\")])],1),_c(VListItem,{on:{\"click\":_vm.onTaskDelete}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,[_vm._v(\"Delete Task\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.space.onTaskToRoute(_vm.pinClicked)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-arrow-right\")])],1),_c(VListItemTitle,[_vm._v(\"Add to Route\")])],1),_c(VDivider),_c(VListGroup,{attrs:{\"prepend-icon\":\"mdi-chevron-down\",\"no-action\":\"\",\"sub-group\":\"\",\"value\":false},on:{\"click\":_vm.onMoreMenu},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c(VListItemTitle,[_vm._v(\"More Actions\")])]},proxy:true}])},[_c(VListItem,{on:{\"click\":_vm.onTaskRelocate}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-crosshairs\")])],1),_c(VListItemTitle,[_vm._v(\"Relocate\")])],1)],1)],1)],1),_c(VMenu,{attrs:{\"close-on-content-click\":false,\"position-x\":_vm.menuX,\"position-y\":_vm.menuY,\"nudge-width\":\"128\",\"absolute\":\"\"},model:{value:(_vm.showMenuDriverPin),callback:function ($$v) {_vm.showMenuDriverPin=$$v},expression:\"showMenuDriverPin\"}},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_c(VImg,{staticClass:\"mr-2\",staticStyle:{\"max-width\":\"56px\"},attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.pinClickedUrl}}),_vm._v(\" \"+_vm._s(_vm.pinClicked ? _vm.pinClicked.title : '')+\" \")],1),_c(VDivider),_c(VListItem,{on:{\"click\":_vm.onDriverView}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-account-multiple\")])],1),_c(VListItemTitle,[_vm._v(\"View Full Driver\")])],1),_c(VListItem,{on:{\"click\":_vm.onDriverEdit}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit User\")])],1),_c(VDivider)],1)],1),_c(VMenu,{attrs:{\"position-x\":_vm.mouseX + 160,\"position-y\":_vm.mouseY + 70,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.showMenuSearchTarget),callback:function ($$v) {_vm.showMenuSearchTarget=$$v},expression:\"showMenuSearchTarget\"}},[_c(VList,[_c(VListItem,{staticClass:\"d-block\",on:{\"click\":_vm.reportTargetAddress}},[_c(VListItemTitle,{staticClass:\"pt-2\"},[_c('div',[_vm._v(\" Report Address Issue \")])]),_c(VListItemSubtitle,{staticClass:\"mt-2 pb-2\"},[_c('div',[_vm._v(\" \"+_vm._s(_vm.reportAddress)+\" \")])])],1)],1)],1),_c(VMenu,{attrs:{\"position-x\":_vm.mouseX + 155,\"position-y\":_vm.mouseY + 70,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.showMenuSearchPin),callback:function ($$v) {_vm.showMenuSearchPin=$$v},expression:\"showMenuSearchPin\"}},[_c(VList,[_c(VListItem,{staticClass:\"d-block\",on:{\"click\":_vm.reportSearchPin}},[_c(VListItemTitle,{staticClass:\"pt-2\"},[_c('div',[_vm._v(\" Report Address Issue \")])]),_c(VListItemSubtitle,{staticClass:\"mt-2 pb-2\"},[_c('div',[_vm._v(\" \"+_vm._s(_vm.reportAddress)+\" \")])])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport moment from \"moment\";\nimport {md5} from \"md5js\";\nimport {Component, Vue, Watch} from \"vue-property-decorator\";\nimport {RwRoute, RwRouteStatusCodes} from \"@/app/dem/RwRoute\";\nimport {RwSite} from \"@/app/dem/RwSite\";\nimport {RwStop} from \"@/app/dem/RwStop\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport {RwMarker, RwPin} from \"@/app/dem/RwPin\";\nimport {\n  RwAddReportEnum,\n  RwAddStatusEnum,\n  RwAddVoteEnum,\n  RwMultiMode,\n  RwMutiModeTool,\n  RwPinTypes,\n  RwRouteCopyType\n} from \"@/app/RwEnums\";\nimport {RwGeoUtils} from \"@/app/utils/RwGeoUtils\";\nimport {RwSysUtils} from \"@/app/utils/RwSysUtils\";\nimport {RwConstants} from \"@/app/RwConstants\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views//planner/RwPlannerSpace\";\nimport {RwViewUtils} from \"@/app//utils/RwViewUtils\";\nimport {RwTextUtils} from \"@/app/utils/RwTextUtils\";\nimport {RwDeltas} from \"@/app/dal/RwDeltas\";\nimport RwAddReport from \"@/app/dem/RwAddReport\";\nimport RwEventBus from \"@/utils/RwEventBus\";\nimport RwEvents from \"@/app/consts/RwEvents\";\nimport theSettingSpace, {RwSettingSpace} from \"@/app/views/account/RwSettingSpace\";\nimport {PODDefaultSettings} from \"@/app/dem/ProofOfDelivery/ProofOfDeliveryEnums\";\nimport {RwStopAddOns} from \"@/app/dem/RwStopAddOns\";\n\n@Component\nexport default class RwPlannerMap extends Vue {\n\n\n  //#region Props\n\n  map: H.Map;\n  mapui: H.ui.UI;\n  platform: H.service.Platform;\n  darkRouteActiveStyle: H.map.Style;\n  startPinZIndex = 300;\n  mapBehaviors: H.mapevents.Behavior;\n  isLassoMode: boolean = false;\n  defaultLayers: H.service.Platform.MapTypes31;\n  polySelectGroup: H.map.Group;\n  mapGroupRoute: H.map.Group;\n  mapGroupSites: H.map.Group;\n  mapGroupTasks: H.map.Group;\n\n  mouseDownTime: moment.Moment;\n  mouseX: number = 0;\n  mouseY: number = 0;\n  menuX: number = 0;\n  menuY: number = 0;\n\n  polyPoints: H.geo.Point[] = [];\n  polySelector: H.map.Polygon;\n  dragViewportX: number;\n  dragViewportY: number;\n  polyString: string = null;\n  polyLine: H.map.Polyline;\n  lineStr: H.geo.LineString;\n\n  isMapReady = false;\n  isRenderedRoute = false;\n  lastZoomedRouteId = \"\";\n  lastRenderedRouteId = \"\";\n  lastRenderedStopCount = 0;\n  lastRouteLoadTime = 0;\n  m_showMenuMap = false;\n  showMenuStopPin = false;\n  showMenuCheckin = false;\n  showMenuSitePin = false;\n  showMenuRoutePin = false;\n  showMenuTaskPin = false;\n  showMenuDriverPin = false;\n  showMenuClusterPin = false;\n  showMenuSearchTarget = false;\n  showMenuSearchPin = false;\n  m_zoomLevel: number = 0;\n  trafficLayer: H.map.layer.TileLayer;\n  incidentsLayer: H.map.layer.TileLayer;\n  isPinClick = false;\n  isMapDoubleClick = false;\n  isPinDoubleClick = false;\n  isSearchPinClick = false;\n  searchId = \"\";\n\n  searchTarget = null;\n  searchMarker: RwMarker[] = [];\n\n  currentPath = null;\n\n  private timeOfLastPinClick;\n  private pinClicked: RwPin = null;\n  private reticle: RwMarker;\n  private lastDrvLoc = {lat: 0, lng: 0};\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get settingSpace(): RwSettingSpace {\n    return theSettingSpace;\n  }\n\n  get stopPins(): RwPin[] {\n    return this.space.stopPins;\n  }\n\n  get sitePins(): RwPin[] {\n    return this.space.sitePins;\n  }\n\n  get showZoomSnack(): boolean {\n    let showZoom = false;\n    if (this.globals.showSearchPanel && Number(this.zoomLevel) <= 9) {\n      showZoom = true;\n    }\n    return showZoom;\n  }\n\n  get zoomText(): string {\n    if (this.zoomLevel < 7) {\n      return \"Zoom in to activate search.\"\n    } else {\n      return \"Zoom map to local area for most accurate results.\"\n    }\n  }\n\n  get snackColor(): string {\n    if (this.zoomLevel < 7) {\n      return \"error\";\n    } else {\n      return \"primary\";\n    }\n  }\n\n\n  get mapShowTraffic(): boolean {\n    return this.space.mapShowTraffic;\n  }\n\n  get mapShowIncidents(): boolean {\n    return this.space.mapShowIncidents;\n  }\n\n  get mapShowSatellite(): boolean {\n    return this.space.mapShowSatellite;\n  }\n\n  get multiModeTool(): RwMutiModeTool {\n    return this.space.multiModeTool;\n  }\n\n  get selectMode(): RwMultiMode {\n    return this.space.multiMode;\n  }\n\n  get activeRoute(): RwRoute {\n    return this.space.activeRoute;\n  }\n\n  get isDarkMode(): boolean {\n    return this.globals.isDarkMode;\n  }\n\n  get isSimpleMap(): boolean {\n    return this.globals.isSimpleMap;\n  }\n\n  get sizeDelta(): number {\n    return this.space.sizeDelta;\n  }\n\n  get isMultiMode(): boolean {\n    return this.space.multiMode != RwMultiMode.none;\n  }\n\n  get pinClickedUrl() {\n    let url = ''\n    if (this.pinClicked) {\n      url = this.pinClicked.dataUrl ? this.pinClicked.dataUrl : ''\n    }\n    return url;\n  }\n\n  get pinnedStatus(): string[] {\n    return this.globals.pinnedStatus;\n  }\n\n  get reportAddress(): string {\n    if (this.isSearchPinClick) {\n      const report = this.space.searchReportInfo.find(i => i.entityId === this.searchId);\n      if (report) {\n        return report.address;\n      }\n    } else {\n      return this.space.selectedSearchResult ? this.space.selectedSearchResult.address : \"\";\n    }\n\n  }\n\n  canStopShowMore(): boolean {\n    let canShow = false;\n    if (this.pinClicked && this.pinClicked.stop) {\n      let stop = this.pinClicked.stop;\n      if (!stop.isComplete) {\n        canShow = true;\n      }\n    }\n    return canShow;\n  }\n\n  canStopAddSite(): boolean {\n    let canShow = false;\n    if (this.pinClicked && this.pinClicked.stop) {\n      let stop = this.pinClicked.stop;\n      //console.log(\"RwPlannerMap.isStopSited\", stop.name);\n      canShow = !stop.isSited;\n    }\n    return canShow;\n  }\n\n  isStopScheduled(): boolean {\n    let gotSked = false;\n    if (this.pinClicked && this.pinClicked.stop) {\n      let stop = this.pinClicked.stop;\n      gotSked = stop.isScheduled;\n      //console.log(\"isStopScheduled gotSked skedId, priority\", gotSked, stop.skedId, stop.priority);\n    }\n    return gotSked;\n  }\n\n  stopHasDrop(): boolean {\n    let hasDrop = false;\n    if (this.pinClicked && this.pinClicked.stop) {\n      let stop = this.pinClicked.stop;\n      hasDrop = stop.hasDrops();\n    }\n    return hasDrop;\n  }\n\n  get pinClickedDropStopName(): string {\n    if (this.stopHasDrop()) {\n      let dropStop = this.pinClicked?.stop?.getDrop();\n      if (dropStop) {\n        return dropStop.name;\n      }\n    } else {\n      return \"\";\n    }\n  }\n\n  get stopSkedText(): string {\n    let text: string;\n    if (this.pinClicked && this.pinClicked.stop) {\n      let stop = this.pinClicked.stop;\n      text = stop.skedText;\n    }\n    return text;\n  }\n\n  isStopCompleted(): boolean {\n    let isSited = false;\n    if (this.pinClicked && this.pinClicked.stop) {\n      let stop = this.pinClicked.stop;\n      isSited = stop.isComplete;\n    }\n    return isSited;\n  }\n\n  canShowMarkFirst(): boolean {\n    let show = false;\n    let route = this.activeRoute;\n    if (this.pinClicked && this.pinClicked.stop && route) {\n      let stop = this.pinClicked.stop;\n      show = !stop.isMarkedFirst(route);\n    }\n    return show;\n  }\n\n  canShowSkeds(): boolean {\n    let show = false;\n    let route = this.activeRoute;\n    if (this.pinClicked && this.pinClicked.stop && route) {\n      let stop = this.pinClicked.stop;\n      show = (stop.isMarkedFirst(route) || stop.isMarkedFinal(route)) == false;\n    }\n    return show;\n  }\n\n  canShowMarkFinal(): boolean {\n    let show = false;\n    let route = this.activeRoute;\n    if (this.pinClicked && this.pinClicked.stop && route) {\n      let stop = this.pinClicked.stop;\n      show = !stop.isMarkedFinal(route);\n    }\n    return show;\n  }\n\n  canShowUnmarkFirst(): boolean {\n    let show = false;\n    let route = this.activeRoute;\n    if (this.pinClicked && this.pinClicked.stop && route) {\n      let stop = this.pinClicked.stop;\n      show = route.isFirstStop(stop)\n    }\n    return show;\n  }\n\n  canShowUnmarkFinal(): boolean {\n    let show = false;\n    let route = this.activeRoute;\n    if (this.pinClicked && this.pinClicked.stop && route) {\n      let stop = this.pinClicked.stop;\n      show = route.isFinalStop(stop)\n    }\n    return show;\n  }\n\n  get zoomLevel(): number {\n    // console.warn(\"zoom level get: \", this.m_zoomLevel);\n    return this.m_zoomLevel\n  }\n\n  set zoomLevel(val: number) {\n    this.m_zoomLevel = val;\n    this.space.zoomLevel = val;\n  }\n\n  get showMenuMap(): boolean {\n    return this.m_showMenuMap\n  }\n\n  set showMenuMap(val: boolean) {\n    if (val) {\n      if (!this.globals.showSearchPanel) {\n        this.showMarkerReticle();\n      } else {\n        val = false;\n      }\n    } else {\n      this.hideMarkerReticle();\n    }\n    this.m_showMenuMap = val;\n  }\n\n  get mouseOffsetX(): number {\n    return this.mouseX + (this.globals.isOpenDrawer ? 104 : 32);\n  }\n\n\n  //#endregion Props\n\n\n  //#region Watchers\n\n  @Watch(\"sizeDelta\")\n  watchPlannerSizeDelta(val: boolean) {\n    this.resizeMapViewDelayed(100);\n  }\n\n  @Watch(\"isDarkMode\")\n  watchIsDarkMode(isDark: boolean) {\n    this.setMapStyle();\n    this.$forceUpdate();\n  }\n\n  @Watch(\"globals.showSearchPanel\")\n  watchIsSearchExit(val: boolean) {\n    if (!this.globals.showSearchPanel) {\n      this.resizeMapView();\n      this.zoomToRoute(true);\n      // console.warn(\"search exit triggered\");\n    } else {\n      this.showMenuMap = false;\n    }\n  }\n\n  @Watch(\"activeRoute\")\n  watchActiveRoute(val: number) {\n    //console.log(\"watchActiveRoute\");\n    if (this.isMapReady) {\n      this.refreshRoute();\n    }\n  }\n\n  @Watch(\"activeRoute.stops\")\n  watchActiveRouteStops() {\n    if (this.isMapReady) this.refreshRoute();\n  }\n\n  @Watch(\"activeRoute\", {deep: true})\n  watchActiveRoutePath(val) {\n    if (this.currentPath !== val.path) {\n      this.currentPath = val.path;\n      //this.setMapStyle();\n    }\n  }\n\n  @Watch(\"globals.refreshRouteTrigger\")\n  watchRefreshRouteTrigger(route: RwRoute) {\n    //console.log(\"watchRefreshRouteTrigger\");\n    if (this.isMapReady) {\n      this.refreshRoute();\n    }\n  }\n\n  oldPins: any[] = [...this.space.stopPins.map(sp => JSON.stringify(RwPin.toJSON(sp)))] || [];\n  lastStopsHash: number;\n\n  @Watch(\"space.stopPins\")\n  watchStopPins(pins: RwPin[]) {\n    //console.log(\"Map.watchStopPins\");\n    const parsedPins = pins.map(p => JSON.stringify(RwPin.toJSON(p)));\n    if (this.isMapReady) {\n      let refresh = false;\n      if (this.oldPins.length != pins.length) {\n        refresh = true;\n      } else {\n        for (let op of this.oldPins) {\n          const parsedOp = JSON.parse(op);\n          let pinExists = false;\n          for (let p of pins) {\n            if (p.id == parsedOp.id) {\n              pinExists = true;\n              if (JSON.stringify(RwPin.toJSON(p)) !== op) {\n                refresh = true;\n              }\n            }\n          }\n          if (!pinExists) refresh = true;\n          if (refresh) break;\n        }\n      }\n      if (refresh) {\n        this.oldPins = [...pins.map(p => JSON.stringify(RwPin.toJSON(p)))];\n        this.refreshRoute();\n      }\n    }\n  }\n\n  @Watch(\"space.sitePins\")\n  watchSitePins(sites: RwPin[]) {\n    this.space.sitePins;\n    //console.log(\"Map.watchSitePins\");\n    this.refreshSites()\n    this.refreshStopPinsBySites();\n  }\n\n  refreshStopPinsBySites() {\n    this.stopPins.forEach(stopPin => {\n      if (stopPin.stop.getSite()) {\n        let currHash = stopPin.urlHash;\n        RwPin.updateStopPin(stopPin, stopPin.stop);\n        if (currHash !== stopPin.urlHash) {\n          this.removePinFromMap(stopPin);\n          let url = this.globals.idxURL[stopPin.urlHash];\n          if (url && url.length > 0) {\n            this.addPin(stopPin, url, stopPin.zIndex, null, 1);\n          } else {\n            stopPin\n                .dataUrlAsync()\n                .then(pinUrl => this.addPin(stopPin, pinUrl, stopPin.zIndex, null, 1));\n          }\n        }\n      }\n    });\n  }\n\n  @Watch(\"space.taskPins\")\n  watchTaskPins(tasks: RwPin[]) {\n    //console.log(\"Map.watchTaskPins\");\n    this.refreshTasks();\n  }\n\n  @Watch(\"globals.drivers\")\n  watchDriverPins(tasks: RwPin[]) {\n    //console.warn('watchDriverPins');\n    //this.refreshDrivers();\n  }\n\n  @Watch(\"isMapReady\")\n  watchMapReady(isReady: boolean) {\n    const isFirstTime = this.isRenderedRoute == false;\n    //console.log(\"RwMapView.watch isMapReady, isFirstTime:\", isReady, isFirstTime);\n    if (isFirstTime) {\n      this.refreshAll();\n    }\n  }\n\n  @Watch(\"selectMode\")\n  watchSelectMode(val: RwMultiMode) {\n\n    const self = this;\n    const SOURCE = \"RwPlannerMap.watchSelectMode\";\n    //console.error(SOURCE);\n\n    if (self.space.selectedPins.length > 0) {\n      this.space.clearPinSelections();\n    }\n\n    if (self.isMultiMode) {\n\n      switch (val) {\n        case RwMultiMode.stops:\n          self.mapGroupRoute.setVisibility(true);\n          self.mapGroupSites.setVisibility(false);\n          self.mapGroupTasks.setVisibility(false);\n          break;\n\n        case RwMultiMode.sites:\n          self.mapGroupRoute.setVisibility(false);\n          self.mapGroupSites.setVisibility(true);\n          self.mapGroupTasks.setVisibility(false);\n          break;\n\n        case RwMultiMode.tasks:\n          self.mapGroupRoute.setVisibility(false);\n          self.mapGroupSites.setVisibility(false);\n          self.mapGroupTasks.setVisibility(true);\n          break;\n\n        default:\n          RwLog.error(SOURCE, \"WTF: watchSelectMode SelectMode not found:\" + val);\n          break;\n      }\n\n    } else {\n      self.mapBehaviors.enable(H.mapevents.Behavior.DRAGGING);\n      self.mapBehaviors.enable(H.mapevents.Behavior.DBLTAPZOOM);\n      self.mapGroupRoute.setVisibility(RwPrefUtils.showDataLayerRoute);\n      self.mapGroupSites.setVisibility(RwPrefUtils.showDataLayerSites);\n      self.mapGroupTasks.setVisibility(RwPrefUtils.showDataLayerTasks);\n    }\n\n\n    this.resizeMapView();\n  }\n\n  @Watch(\"space.selectedPins\")\n  watchSelectedPins(newVals: RwPin[]) {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.watchSelectedPins\"\n    //console.error(SOURCE);\n\n    let deltas = RwDeltas.getDeltas(newVals, this.space.priorSelectPins, this.space.lastRefreshSelects);\n    if (deltas.gotAdds || deltas.gotRemoves) {\n      //console.log(SOURCE, `adds:${deltas.adds.length}, removes:${deltas.removes.length}`);\n\n      if (deltas.removes.length > 0) {\n        deltas.removes.forEach(p => {\n\n          //console.log(SOURCE, \"updatePin DESELECT\", p.title, p.zIndex);\n          self.updatePin(p);\n\n          let cluster = p.clusterParent;\n          if (cluster) {\n            //console.log(SOURCE, \"updatePin DESELECT CLUSTER\", cluster.title, cluster.selectRatio());\n            self.updatePin(cluster)\n          }\n        });\n      }\n\n\n      let focusId = self.globals.targetFocusId;\n      if (deltas.adds.length > 0) {\n        deltas.adds.forEach(p => {\n          //console.log(SOURCE, \"updatePin SELECT\", p.title, p.zIndex);\n\n          self.updatePin(p);\n          let eid = p.eid;\n          if (focusId && focusId === eid) {\n            //console.log(SOURCE, \"focusPin\", p.title, eid == focusId, eid);\n            self.focusPin(p, true, false);\n          }\n\n          let cluster = p.clusterParent;\n          if (cluster) {\n            //console.log(SOURCE, \"updatePin SELECT CLUSTER\", cluster.title, cluster.selectRatio());\n            self.updatePin(cluster)\n          }\n\n        });\n      }\n\n\n      this.space.lastRefreshSelects = Date.now();\n      this.space.priorSelectPins = [...newVals];\n\n    } else {\n      // let priors = this.space.priorSelectPins;\n      // let priorName = (priors.length > 0) ? priors[0].title : \"\";\n      //console.error(SOURCE, \"SKIP NO DELTAS\", priors.length, priorName);\n      //console.error(SOURCE, \"SKIP NO DELTAS\");\n    }\n  }\n\n  @Watch(\"mapShowTraffic\")\n  watchShowTraffic(val: boolean) {\n    this.setMapStyle();\n  }\n\n  @Watch(\"mapShowIncidents\")\n  watchShowTrafficIncidents(val: boolean) {\n    this.setMapStyle();\n  }\n\n  @Watch(\"mapShowSatellite\")\n  watchMapShowSatellite(val: boolean) {\n    this.setMapStyle();\n  }\n\n  @Watch(\"space.showDataLayerRoute\")\n  watchShowDataLayerRoute(val: boolean) {\n    //console.log(\"RwMapView.watchShowDataLayerRoute:\", val);\n    if (val) {\n      this.mapGroupRoute.setVisibility(true);\n      this.refreshRoute();\n    } else {\n      this.mapGroupRoute.setVisibility(false);\n    }\n    this.setMapStyle();\n  }\n\n  @Watch(\"space.showDataLayerSites\")\n  watchShowLayerSites(val: boolean) {\n    //console.log(\"RwMapView.showDataLayerSites:\", val);\n    if (val) {\n      this.refreshSites();\n      this.mapGroupSites.setVisibility(true);\n    } else {\n      this.mapGroupSites.setVisibility(false);\n    }\n  }\n\n  @Watch(\"space.showDataLayerTasks\")\n  watchShowDataLayerTasks(val: boolean) {\n    //console.log(\"RwMapView.showDataLayerTasks:\", val);\n    if (val) {\n      this.refreshTasks();\n      this.mapGroupTasks.setVisibility(true);\n    } else {\n      this.mapGroupTasks.setVisibility(false);\n    }\n  }\n\n  @Watch(\"globals.centerMapData\")\n  watchCenterMap(val: { lat: number, lng: number }) {\n    this.clearSearchTargets();\n\n    if (val.lat != 0 || val.lng != 0) {\n      const centroid = new H.geo.Point(val.lat, val.lng);\n      const icon = new H.map.DomIcon(RwPin.searchPinSVG);\n      this.searchTarget = new H.map.DomMarker(centroid, {icon});\n      this.map.addObject(this.searchTarget);\n      this.map.setCenter(centroid, true);\n    }\n  }\n\n\n  @Watch(\"space.mapCentroid\")\n  watchCentroid(val: { lat: number, lng: number, zoom: number }) {\n    //console.log(\"watchCentroid => \", val.lat, val.lng, val.zoom)\n\n    if (val.lat != 0 || val.lng != 0) {\n      const centroid = new H.geo.Point(val.lat, val.lng);\n\n      if (val.zoom != 0) {\n        RwViewUtils.mapSetViewPoint(this.map, centroid, val.zoom, true);\n      } else {\n        this.map.setCenter(centroid, true);\n      }\n    }\n  }\n\n\n  @Watch(\"space.searchPinData\")\n  watchSearchPin(val: { pinType: RwPinTypes, lat: number, lng: number, id: string }) {\n\n    const self = this;\n    //console.log(\"watchSearchPin\")\n    this.clearSearchTargets();\n    if (val.lat != 0 || val.lng != 0) {\n      let args = this.createSearchPinArgs(val);\n      let hash = RwPin.getPinHash(args);\n      let cachedUrl = this.globals.idxURL[hash];\n      if (cachedUrl) {\n        //console.log(\"watchSearchPin cachedUrl\", cachedUrl)\n        self.addSearchMarker(val, cachedUrl);\n      } else {\n        switch (val.pinType) {\n          case RwPinTypes.Route: {\n            let route = self.globals.activeRoute;\n            if (route != null) {\n              let args = {typ: RwPinTypes.Route, sub: route.subType};\n              let url = RwPin.getRoutePinUrl(args);\n              //console.log(\"watchSearchPin route url\", url)\n              self.addSearchMarker(val, url);\n            }\n            break;\n          }\n          case RwPinTypes.Stop: {\n            RwPin.calcStopPinUrl(hash, args)\n                .then(dataUrl => {\n                  //console.log(\"watchSearchPin stop dataUrl\", dataUrl)\n                  self.addSearchMarker(val, dataUrl);\n                });\n            break;\n          }\n          case RwPinTypes.Site: {\n            RwPin\n                .calcSitePinUrlNew(hash, args)\n                .then(dataUrl => {\n                  //console.log(\"watchSearchPin site dataUrl\", dataUrl)\n                  self.addSearchMarker(val, dataUrl);\n                });\n            break;\n          }\n          case RwPinTypes.Task: {\n            RwPin\n                .calcTaskPinUrl(hash, args)\n                .then(dataUrl => {\n                  //console.log(\"watchSearchPin task dataUrl\", dataUrl)\n                  self.addSearchMarker(val, dataUrl);\n                });\n            break;\n          }\n          default:\n            break;\n        }\n      }\n\n    }\n  }\n\n  @Watch(\"space.showDropSelect\")\n  watchDropStopSelect(val) {\n    if (!val) this.updatePin(this.pinClicked);\n  }\n\n  @Watch(\"space.showDropRemove\")\n  watchDropStopRemove(val) {\n    if (!val) this.updatePin(this.pinClicked);\n  }\n\n  @Watch(\"space.activeRoute.isDynLoc\")\n  watchIsDynLoc(val) {\n    if (this.space.startPin && this.space.startPin.marker &&\n        (this.space.activeRoute.lat != 0 || this.space.activeRoute.lng != 0)) {\n      let startPin = this.space.startPin;\n      if (!this.space.activeRoute.isDynLoc) {\n        startPin.lat = this.space.activeRoute.lat;\n        startPin.lng = this.space.activeRoute.lng;\n        startPin.type = RwPinTypes.Route;\n        setTimeout(() => {\n          this.updatePin(startPin);\n          this.updateMarkerPosition(startPin, startPin.marker);\n        }, 500);\n      }\n    }\n  }\n\n  private addSearchMarker(val: { pinType: RwPinTypes; lat: number; lng: number, id: string }, dataUrl: string) {\n    const self = this;\n    let iconSize: H.math.ISize = self.globals.getIconSize(val.pinType);\n    let anchor = self.globals.getAnchorPoint(val.pinType);\n    let iconOpts = {} as H.map.Icon.Options;\n    if (anchor) iconOpts.anchor = anchor;\n    if (iconSize) iconOpts.size = iconSize;\n    self.globals.getIcon(dataUrl, iconOpts)\n        .then(icon => {\n          let markerLoc = {lat: val.lat, lng: val.lng};\n          let hereMarker = new H.map.Marker(markerLoc, {icon: icon});\n          let searchM = hereMarker as RwMarker;\n          searchM.searchId = val.id;\n          self.searchMarker.push(searchM);\n          self.map.addObject(searchM);\n          //this.map.setCenter(centroid, true);\n        });\n  }\n\n\n  private createSearchPinArgs(val: { pinType: RwPinTypes; lat: number; lng: number }) {\n    let args: any;\n    switch (val.pinType) {\n        //@formatter:off\n      case RwPinTypes.Route:\n        args = {typ: RwPinTypes.Route};\n        break;\n      case RwPinTypes.Stop:\n        args = {typ: RwPinTypes.Stop, color: RwPrefUtils.stopColor};\n        break;\n      case RwPinTypes.Site:\n        args = {typ: RwPinTypes.Site, color: RwPrefUtils.siteColor};\n        break;\n      case RwPinTypes.Task:\n        args = {typ: RwPinTypes.Task, color: RwPrefUtils.taskColor};\n        break;\n      default:\n        break;\n        //@formatter:on\n    }\n    return args;\n  }\n\n\n  private clearSearchMarkers() {\n    if (this.searchTarget) {\n      this.map.removeObject(this.searchTarget);\n      this.searchTarget = null;\n    }\n\n    this.searchMarker.forEach(item => this.map.removeObject(item))\n    this.searchMarker = [];\n  }\n\n  clearSearchTargets() {\n    if (this.searchTarget) {\n      this.map.removeObject(this.searchTarget);\n      this.searchTarget = null;\n    }\n  }\n\n  @Watch(\"globals.showSearchPanel\")\n  watchShowSearchPanel(isSearchMode: boolean) {\n    const self = this;\n    //console.log(\"MAP watchShowSearchPanel\", isSearchMode)\n    this.clearSearchMarkers();\n    if (isSearchMode) {\n      self.mapGroupRoute.setVisibility(false);\n      self.mapGroupSites.setVisibility(false);\n      self.mapGroupTasks.setVisibility(false);\n    } else {\n      self.mapGroupRoute.setVisibility(self.space.showDataLayerRoute);\n      self.mapGroupSites.setVisibility(self.space.showDataLayerSites);\n      self.mapGroupTasks.setVisibility(self.space.showDataLayerTasks);\n    }\n  }\n\n\n  //#endregion Watchers\n\n\n  //#region Map Config\n\n  private mapInit() {\n    this.platform = new H.service.Platform({\n      'apikey': RwConstants.hereApiKey\n    });\n\n    const options: H.Map.Options = {\n      zoom: RwPrefUtils.viewZoom,\n      center: { lat: RwPrefUtils.viewCenterLat, lng: RwPrefUtils.viewCenterLng },\n      engineType: H.Map.EngineType['HARP'],\n      pixelRatio: window.devicePixelRatio > 1 ? 2 : 1\n    };\n    this.defaultLayers = this.platform.createDefaultLayers({\n      tileSize: 512, // Use 512 for high-resolution tiles\n      engineType: H.Map.EngineType['HARP'],\n    });\n    this.baseSatelliteLayer = this.defaultLayers.raster.satellite.map;\n\n    let mapContainer = this.$refs.map as Element;\n    this.map = new H.Map(mapContainer, this.defaultLayers.vector.normal.map, options);\n\n    let events = new H.mapevents.MapEvents(this.map);\n    this.mapBehaviors = new H.mapevents.Behavior(events);\n    this.mapui = H.ui.UI.createDefault(this.map, this.defaultLayers);\n\n    this.configMapControls();\n    this.configMapEvents();\n    this.setMapStyle();\n    this.configGroups();\n\n    this.isMapReady = true;\n    this.updateDynamicRouteStart();\n  }\n\n  private configMapControls() {\n    //console.log(`RwPlannerMap.configMapControls started`);\n    this.mapui?.getControl(\"mapsettings\").setVisibility(false);\n\n    const zoom = this.mapui?.getControl('zoom');\n    zoom?.setAlignment(H.ui.LayoutAlignment.RIGHT_MIDDLE);\n    const imprint = this.map.getImprint();\n    if (imprint) {\n      if (this.globals.isDarkMode) {\n        imprint.setOptions({invert: true});\n      } else {\n        imprint.setOptions({invert: false});\n      }\n    }\n  }\n\n\n  private configGroups() {\n    //console.log(`RwPlannerMap.configGroups started`);\n\n    this.mapGroupSites = new H.map.Group({volatility: false, visibility: true, zIndex: 3});\n    this.mapGroupTasks = new H.map.Group({volatility: false, visibility: true, zIndex: 2});\n    this.mapGroupRoute = new H.map.Group({volatility: false, visibility: true, zIndex: 1});\n\n    this.map.addObject(this.mapGroupSites);\n    this.map.addObject(this.mapGroupTasks);\n    this.map.addObject(this.mapGroupRoute);\n\n    this.mapGroupRoute.setZIndex(1);\n    this.mapGroupTasks.setZIndex(3);\n    this.mapGroupSites.setZIndex(4);\n  }\n\n  baseSatelliteLayer: H.map.layer.TileLayer = null;\n\n  private setMapStyle() {\n    if (this.map) {\n      //Clear layers\n      let layers = this.map.getLayers();\n      layers.asArray().forEach(l => {\n        this.map.removeLayer(l);\n      })\n\n      //Set Base Layer [Satellite, Street]\n      if (RwPrefUtils.mapShowSatellite) {\n        this.map.setBaseLayer(this.defaultLayers.raster.satellite.map);\n      } else {\n        const baseLayer =  this.isDarkMode ? this.defaultLayers.vector.normal.mapnight : this.defaultLayers.vector.normal.map;\n        this.map.setBaseLayer(baseLayer);\n      }\n\n      if (this.mapShowTraffic) {\n        this.map.addLayer(this.defaultLayers.vector.traffic.map);\n      } else {\n        const idxTraffic = layers.indexOf(this.defaultLayers.vector.traffic.map);\n        if (idxTraffic >= 0) {\n          layers.removeAt(idxTraffic);\n        }\n      }\n\n      this.resizeMapViewDelayed(1000);\n    }\n  }\n\n  //#endregion\n\n\n  //#region Map Events\n\n  reportSearchPin() {\n    const SOURCE = \"RwPlannerMap.reportSearchPin\";\n    if (this.searchId) {\n      const report = this.space.searchReportInfo.find(i => i.entityId === this.searchId);\n      RwLog.consoleLog(\"Reporting \", report);\n      this.globals.showAddMissingReport = false;\n      this.globals.showAddReport = true;\n      this.globals.addReport = report;\n      this.globals.showSearchPanel = false;\n      this.showMenuSearchPin = false;\n      this.globals.showReloPicker(\"\", report.lat, report.lng, false, true)\n          .then(geoPoint => {\n            this.globals.addReport.lngDelta = geoPoint.lng;\n            this.globals.addReport.latDelta = geoPoint.lat;\n            this.globals.addReport.step = 1;\n          })\n          .catch(() => {\n            RwLog.error(SOURCE, `Error with relo picker correcting address \\n\\t Report:${JSON.stringify(report)}`);\n          });\n    }\n  }\n\n  reportTargetAddress() {\n    const SOURCE = \"RwPlannerMap.reportTargetAddress\";\n    if (this.space.selectedSearchResult) {\n      const searchResult = this.space.selectedSearchResult;\n      RwLog.consoleLog(\"Reporting \", searchResult);\n      let report = new RwAddReport();\n      report.status = RwAddStatusEnum.Pending;\n      report.type = RwAddReportEnum.Correction;\n      report.vote = RwAddVoteEnum.Indeterminate;\n      report.name = searchResult.name;\n      report.lat = searchResult.lat;\n      report.lng = searchResult.lng;\n      report.address = searchResult.address;\n      report.userId = this.globals.userId;\n      report.viewPort = `${RwPrefUtils.viewWest.toFixed(6)},${RwPrefUtils.viewSouth.toFixed(6)},\n      ${RwPrefUtils.viewEast.toFixed(6)},${RwPrefUtils.viewNorth.toFixed(6)}`; // W S E N\n      report.query = searchResult.query;\n      report.message = `Correction for ${report.name}`;\n      this.globals.showAddMissingReport = false;\n      this.globals.showAddReport = true;\n      this.globals.addReport = report;\n      this.globals.showSearchPanel = false;\n      this.showMenuSearchTarget = false;\n      this.globals.showReloPicker(\"\", report.lat, report.lng, false, true)\n          .then(geoPoint => {\n            this.globals.addReport.lngDelta = geoPoint.lng;\n            this.globals.addReport.latDelta = geoPoint.lat;\n            this.globals.addReport.step = 1;\n          })\n          .catch(() => {\n            RwLog.error(SOURCE, `Error with relo picker correcting address \\n\\t Report:${JSON.stringify(report)}`);\n\n          });\n    }\n\n\n  }\n\n  configMapEvents() {\n    this.map.addEventListener('pointerdown', this.onPointerDown);\n    this.map.addEventListener('pointerup', this.onPointerUp);\n\n    this.map.addEventListener('drag', this.onDrag);\n    this.map.addEventListener('dragend', this.onDragEnd);\n    this.map.addEventListener(\"mapviewchangeend\", () => {\n      this.saveViewPort();\n      this.resizeMapView();\n      this.zoomLevel = Number(this.map.getZoom().toFixed(1));\n    });\n\n\n    //self.map.addEventListener('tap', function(evt) {console.log(evt.type, \"onTap\");});\n    //self.map.addEventListener('dbltap', self.onDoubleClick);\n    // self.map.addEventListener('tap', self.onTap);\n    this.map.addEventListener('longpress', this.onLongPress);\n    // self.map.addEventListener(\"pointermove\", self.onPointerMove);\n    //self.map.addEventListener('dragstart', function(evt:any) { console.log(evt.type, evt.currentPointer.type);});\n  }\n\n\n  onLongPress(evt: any) {\n    let isLassoSelect = this.isMultiMode && this.multiModeTool == RwMutiModeTool.lasso;\n    if (!isLassoSelect) {\n\n      let mapEvent: H.mapevents.Event = evt;\n      let marker = mapEvent.target as RwMarker;\n      if (!marker && this.isPinClick && this.lastMarker) {\n        marker = this.lastMarker;\n      }\n\n      if (this.isPinClick) {\n        let pin = marker.pin || this.lastPin;\n        if (pin) {\n          let isHit = this.hitTest(pin, evt);\n          if (isHit) this.onPinClick(marker, true);\n        }\n\n        setTimeout(() => {\n          this.mapBehaviors.enable(H.mapevents.Behavior.DRAGGING);\n          this.mapBehaviors.enable(H.mapevents.Behavior.DBLTAPZOOM);\n        }, 500);\n      } else {\n        this.onMapClick(evt, true);\n      }\n    }\n  }\n\n  onPointerDown(evt: any) {\n    let self = this;\n    //console.log(\"pointerdown\")\n\n    if (self.showMenuMap) self.showMenuMap = false;\n    if (self.showMenuRoutePin) self.showMenuRoutePin = false;\n    if (self.showMenuStopPin) self.showMenuStopPin = false;\n    if (self.showMenuSitePin) self.showMenuSitePin = false;\n    if (self.showMenuTaskPin) self.showMenuTaskPin = false;\n    if (self.showMenuDriverPin) self.showMenuDriverPin = false;\n    if (self.showMenuClusterPin) self.showMenuClusterPin = false;\n\n\n    let mapEvent: H.mapevents.Event = evt;\n    self.mouseX = ((mapEvent.currentPointer) as any).viewportX;\n    self.mouseY = ((mapEvent.currentPointer) as any).viewportY;\n    self.mouseDownTime = moment();\n    //console.warn(\"onPointerDown\", this.mouseDownX, this.mouseDownY);\n    //console.warn(\"pointerdown isLassoSelect\", self.multiModeTool, self.isMultiMode);\n\n    let lassoSelect = self.isMultiMode && self.multiModeTool == RwMutiModeTool.lasso;\n    if (lassoSelect) {\n      //console.warn(\"lasso starting\");\n      self.isLassoMode = true;\n      const coord = self.map.screenToGeo(self.mouseX, self.mouseY);\n      self.dragViewportX = self.mouseX;\n      self.dragViewportY = self.mouseY;\n      self.polyPoints.push(coord);\n      self.lineStr = new H.geo.LineString();\n      self.polyPoints.forEach(p => {\n        self.lineStr.pushLatLngAlt(p.lat, p.lng, p.alt);\n      });\n\n      if (self.polySelectGroup) {\n        self.polySelectGroup.removeAll();\n        self.polySelectGroup.setVisibility(false);\n        self.polySelectGroup.setVisibility(true);\n      } else {\n        self.polySelectGroup = new H.map.Group({\n          visibility: true,\n          volatility: true,\n        });\n        self.map.addObject(self.polySelectGroup);\n      }\n\n      self.polySelector = new H.map.Polygon(self.lineStr, this.space.polySelectOptions);\n      self.polySelectGroup.addObject(self.polySelector);\n\n      self.mapBehaviors.disable(H.mapevents.Behavior.DRAGGING);\n    } else {\n      //console.log(\"onPointerDown NOT DRAG MODE\");\n      //console.log(\"onPointerUp this.isPinClick\", this.isPinClick);\n\n      this.isPinClick = false;\n      let isDoubleClick = this.isDoubleClick();\n      //let mapEvent: H.mapevents.Event = evt;\n      let marker = mapEvent.target as RwMarker;\n      if (marker.pin) {\n        this.isPinClick = true;\n        this.isPinDoubleClick = isDoubleClick;\n        this.isMapDoubleClick = false;\n        this.lastPin = marker.pin;\n        this.lastMarker = marker;\n        this.isSearchPinClick = false;\n      } else if (marker.searchId) {\n        this.isSearchPinClick = true;\n      } else {\n        if (isDoubleClick && this.lastPin && this.lastMarker) {\n          this.isPinClick = true;\n          this.isPinDoubleClick = true;\n          this.isMapDoubleClick = false;\n          this.lastPin = marker.pin;\n          this.lastMarker = marker;\n          this.isSearchPinClick = false;\n        } else {\n          //console.warn(\"onPointerDown isPinClick = false;  Try Hit Test\");\n          this.isPinClick = false;\n          this.isPinDoubleClick = false;\n          this.isMapDoubleClick = isDoubleClick;\n          this.lastPin = null;\n          this.lastMarker = null;\n          this.isSearchPinClick = false;\n        }\n      }\n\n      //console.warn(\"onPointerDown isPinClick:\", this.isPinClick);\n      if (this.isPinClick) {\n        self.mapBehaviors.disable(H.mapevents.Behavior.DRAGGING);\n        self.mapBehaviors.disable(H.mapevents.Behavior.DBLTAPZOOM);\n        //console.warn(\"onPointerDown DBLTAPZOOM disable\")\n      } else {\n        self.mapBehaviors.enable(H.mapevents.Behavior.DRAGGING);\n        self.mapBehaviors.enable(H.mapevents.Behavior.DBLTAPZOOM);\n      }\n\n    }\n  }\n\n  lastPin: RwPin;\n  lastMarker: RwMarker;\n\n  onPointerUp(evt: any) {\n    let self = this;\n    self.isLassoMode = false;\n    //console.log(\"onPointerUp\");\n\n    let mapEvent: H.mapevents.Event = evt;\n    self.mouseX = ((mapEvent.currentPointer) as any).viewportX;\n    self.mouseY = ((mapEvent.currentPointer) as any).viewportY;\n\n    let menuOffsetY = 96;\n    let menuOffsetX = (self.globals.isOpenDrawer) ? 104 : 32;\n    self.menuX = self.mouseX + menuOffsetX;\n    self.menuY = self.mouseY + menuOffsetY;\n\n\n    self.mouseDownTime = moment();\n    let isRightClick = mapEvent.currentPointer.button == 2;\n\n    let isLassoSelect = self.isMultiMode && self.multiModeTool == RwMutiModeTool.lasso;\n    if (!isLassoSelect) {\n      //console.log(\"onPointerUp NOT DRAGGING\");\n      let marker = mapEvent.target as RwMarker;\n\n      if (!marker && this.isPinClick && this.lastMarker) {\n        marker = this.lastMarker;\n      }\n      //console.warn(\"onPointerUp this.isPinClick\", this.isPinClick);\n      if (this.isPinClick) {\n        let pin = marker.pin || this.lastPin;\n        if (pin) {\n          let isHit = this.hitTest(pin, evt);\n          if (isHit || this.isPinDoubleClick) {\n            if (this.isPinDoubleClick) {\n              this.onPinDoubleClick(pin);\n            } else {\n              this.onPinClick(marker, isRightClick);\n            }\n          }\n        }\n\n        setTimeout(() => {\n          self.mapBehaviors.enable(H.mapevents.Behavior.DRAGGING);\n          self.mapBehaviors.enable(H.mapevents.Behavior.DBLTAPZOOM);\n        }, 500);\n      } else if (mapEvent.target === this.searchTarget && isRightClick) {\n        this.showMenuSearchTarget = true;\n      } else if (this.isSearchPinClick && marker.searchId) {\n        this.searchId = marker.searchId;\n        this.showMenuSearchPin = true;\n      } else {\n\n        let isLassoSelect = self.isLassoMode && self.isMultiMode && self.multiModeTool == RwMutiModeTool.lasso;\n        if (isLassoSelect) {\n          self.mapBehaviors.enable(H.mapevents.Behavior.DRAGGING);\n          self.mapBehaviors.enable(H.mapevents.Behavior.DBLTAPZOOM);\n        } else {\n\n        }\n        //console.warn(\"this.isPinClick == false\", mapEvent);\n\n        this.onMapClick(evt, isRightClick);\n      }\n    }\n    this.isPinClick = false;\n  }\n\n\n  onDrag(evt: any) {\n    let self = this;\n    //console.warn(\"onDrag\")\n\n    let isLassoSelect = self.isLassoMode && self.isMultiMode && self.multiModeTool == RwMutiModeTool.lasso;\n    if (isLassoSelect) {\n\n      let mapEvent: H.mapevents.Event = evt;\n      let currPointer = mapEvent.currentPointer as any;\n      let coord = self.map.screenToGeo(\n          currPointer.viewportX,\n          currPointer.viewportY\n      );\n\n      let deltaX = currPointer.viewportX - self.dragViewportX;\n      let deltaY = currPointer.viewportY - self.dragViewportY\n      let distFromPrev = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n      if (distFromPrev > RwConstants.PolyLassoResolution) {\n        self.dragViewportX = currPointer.viewportX;\n        self.dragViewportY = currPointer.viewportY;\n        self.polyPoints.push(coord);\n        self.lineStr.pushLatLngAlt(coord.lat, coord.lng, coord.alt);\n        self.polySelector.setGeometry(new H.geo.Polygon(self.lineStr));\n      }\n    }\n\n  }\n\n\n  onDragEnd(evt: any) {\n    let self = this;\n    self.isLassoMode = false;\n    //console.log(\"onDragEnd\");\n\n    let mapEvent: H.mapevents.Event = evt;\n    self.mouseX = ((mapEvent.currentPointer) as any).viewportX;\n    self.mouseY = ((mapEvent.currentPointer) as any).viewportY;\n    self.mouseDownTime = moment();\n    //console.warn(\"onPointerUp\", this.mouseDownX, this.mouseDownY);\n\n    let isLassoSelect = self.isMultiMode && self.multiModeTool == RwMutiModeTool.lasso;\n    if (isLassoSelect) {\n      //console.log(\"lasso complete\");\n\n      if (self.polySelector) {\n        //console.warn(\"RwPlannerMap onPointerUp\");\n        let pins = this.getPinsForSelectMode();\n        let bbox = self.getEnvelope(self.polyPoints);\n        let pinsInPoly = RwGeoUtils.getPinsInsidePoly(self.polyPoints, pins, bbox);\n        //console.warn(\"polySelector pins:\", pinsInPoly.length, pinsInPoly);\n\n\n        if (pinsInPoly && pinsInPoly.length > 0) {\n          let clustersComplete: RwPin[] = []\n          pinsInPoly.forEach(p => {\n            //console.warn(\"polySelector pin:\", p.title, p.type);\n            switch (p.type) {\n              case RwPinTypes.Stop:\n                if (self.selectMode == RwMultiMode.stops) {\n\n                  if (p.clusterParent) {\n                    let cluster = p.clusterParent;\n                    let donePin = clustersComplete.find(p => p === cluster);\n                    if (!donePin) {\n                      let selectRatio = cluster.selectRatio();\n                      let targetSelect = selectRatio <= 0.5;\n                      //console.warn(\"onDragEnd\", \"setPinSelection CLUSTER\", targetSelect, selectRatio)\n                      self.space.setPinSelection(cluster, targetSelect)\n                      clustersComplete.push(cluster)\n                    }\n                  } else {\n                    self.togglePinSelect(p);\n                  }\n                }\n                break;\n              case RwPinTypes.Site:\n                if (self.selectMode == RwMultiMode.sites) self.togglePinSelect(p);\n                break;\n              case RwPinTypes.Task:\n                if (self.selectMode == RwMultiMode.tasks) self.togglePinSelect(p);\n                break;\n            }\n          });\n        }\n      }\n\n      self.polySelectGroup.removeAll();\n      self.polySelectGroup.setVisibility(false);\n      self.polyPoints = [];\n      self.lineStr = null;\n      self.polySelector = null;\n    }\n    self.mapBehaviors.enable(H.mapevents.Behavior.DRAGGING);\n    self.mapBehaviors.enable(H.mapevents.Behavior.DBLTAPZOOM);\n  }\n\n\n  isDoubleClick(): boolean {\n    let isDoubleClick = false;\n    let timePassed = 0;\n    if (this.timeOfLastPinClick) {\n      timePassed = moment().diff(this.timeOfLastPinClick);\n      if (timePassed < 500) {\n        isDoubleClick = true;\n      }\n      //let elapsed = 0;\n      //elapsed = RwTextUtils.round4(timePassed);\n      //console.log(\"elapsed time: \", elapsed, this.timeOfLastPinClick);\n    }\n    this.timeOfLastPinClick = moment();\n    return isDoubleClick;\n  }\n\n\n  hitTest(pin: RwPin, evt: any): boolean {\n    const SOURCE = \"RwPlannerMap.hitTest\";\n\n    let isHit = false;\n    let pinPixel = this.map.geoToScreen({lat: pin.lat, lng: pin.lng});\n    if (pinPixel) {\n\n      switch (pin.type) {\n        case RwPinTypes.Stop: {\n          let isHitX = pinPixel.x - 22 <= this.mouseX && pinPixel.x + 22 >= this.mouseX;\n          let isHitY = pinPixel.y - 44 <= this.mouseY && pinPixel.y >= this.mouseY;\n          if (isHitX && isHitY) {\n            isHit = true;\n          }\n          break;\n        }\n\n        case RwPinTypes.Site:\n        case RwPinTypes.Task: {\n          let isHitX = pinPixel.x - 15 <= this.mouseX && pinPixel.x + 15 >= this.mouseX;\n          let isHitY = pinPixel.y - 15 <= this.mouseY && pinPixel.y + 15 >= this.mouseY;\n          if (isHitX && isHitY) {\n            isHit = true;\n          }\n          break;\n        }\n\n        case RwPinTypes.Route: {\n          let isHitX = pinPixel.x - 15 <= this.mouseX && pinPixel.x + 15 >= this.mouseX;\n          let isHitY = pinPixel.y - 44 <= this.mouseY && pinPixel.y >= this.mouseY;\n          if (isHitX && isHitY) {\n            isHit = true;\n          }\n          break;\n        }\n\n        case RwPinTypes.Driver: {\n          let isHitX = pinPixel.x - 18 <= this.mouseX && pinPixel.x + 18 >= this.mouseX;\n          let isHitY = pinPixel.y - 18 <= this.mouseY && pinPixel.y + 18 >= this.mouseY;\n          if (isHitX && isHitY) {\n            isHit = true;\n          }\n          break;\n        }\n\n        default:\n          RwLog.error(SOURCE, \"WTF: unexpected pin type\" + pin.type);\n          break;\n      }\n    }\n    return isHit;\n  }\n\n\n  onPinDoubleClick(pin: RwPin) {\n    //console.log(\"onDoubleClick\");\n    this.space.forceShowDataView();\n  }\n\n\n  onMapClick(evt: any, isRightClick: boolean) {\n    let self = this;\n    if (!self.isMultiMode || RwPrefUtils.planMultiModeTool == RwMutiModeTool.click) {\n      if (isRightClick) {\n        self.onMapRightClick(evt)\n      }\n    }\n  }\n\n\n  onPinClick(target: RwMarker, isRightClick: boolean) {\n    const self = this;\n    let pin = target.pin;\n    //console.log(\"onPinClick self.isMultiMode\", self.isMultiMode);\n\n    if (self.isMultiMode) {\n      self.togglePinSelect(pin);\n    } else {\n      if (isRightClick) {\n        self.pinClicked = pin;\n\n        if (pin.isCluster) {\n          //console.warn(\"onClusterClick R-Click\");\n          self.showMenuClusterPin = true;\n        } else {\n          switch (pin.type) {\n              //@formatter:off\n            case RwPinTypes.Route:\n              self.showMenuRoutePin = true;\n              break;\n            case RwPinTypes.Stop:\n              self.showMenuStopPin = true;\n              break;\n            case RwPinTypes.Site:\n              self.showMenuSitePin = true;\n              break;\n            case RwPinTypes.Task:\n              self.showMenuTaskPin = true;\n              break;\n            case RwPinTypes.Driver:\n              self.showMenuDriverPin = true;\n              break;\n              //@formatter:on\n          }\n        }\n      } else {\n        self.togglePinSelect(pin, true);\n      }\n    }\n  }\n\n\n  onMapRightClick(evt: any) {\n    //console.log(\"onMapRightClick called\");\n\n    let self = this;\n    if (self.mouseX && self.mouseY) {\n      let mapEvent: H.mapevents.Event = evt;\n      let target = mapEvent.target as RwMarker;\n      if (target) {\n        this.$nextTick(() => {\n          self.showMenuMap = true\n        });\n      }\n    }\n  }\n\n\n  onMapSetStartHere() {\n    let self = this;\n    const coord = self.map.screenToGeo(self.mouseX, self.mouseY);\n    this.showMenuMap = false;\n    this.updateStartAtCoord(coord.lat, coord.lng);\n  }\n\n\n  onMapSetDefaultHere() {\n    let self = this;\n    const coord = self.map.screenToGeo(self.mouseX, self.mouseY);\n    this.settingSpace.startLat = coord.lat;\n    RwPrefUtils.startLat = coord.lat;\n    this.settingSpace.startLng = coord.lng;\n    RwPrefUtils.startLng = coord.lng;\n    RwPrefUtils.isDynPoint = false;\n    this.globals\n        .saveWebPrefs()\n        .then(isSaved => {\n          ///console.log(\"onMapSetDefaultHere isSaved\", isSaved);\n          if (isSaved) {\n            this.showMenuMap = false;\n            this.globals.showSnack('Route Default Start location is reset', \"success\");\n          } else {\n            this.globals.showSnack('Failed to update Default Route Start', \"error\");\n          }\n        })\n        .catch(() => {\n          RwLog.consoleError(\"WTF: onMapSetDefaultHere failed\");\n          this.showMenuMap = false;\n          this.globals.showSnack('Failed to update Default Route Start', \"error\");\n        });\n  }\n\n\n  onMapAddRouteHere() {\n    let self = this;\n    const coord = self.map.screenToGeo(self.mouseX, self.mouseY);\n    this.showMenuMap = false;\n    this.addRouteAtCoord(coord.lat, coord.lng, [\"RwPlannerMap.onMapAddRouteHere\"]);\n  }\n\n\n  onMapAddStopHere() {\n    let self = this;\n    const coord = self.map.screenToGeo(self.mouseX, self.mouseY);\n    this.showMenuMap = false;\n    this.addStopAtCoord(coord.lat, coord.lng);\n    this.space.checkHistLimitPopups(this.space.activeRoute);\n  }\n\n\n  onMapAddSiteHere() {\n    let self = this;\n    const coord = self.map.screenToGeo(self.mouseX, self.mouseY);\n    this.showMenuMap = false;\n    const site = this.addSiteAtCoord(coord.lat, coord.lng);\n    if (this.globals.editAfterAdd) this.globals.showSiteEdit(site);\n  }\n\n\n  onMapAddTaskHere() {\n    let self = this;\n    const coord = self.map.screenToGeo(self.mouseX, self.mouseY);\n    this.showMenuMap = false;\n    const task = this.addTaskAtCoord(coord.lat, coord.lng);\n    if (this.globals.editAfterAdd) this.onTaskEdit(task);\n  }\n\n\n  togglePinSelect(pin: RwPin, isIdempotent?: boolean) {\n    if (pin.isCluster) {\n      if (this.isMultiMode) {\n        let ratio = pin.selectRatio();\n        let targetSelect = ratio <= 0.5;\n        this.space.setPinSelection(pin, targetSelect)\n      } else {\n        this.onClusterClick(pin);\n      }\n    } else {\n      //console.warn(\"RwPlannerMap.togglePinSelect isSelected\", pin.title);\n      let isSelected = this.space.isSelected(pin);\n      if (isSelected) {\n        if (!isIdempotent) {\n          this.space.setPinSelection(pin, false);\n        }\n      } else {\n        this.space.setPinSelection(pin, true);\n      }\n    }\n  }\n\n\n  resizeMapViewDelayed(delay: number) {\n    setTimeout(() => {\n      this.resizeMapView();\n    }, delay);\n  }\n\n\n  resizeMapView() {\n    if (this.map) {\n      this.map.getViewPort().resize();\n    }\n  }\n\n\n  private currZoomId: string;\n\n  zoomToRoute(animate: boolean): boolean {\n    const SOURCE = \"RwPlannerMap.zoomToRoute\";\n    let self = this;\n    let zoomSuccess = false;\n    let hasStart = false;\n    let startPoint: H.geo.Point;\n    let hasBounds = false;\n    let bounds = new H.map.Group();\n    let bboxDelta: H.geo.Rect;\n    let route = this.activeRoute;\n    if (route != null) {\n\n      let isZoomBusy = this.currZoomId && this.currZoomId == route.routeId;\n      if (!isZoomBusy) {\n        this.currZoomId = route.routeId;\n\n        try {\n\n          if (route.driverId) {\n            if (route.isDynLoc) {\n              let driver = self.globals.findDriver(route.driverId);\n              if (driver && (driver.lat != 0 && driver.lng != 0)) {\n                let driverLoc = new H.map.Marker(new H.geo.Point(driver.lat, driver.lng));\n                bounds.addObject(driverLoc)\n              }\n            }\n          }\n\n\n          if (route.lat && route.lat != 0 && route.lng && route.lng != 0) {\n            startPoint = new H.geo.Point(route.lat, route.lng);\n            let rtCenter = new H.map.Marker(startPoint);\n            bounds.addObject(rtCenter);\n            hasStart = true;\n            //console.warn(\"zoomToRoute\", route.lat, route.lng)\n          } else {\n            //RwLog.consoleWarn(\"zoomToRoute lat & lng == 0\", route.lat, route.lng);\n          }\n\n          if (route.stops && route.stops.length > 0) {\n            //console.log(\"zoomToRoute route.stops.length\", route.stops.length);\n            route.stops.forEach(stop => {\n              if (stop.lat != 0 && stop.lng != 0) {\n                let markerLoc = new H.map.Marker(new H.geo.Point(stop.lat, stop.lng));\n                //console.log(\"zoomToRoute stop lat, lng\", stop.lat, stop.lng);\n\n                bounds.addObject(markerLoc);\n                hasBounds = true;\n              }\n            });\n\n            //(Math.round(num * 100) / 100).toFixed(2);\n            if (hasBounds) {\n              if (self.map != null) {\n                const bbox = bounds.getBoundingBox();\n                const n = RwTextUtils.round4(bbox.getTop());\n                const e = RwTextUtils.round4(bbox.getRight());\n                const s = RwTextUtils.round4(bbox.getBottom());\n                const w = RwTextUtils.round4(bbox.getLeft());\n                //console.log(\"zoomToRoute\", n, e, s, w);\n\n                let mapDiv = this.$refs.map as Element;\n                let height = mapDiv.clientHeight;\n                let width = mapDiv.clientWidth;\n\n                if (height && width) {\n                  //console.log(\"bboxDelta\", height, width, height != 0);\n\n                  //xTEST: This probably needs to factor in DPI\n                  let pixelMarginX = 64.0 / height;\n                  let pixelMarginY = 32.0 / width;\n                  let geoHeight = n - s;\n                  let geoWidth = e - w;\n\n                  //Create new borders including margin for images\n                  let nDelta = n + pixelMarginX * geoHeight;\n                  let wDelta = w - pixelMarginY * geoWidth;\n                  let eDelta = e + pixelMarginY * geoWidth;\n                  let sDelta = s - pixelMarginX * geoHeight;\n                  //let sDelta = bbox.getBottom();\n                  //console.log(\"bboxDelta\", height, width, nDelta, wDelta, sDelta, eDelta);\n\n                  bboxDelta = new H.geo.Rect(\n                      nDelta,\n                      wDelta,\n                      sDelta,\n                      eDelta\n                  );\n\n                } else {\n                  //console.error(\"zoomToRoute height || width == 0\", height, width, this.map.getViewPort());\n                  // let mapHeight = this.map.getViewPort().height;\n                  // let mapWidth = this.map.getViewPort().width;\n                  //RwLog.consoleWarn(\"WTF: zoomToRoute height || width == 0\", height, width, mapHeight, mapWidth, this.map.getViewPort());\n                  bboxDelta = bbox;\n                }\n\n                //console.warn(SOURCE, \"mapSetViewBounds\", \"ANIMATE\")\n                RwViewUtils.mapSetViewBounds(self.map, bboxDelta, animate);\n                zoomSuccess = true;\n              } else {\n                this.currZoomId = undefined;\n              }\n\n            } else {\n              if (hasStart) {\n                //console.warn(SOURCE, \"mapSetViewPoint startPoint\", animate)\n                RwViewUtils.mapSetViewPoint(self.map, startPoint, 11, animate);\n                zoomSuccess = true;\n              } else {\n                let prefStart = this.getPrefStartLocation(route);\n                if (prefStart && prefStart.lat !== 0 || prefStart.lng !== 0) {\n                  //console.warn(SOURCE, \"mapSetViewPoint prefStart\", animate)\n                  RwViewUtils.mapSetViewPoint(self.map, startPoint, 11, animate);\n                  zoomSuccess = true;\n                } else {\n                  RwLog.consoleError(\"WTF: ROUTE LOCATION UNKNOWN\");\n                }\n              }\n            }\n\n            bounds.removeAll();\n          } else {\n\n            if (hasStart) {\n              //console.log(\"mapSetViewPoint\")\n              RwViewUtils.mapSetViewPoint(self.map, startPoint, 11);\n              zoomSuccess = true;\n            } else {\n              let prefStart = this.getPrefStartLocation(route);\n              if (prefStart && prefStart.lat !== 0 || prefStart.lng !== 0) {\n                RwViewUtils.mapSetViewPoint(self.map, startPoint, 11);\n                zoomSuccess = true;\n              } else {\n                RwLog.consoleError(\"WTF: ROUTE LOCATION UNKNOWN\");\n              }\n            }\n          }\n\n        } catch (error) {\n\n          let bboxText = \"NO BBOX\";\n          if (bboxDelta) {\n            const n = RwTextUtils.round4(bboxDelta.getTop());\n            const e = RwTextUtils.round4(bboxDelta.getRight());\n            const s = RwTextUtils.round4(bboxDelta.getBottom());\n            const w = RwTextUtils.round4(bboxDelta.getLeft());\n            bboxText = `zoomToRoute: ${n}, ${e}, ${s}, ${w}`;\n          }\n          RwLog.warn(SOURCE, `Unhandled: bboxText:${bboxText} \\n\\n${JSON.stringify(error)}`);\n        }\n\n        if (zoomSuccess) {\n          setTimeout(() => self.currZoomId = undefined, 1500)\n        } else {\n          self.currZoomId = undefined\n        }\n\n      }\n    }\n\n    return zoomSuccess;\n  }\n\n\n  private getPrefStartLocation(route: RwRoute): H.geo.Point {\n    //Should be captured during onboarding;\n    let lat = RwPrefUtils.lastFixedStartLat;\n    let lng = RwPrefUtils.lastFixedStartLng;\n    if (route.isDynLoc) {\n\n      lat = RwPrefUtils.startLat;\n      lng = RwPrefUtils.startLng;\n      //DEFER: UX: consider using assigned driver's last known location\n      RwLog.consoleWarn(\"WTF: Route wo/Start Location; Using Dynamic Default\");\n    } else {\n      lat = RwPrefUtils.lastFixedStartLat;\n      lng = RwPrefUtils.lastFixedStartLng;\n      RwLog.consoleWarn(\"WTF: Route wo/Start Location; Using Fixed Default\");\n    }\n\n    if (lat === 0 || lng === 0) {\n      lat = 40.013249;\n      lng = -105.287532;\n      RwLog.consoleError(\"WTF: route has no start point. NEED TO SET ONE! Using HCC!!!\");\n    }\n    return new H.geo.Point(lat, lng);\n  }\n\n\n  saveViewPort() {\n    const SOURCE = \"RwPlannerMap.saveViewport\";\n    let self = this;\n    if (self.map) {\n      let center = self.map.getCenter();\n      //console.warn(\"saveViewPort\", center.lat(), center.lng());\n      RwPrefUtils.viewCenterLat = center.lat;\n      RwPrefUtils.viewCenterLng = center.lng;\n\n      let viewBounds = self.map.getViewModel().getLookAtData().bounds; //:H.geo.AbstractGeometry\n      let bounds = viewBounds.getBoundingBox();\n      //console.warn(\"saveViewPort bounds W S E N\", sw.lng(), sw.lat(), ne.lng(), ne.lat());\n      const w = bounds.getLeft();\n      const s = bounds.getBottom();\n      const e = bounds.getRight();\n      const n = bounds.getTop();\n\n      // Check for invalid viewport before saving\n      if (w !== e && s !== n) {\n        //console.log (`Saving viewport: w:${w},s:${s},e:${e},n:${n}`);\n        RwPrefUtils.viewWest = bounds.getLeft();\n        RwPrefUtils.viewSouth = bounds.getBottom();\n        RwPrefUtils.viewEast = bounds.getRight();\n        RwPrefUtils.viewNorth = bounds.getTop();\n\n        RwPrefUtils.viewZoom = self.map.getZoom();\n        //console.log(\"saveViewPort zoom\", RwPrefUtils.viewZoom);\n\n        //calc radius\n        let distMeters = center.distance(\n            new H.geo.Point(RwPrefUtils.viewNorth, RwPrefUtils.viewEast)\n        );\n        //console.warn(\"saveViewPort distMeters\", distMeters);\n        RwPrefUtils.viewRadius = distMeters;\n      } else {\n        RwLog.warn(SOURCE, `Attempting to save invalid viewport: w:${w},s:${s},e:${e},n:${n}`)\n      }\n    }\n  }\n\n  //#endregion\n\n\n  //region Map Pins\n\n\n  getPinsForSelectMode() {\n    let pins: RwPin[];\n    switch (this.selectMode) {\n      case RwMultiMode.stops:\n        pins = this.space.stopPinsFiltered;\n        break;\n      case RwMultiMode.sites:\n        pins = this.space.sitePinsFiltered;\n        break;\n      case RwMultiMode.tasks:\n        pins = this.space.taskPinsFiltered;\n        break;\n    }\n    return pins;\n  }\n\n\n  updatePin(pin: RwPin) {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.updatePin\"\n    //console.log(\"updatePin:\", pin.title);\n\n    if (self.map && pin) {\n\n      let isClusterChild = !!pin.clusterParent\n      if (!isClusterChild) {\n        let marker = self.findMarker(pin);\n        if (marker) {\n          self.updateMarker(pin, marker);\n          self.focusCheck(pin);\n        }\n      } else {\n        //NOTE: Cluster Children do not have markers\n        let cluster = pin.clusterParent;\n        if (cluster.marker) {\n          cluster.invalidatePinImage();\n          self.updateMarker(cluster, cluster.marker);\n        }\n\n        pin.invalidatePinImage();\n        pin.lastHash = Date.now();\n        //console.log(SOURCE, pin.title, pin.urlHash, pin.imgArgs);\n\n      }\n\n    } else {\n      RwLog.consoleError(\"WTF: No Map || No Pin\");\n    }\n  }\n\n\n  updateMarker(pin: RwPin, marker: RwMarker) {\n    const self = this;\n    const SOURCE = 'RwPlannerMap.updateMarker';\n    //console.log(\"updateMarker:\", pin.title);\n\n    if (pin && marker) {\n      pin.invalidatePinImage();\n      pin.lastHash = Date.now();\n\n      let url = thePlanSpace.globals.idxURL[pin.urlHash];\n      if (url && url.length > 0) {\n        self.setMapMarker(pin, marker, url);\n      } else {\n        pin\n            .dataUrlAsync()\n            .then(dataUrl => {\n              self.setMapMarker(pin, marker, dataUrl);\n            });\n      }\n    } else {\n      RwLog.consoleError(SOURCE, \"WTF: updateMarker: no marker\");\n    }\n  }\n\n\n  private setMapMarker(pin: RwPin, marker: RwMarker, dataUrl: string) {\n    const SOURCE = 'RwPlannerMap.setMapMarker';\n    //console.log(SOURCE, pin.title);\n    const self = this;\n    let zIndex = pin.zIndex;\n    let iconSize = self.globals.getIconSize(pin.type);\n    let anchor = self.globals.getAnchorPoint(pin.type);\n    let iconOpts = {} as H.map.Icon.Options;\n    if (anchor) iconOpts.anchor = anchor;\n    if (iconSize) iconOpts.size = iconSize;\n    let icon = new H.map.Icon(dataUrl, iconOpts);\n    marker.setZIndex(zIndex); //Note: setZIndex must be called prior to setIcon\n    marker.setIcon(icon);\n    marker.invalidate(0);\n    //console.warn(SOURCE, \"POST marker.invalidate\", pin.title, pin.baseColor);\n  }\n\n\n  updateMarkerPosition(pin: RwPin, marker: RwMarker) {\n    const SOURCE = 'RwPlannerMap.updateMarkerPosition';\n    //console.warn(\"updateMarkerPosition:\", marker.pin ? marker.pin.title : \"\");\n    if (pin && marker) {\n      marker.setGeometry({lat: pin.lat, lng: pin.lng});\n      marker.invalidate(0);\n    } else {\n      RwLog.warn(SOURCE, `Unable to update marker position, ${!pin ? 'no pin' : ''}, ${!marker ? 'no marker' : ''}`);\n    }\n  }\n\n  addPin(pin: RwPin, imgUri: string, zIndex: number, pins: RwPin[], scale: number, custAnchor?: H.math.Point, logIt?: boolean): Promise<boolean> {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.addPin\"\n\n    return new Promise<boolean>((resolve => {\n      if (pin.lat == 0 && pin.lng == 0) {\n        switch (pin.type) {\n          case RwPinTypes.Route:\n            if (this.activeRoute.isDynLoc) {\n              if (!(RwPrefUtils.startLat == 0 && RwPrefUtils.startLng == 0)) {\n                this.activeRoute.lat = pin.lat = RwPrefUtils.startLat;\n                this.activeRoute.lng = pin.lng = RwPrefUtils.startLng;\n              } else {\n                this.space.invalidPinError = \"Route\";\n                this.space.invalidPinIcon = \"error\";\n                this.space.showInvalidPinBanner = true;\n              }\n            } else {\n              this.space.invalidPinError = \"Route\";\n              this.space.invalidPinIcon = \"error\";\n              this.space.showInvalidPinBanner = true;\n            }\n            break;\n          case RwPinTypes.Stop:\n            if (this.space.invalidPinError === \"Route\" && this.space.showInvalidPinBanner) break;\n            this.space.invalidPinError = \"Stop\";\n            this.space.invalidPinIcon = \"warning\";\n            this.space.showInvalidPinBanner = true;\n            break;\n          case RwPinTypes.Driver:\n            //this.globals.showSnack(\"Invalid driver location detected.\", \"warning\");\n            break;\n        }\n        RwLog.warn(SOURCE, `Pin lat and lng are 0 \\n\\n stack:${new Error().stack}\\n\\npin type:${pin.type}`);\n        return resolve(false);\n      }\n\n      let isAdded = false;\n      if (self.map) {\n\n        let iconSize: H.math.ISize = self.globals.getIconSize(pin.type);\n        let anchor = self.globals.getAnchorPoint(pin.type, custAnchor);\n        let iconOpts = {} as H.map.Icon.Options;\n        if (anchor) iconOpts.anchor = anchor;\n        if (iconSize) iconOpts.size = iconSize;\n\n        //console.log(SOURCE, \"getIcon\", imgUri);\n        self.globals.getIcon(imgUri, iconOpts)\n            .then(icon => {\n              let markerLoc = {lat: pin.lat, lng: pin.lng};\n              let hereMarker = new H.map.Marker(markerLoc, {icon: icon});\n              let marker = hereMarker as RwMarker;\n              marker.setZIndex(zIndex);\n              isAdded = this.addMarker(marker, pin, logIt);\n              if (isAdded) {\n                if (pins != null) pins.push(pin);\n                self.focusCheck(pin);\n                resolve(true);\n              } else {\n                resolve(false)\n              }\n            });\n\n      } else {\n        RwLog.consoleError(\"WTF: map not ready\");\n        resolve(false);\n      }\n\n    }));\n\n  }\n\n\n  private focusCheck(pin: RwPin) {\n    const self = this;\n    let focusId = self.globals.targetFocusId;\n    if (focusId && focusId === pin.eid) {\n      //console.log(\"RwPlannerMap.focusCheck\", pin.title);\n      self.globals.targetFocusId = undefined;\n      setTimeout(() => {\n        self.focusPin(pin, true, false);\n      }, 250);\n    }\n  }\n\n  addMarker(marker: RwMarker, pin: RwPin, logIt?: boolean): boolean {\n    let self = this;\n    let isAdded = false;\n\n    marker.pinType = pin.type;\n    marker.pin = pin;\n    pin.marker = marker;\n    //marker.eid = pin.eid;\n    //console.log(\"addMarker\", pin.title, self.markers.length);\n    let mapGroup = self.getMapGroupByType(pin.type);\n    if (mapGroup) {\n      if (theGlobals.showSearchPanel) {\n        marker.searchId = pin.id;\n      }\n      mapGroup.addObject(marker);\n      isAdded = true;\n\n    } else {\n      RwLog.consoleError(\"WTF: NO GROUP for:\", pin.type);\n    }\n\n    marker.setZIndex(pin.zIndex);\n    return isAdded;\n  }\n\n\n  showMarkerReticle(): boolean {\n    const self = this;\n\n    let isShowing = false;\n    if (this.map) {\n\n      if (this.reticle) {\n        this.hideMarkerReticle();\n      }\n\n      let iconSize: H.math.ISize = self.globals.getIconSize(RwPinTypes.Target);\n      let iconOpts = {} as H.map.Icon.Options;\n      iconOpts.size = iconSize;\n      let anchor = self.globals.getAnchorPoint(RwPinTypes.Target, null);\n      if (anchor) iconOpts.anchor = anchor;\n\n      let iconPath = this.globals.isDarkMode ? RwConstants.IconTargetDark : RwConstants.IconTargetLight;\n      let icon = new H.map.Icon(iconPath, iconOpts);\n\n      let coord = this.map.screenToGeo(this.mouseX, this.mouseY);\n      let markerLoc = {lat: coord.lat, lng: coord.lng};\n      let hereMarker = new H.map.Marker(markerLoc, {icon: icon});\n      let marker = hereMarker as RwMarker;\n      marker.setZIndex(0);\n\n      isShowing = true;\n      marker.setZIndex(0);\n      this.reticle = marker;\n\n      this.map.addObject(this.reticle);\n\n    }\n    return isShowing;\n  }\n\n\n  hideMarkerReticle() {\n    if (this.map && this.reticle) {\n      this.map.removeObject(this.reticle);\n      this.reticle = null;\n    }\n  }\n\n  findMarker(pin: RwPin): RwMarker {\n    let marker = pin.marker;\n    // if (!marker) {\n    //   RwLog.consoleWarn(\"RwPlannerMap.findMarker\", `WTF: pin.marker === null: ${pin.title}`);\n    // }\n    return marker;\n  }\n\n\n  removePinFromMap(pin: RwPin, pins?: RwPin[], marker?: RwMarker): boolean {\n    let isRemoved = false;\n    //console.warn(\"removePin\", pin.title);\n    let self = this;\n    if (self.map && pin) {\n\n      let marker = this.findMarker(pin);\n      if (marker) {\n        let isMarkerRemoved = self.removeMarker(pin, marker);\n        //console.log(\"removePinFromMap removeMarker\", pin.title, self.markers.length);\n        if (isMarkerRemoved) {\n          if (pins) {\n            let idxPin = pins.indexOf(pin);\n            if (idxPin >= 0) {\n              pins.splice(idxPin, 1);\n              isRemoved = true;\n            }\n          } else {\n            isRemoved = true;\n          }\n        }\n      } else {\n        RwLog.consoleWarn(\"WTF: removePin marker not found!\", pin.title);\n      }\n    }\n    return isRemoved;\n  }\n\n\n  removeMarker(pin: RwPin, markerXXX: RwMarker): boolean {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.removeMarker\"\n    //console.log(SOURCE, pin.title);\n\n    let isRemoved = false;\n    if (pin) {\n\n      let pinId = pin.eid;\n      let pinType = pin.type;\n      let mapGroup = self.getMapGroupByType(pinType);\n      if (mapGroup) {\n        try {\n          let mapObjects = mapGroup.getObjects();\n          let foundMarker = mapObjects.find(mo => {\n            let rwm = (mo as RwMarker);\n            if (rwm && rwm.pin && rwm.pin.eid === pinId) {\n              return mo;\n            } else {\n              return null;\n            }\n          });\n          if (foundMarker) {\n            mapGroup.removeObject(foundMarker);\n            // if(pin.type === RwPinTypes.Route) {\n            //   console.log(SOURCE, \"REMOVED: \" + pin.title);\n            // }\n\n            let isSelected = this.space.isSelected(pin);\n            if (isSelected) {\n              this.space.deselectPin(pin)\n              //console.log(SOURCE, \"DESELECTED: \" + pin.title);\n            }\n          } else {\n            RwLog.consoleWarn(SOURCE, \"WTF: NOT FOUND markerId\", pinId, mapObjects.length);\n            // mapObjects.forEach(mo => {\n            //   let marker = (mo as RwMarker)\n            //   if (marker) {\n            //     if (marker.pin) {\n            //       //if (marker && marker.pin && marker.pin.type === RwPinTypes.Route) {\n            //       console.log(\"\\t\\t marker:\", marker.pin.eid);\n            //     }\n            //     else {\n            //       console.log(\"\\t\\t marker.pin === null\", marker);\n            //     }\n            //   }\n            // })\n          }\n\n        } catch (e) {\n          RwLog.consoleError(\"WTF: Error removing marker\", e.toString(), pinType);\n        }\n\n      }\n    }\n\n    return isRemoved;\n  }\n\n\n  clearPath(withRoute?: boolean) {\n    if (this.polyLine) {\n      this.mapGroupRoute.removeObject(this.polyLine);\n      this.polyLine = null;\n      if (withRoute) {\n        let route = this.activeRoute;\n        if (route) {\n          route.path = null;\n        }\n      }\n    }\n  }\n\n\n  getMapGroupByType(pinType: RwPinTypes) {\n    let group: H.map.Group;\n    switch (pinType) {\n        //@formatter:off\n      case RwPinTypes.Stop:\n      case RwPinTypes.Driver:\n      case RwPinTypes.Route:\n        group = this.mapGroupRoute;\n        break;\n      case RwPinTypes.Site:\n        group = this.mapGroupSites;\n        break;\n      case RwPinTypes.Task:\n        group = this.mapGroupTasks;\n        break;\n        //@formatter:on\n      default: {\n        RwLog.consoleError(\"WTF: NO GROUP FOR:\", pinType);\n        break;\n      }\n\n    }\n    return group;\n  }\n\n\n  decodePath(str: string, precision: number): H.geo.Point[] {\n    let index: number = 0;\n    let lat: number = 0;\n    let lng: number = 0;\n    let coordinates: H.geo.Point[] = [];\n    let shift: number = 0;\n    let result: number = 0;\n    let byte: number = null;\n    let latitude_change: number;\n    let longitude_change: number;\n    let factor: number = Math.pow(10, precision || 5);\n\n    // Coordinates have variable length when encoded, so just keep\n    // track of whether we've hit the end of the string. In each\n    // loop iteration, a single coordinate is decoded.\n    while (index < str.length) {\n      // Reset shift, result, and byte\n      byte = null;\n      shift = 0;\n      result = 0;\n\n      do {\n        byte = str.charCodeAt(index++) - 63;\n        result |= (byte & 0x1f) << shift;\n        shift += 5;\n      } while (byte >= 0x20);\n\n      latitude_change = result & 1 ? ~(result >> 1) : result >> 1;\n\n      shift = result = 0;\n\n      do {\n        byte = str.charCodeAt(index++) - 63;\n        result |= (byte & 0x1f) << shift;\n        shift += 5;\n      } while (byte >= 0x20);\n\n      longitude_change = result & 1 ? ~(result >> 1) : result >> 1;\n\n      lat += latitude_change;\n      lng += longitude_change;\n\n      let coord = new H.geo.Point(lat / factor, lng / factor);\n      coordinates.push(coord);\n    }\n\n    return coordinates;\n  }\n\n  clearRouteMarkers() {\n    this.space.startPin = null;\n    this.polyLine = null;\n    this.mapGroupRoute.removeAll();\n    //console.error(\"clearRouteMarkers startPin = null\");\n  }\n\n\n  // clearRouteMarkers() {\n  //   this.space.startPin = null;\n  //   this.polyLine = null;\n  //   this.mapGroupRoute.removeAll();\n  //   //console.error(\"clearRouteMarkers\", this.markers.length);\n  // }\n\n\n  clearSitePins() {\n    //console.log(\"clearSitePins\");\n    this.mapGroupSites.removeAll();\n  }\n\n\n  clearTaskPins() {\n    //console.log(\"clearTaskPins\");\n    this.mapGroupTasks.removeAll();\n  }\n\n\n  refreshDriverPinDelta(driverId: string) {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.refreshDriverPin\";\n\n    let driver = this.globals.findDriver(driverId);\n    let driverPin = this.driverPinCache;\n    if (driver && driverPin && driverPin.eid === driverId) {\n      let needsPositionUpdate = driver.lat != driverPin.lat || driver.lng !== driverPin.lng;\n      if (needsPositionUpdate) {\n        let marker = driverPin.marker;\n        if (marker) {\n          self.updateMarkerPosition(driverPin, driverPin.marker);\n        }\n      }\n    } else {\n      this.driverPinCache = null;\n      this.clearDriverMarkers(self);\n      this.refreshDriverPin(driverId)\n    }\n    this.updateDynamicRouteStart();\n  }\n\n\n  private clearDriverMarkers(self: this) {\n    let mapGroup = self.getMapGroupByType(RwPinTypes.Route);\n    if (mapGroup) {\n      let mapObjects = mapGroup.getObjects();\n      let driverMarkers = mapObjects.filter(mo => (mo as RwMarker).pinType === RwPinTypes.Driver);\n      if (driverMarkers.length > 0) {\n        driverMarkers.forEach(dm => {\n          mapGroup.removeObject(dm);\n        })\n      }\n    }\n  }\n\n  refreshDriverPin(driverId: string) {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.refreshDriverPin\";\n    let driver = this.globals.findDriver(driverId);\n    if (driver) {\n      let driverPin = RwPin.fromDriver(driver);\n      driverPin\n          .dataUrlAsync()\n          .then(newUrl => {\n            //console.log(SOURCE, \"driverPin addPin\", driverPin.title);\n            self.addPin(driverPin, newUrl, driverPin.zIndex, null, 1);\n          })\n          .catch(err => {\n            RwLog.consoleError(\"Unhandled: \", err);\n          })\n    }\n  }\n\n\n  focusPin(pin: RwPin, withPan: boolean, withZoom: boolean) {\n    let self = this;\n    if (pin != null) {\n      let centroid = new H.geo.Point(pin.lat, pin.lng);\n      //console.log(\"focusPin\", centroid, withPan, withZoom);\n      self.focusMarker(centroid, withPan, withZoom, true);\n    } else {\n      RwLog.consoleError(\"WTF: focusPin pin === null\");\n    }\n  }\n\n\n  focusMarker(centroid: H.geo.Point, withPan: boolean, withZoom: boolean, animate: boolean) {\n    if (withPan) {\n      //console.log(\"focusMarker centroid, pan, zoom\");\n      this.map.setCenter(centroid, animate);\n    }\n    if (withZoom) {\n      this.map.setZoom(14, animate);\n    }\n  }\n\n\n  findPinByStop(stop: RwStop) {\n    let foundPin: RwPin;\n    const stopPins = this.stopPins;\n    if (stopPins && stopPins.length > 0) {\n      foundPin = stopPins.find(p => p.stop.stopId == stop.stopId);\n    }\n    return foundPin;\n  }\n\n\n  findPinBySite(site: RwSite) {\n    let foundPin: RwPin;\n    const route = this.space.activeRoute;\n    if (route && route.isRouted(site)) {\n      if (this.stopPins && this.stopPins.length > 0) {\n        foundPin = this.stopPins.find(p => p.stop.siteId == site.siteId);\n      }\n    } else {\n      if (this.sitePins && this.sitePins.length > 0) {\n        foundPin = this.sitePins.find(p => p.site.siteId == site.siteId);\n      }\n    }\n    return foundPin;\n  }\n\n\n  updateStartAtCoord(lat: number, lng: number, isDynLoc = false) {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.updateStartAtCoord\";\n\n    if (self.space.activeRoute) {\n      const route = this.space.activeRoute;\n      if (route != null) {\n        if (lat != 0 || lng != 0) {\n          route.lat = lat;\n          route.lng = lng;\n        } else {\n          this.globals.showSnack('Start cannot be (0,0)', 'error');\n        }\n        route.isDynLoc = isDynLoc;\n        if (!isDynLoc) route.path = null;\n        route.address = `${lat.toFixed(5)}, ${lng.toFixed(5)}`;\n\n        this.globals\n            .updateRouteDB(route, false)\n            .then(isCommitted => {\n              if (isCommitted) {\n                //console.log(\"updateStartAtCoord success\", isCommitted);\n\n                let startPin = self.space.startPin;\n                if (startPin && startPin.marker) {\n                  if (lat != 0 || lng != 0) {\n                    startPin.lat = lat;\n                    startPin.lng = lng;\n                    self.updateMarkerPosition(startPin, startPin.marker)\n                  } else {\n                    RwLog.warn(SOURCE, `start pin being set to 0,0`);\n                    this.globals.showSnack('Start cannot be (0,0)', 'error');\n                  }\n                } else {\n                  RwLog.warn(SOURCE, `start pin not found for update, refresh to prevent double start pin`);\n                  this.refreshRoute();\n                }\n                //self.space.startPin.lastUpdate = Date.now()\n                //self.updatePin(self.space.startPin)\n                //self.refreshStartPin(false)\n                //self.refreshStartPin()\n              }\n            })\n            .catch(err => {\n              let status = err.code ? err.code : err.status;\n              if (status) {\n                if (status === 504 || status === 403) {\n                  RwLog.warn(SOURCE, `Network error updating start coord: ${JSON.stringify(err)}`);\n                } else if (status === 403) {\n                  RwLog.warn(SOURCE, `Invalid token updating start coord: ${JSON.stringify(err)}`);\n                } else {\n                  RwLog.error(SOURCE, `Unhandled error updating start coord: ${JSON.stringify(err)}`);\n                }\n              } else {\n                RwLog.warn(SOURCE, `Undefined status: ${JSON.stringify(err)}`);\n              }\n            });\n      }\n    }\n  }\n\n\n  addRouteAtCoord(lat: number, lng: number, stack: string[] = []) {\n    const SOURCE = \"RwPlannerMap.addRouteAtCoord\";\n    const self = this;\n\n    let route = RwRoute.blankRoute();\n    route.isDynLoc = false;\n    if (!(lat == 0 && lng == 0)) {\n      route.lat = lat;\n      route.lng = lng;\n    } else if (!(RwPrefUtils.startLat == 0 && RwPrefUtils.startLng == 0)) {\n      route.lat = RwPrefUtils.startLat;\n      route.lng = RwPrefUtils.startLng;\n    } else {\n      route.lat = 40.013249;\n      route.lng = -105.287532;\n    }\n\n    this.globals.addRouteDB(route, [...stack, SOURCE], false)\n        .then(routeAdded => {\n          //console.log(\"onRouteCreate addRouteDB callback\");\n          this.globals.showSnack(`Route Created: ${routeAdded.name}`, \"success\");\n          this.globals.addRoute(route);\n          self.space.openRoute(routeAdded);\n\n\n          this.space.activeRoute = route;\n          this.$router.push(route.plannerUrl);\n          if (this.space.startPin) {\n            this.space.setPinSelection(this.space.startPin, true);\n            //this.space.forceShowDataView();\n          }\n          if (this.globals.editAfterAdd) this.globals.showRouteEdit(route);\n        })\n        .catch(err => {\n          self.globals.showSnack(`Route Creation Failed: ${err}`, \"error\");\n          RwLog.error(SOURCE, `Unhandled: ${err}`);\n        });\n\n  }\n\n\n  addStopAtCoord(lat: number, lng: number): RwStop {\n    let route = this.space.activeRoute;\n    if (this.globals.editAfterAdd) this.globals.recentStopAdd = true;\n    let title = `${lat.toFixed(4)}, ${lng.toFixed(4)}`;\n    let stop = route.createStop(title, title, lat, lng);\n    this.addStopToMap(stop, route, false);\n    return stop;\n  }\n\n\n  private addStopToMap(stop: RwStop, route: RwRoute, setFocus: boolean) {\n    const SOURCE = \"RwPlannerMap.addStopToMap\";\n    //console.log(\"addStopToMap\");\n\n    this.globals.targetSelectId = stop.stopId;\n    this.globals.addStopDB(stop, route, setFocus, true)\n        .then(isAdded => {\n          if (isAdded) {\n            //console.log(\"addStopToMap success\", isAdded);\n          }\n        })\n        .catch(err => {\n          let status = !!err.Code ? err.Code : err.status;\n          if (status === 504) {\n            RwLog.warn(SOURCE, `Network error: ${JSON.stringify(err)}`)\n          } else if (status === 403) {\n            RwLog.warn(SOURCE, `Auth error: ${JSON.stringify(err)}`);\n          } else {\n            RwLog.error(SOURCE, \"Unhandled: \" + err ? err.toString() : \"\");\n          }\n          // resolve(false);\n        })\n        .finally(() => {\n          this.space.addingStop = false;\n        });\n  }\n\n\n  addSiteAtCoord(lat: number, lng: number): RwSite {\n    const SOURCE = \"RwPlannerMap.addSiteAtCoord\";\n    let title = `${lat.toFixed(4)}, ${lng.toFixed(4)}`;\n\n    let site = new RwSite();\n    site.name = title;\n    site.address = title;\n    site.lat = lat;\n    site.lng = lng;\n    site.baseColor = RwPrefUtils.siteColor;\n    site.visitTime = -1;\n\n    if (!this.space.addingStop) {\n      this.globals.addSite(site, false)\n          .catch(err => {\n            RwLog.error(SOURCE, \"Unhandled: \" + err ? err.toString() : \"\");\n          })\n          .finally(() => {\n            this.space.addingStop = false;\n          });\n      return site;\n    } else {\n      RwLog.consoleWarn(SOURCE, \"already adding stop?\")\n    }\n  }\n\n\n  addTaskAtCoord(lat: number, lng: number) {\n    const SOURCE = \"RwPlannerMap.addTaskAtCoord\";\n    if (!this.space.addingTask) {\n      let title = `${lat.toFixed(4)}, ${lng.toFixed(4)}`;\n      let task = new RwStop();\n      task.isTask = true;\n      task.isActive = true;\n      task.name = title;\n      task.address = title;\n      task.lat = lat;\n      task.lng = lng;\n      task.routeId = RwPrefUtils.accountId;\n      task.baseColor = RwPrefUtils.taskColor;\n      task.visitTime = -1;\n      if (this.globals.editAfterAdd) this.globals.recentStopAdd = true;\n\n      this.globals.addTaskDB(task, false)\n          .then(isAdded => {\n            //console.log(\"addTaskFromSearch success\", isAdded);\n          })\n          .catch(err => {\n            RwLog.error(SOURCE, \"Unhandled: \" + err ? err.toString() : \"\");\n          })\n          .finally(() => this.space.addingTask = false);\n      return task;\n    }\n  }\n\n\n  getEnvelope(points: H.geo.Point[]): H.geo.Rect {\n\n    let envelope: H.geo.Rect;\n    let n = -90;\n    let e = -180;\n    let s = 90;\n    let w = 180;\n    if (points && points.length > 0) {\n      points.forEach(p => {\n        if (p.lat > n) n = p.lat;\n        if (p.lat < s) s = p.lat;\n        if (p.lng > e) e = p.lng;\n        if (p.lng < w) w = p.lng;\n      });\n\n      envelope = new H.geo.Rect(n, w, s, e);\n    }\n    return envelope\n  }\n\n\n  //#endregion Map Pins\n\n\n  //#region Route Actions\n\n  onRouteView(route: RwRoute) {\n    //console.log(\"RwPlannerMap.onRouteView\");\n    this.space.setPinSelection(this.space.startPin, true, false);\n    this.space.onRouteView(this.activeRoute);\n    this.showMenuRoutePin = false;\n  }\n\n  onRouteEdit(route: RwRoute) {\n    this.space.onRouteEdit(route);\n    this.showMenuRoutePin = false;\n  }\n\n  onRouteCopy(route: RwRoute) {\n    const self = this;\n    //console.log(\"onRouteCopy\");\n\n    this.globals\n        .copyRoute(route, RwRouteCopyType.AllStops, [\"RwPlannerMap.onRouteCopy\"])\n        .then((copy) => {\n          this.space.openRouteInPlanner(copy);\n        })\n        .catch();\n\n    this.showMenuRoutePin = false;\n  }\n\n  onRouteArchive(route: RwRoute) {\n    //console.log(\"onRouteArchive\");\n    this.globals.confirmAndArchiveRoute(route);\n    this.showMenuRoutePin = false;\n  }\n\n\n  onRouteAssign(route: RwRoute) {\n    //console.log(\"onRouteAssign\");\n    this.globals.assignRoute(route);\n    this.showMenuRoutePin = false;\n  }\n\n\n  onRouteStatus(route: RwRoute) {\n    //console.log(\"onRouteStatus\");\n    this.globals.onRouteStatus(route);\n    this.showMenuRoutePin = false\n  }\n\n\n  onRouteRelo(route: RwRoute) {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.onRouteRelo\";\n    this.showMenuRoutePin = false;\n    if (route) {\n      //console.log(\"onRouteRelo lat, lng\", route.lat, route.lng);\n\n      self.globals\n          .showReloPicker(route.name, route.lat, route.lng)\n          .then(coord => {\n            if (coord) {\n              //console.log(\"RwPlannerMap.onSiteRelocate showReloPicker callback\", coord.lat, coord.lng);\n              let priLat = route.lat;\n              let priLng = route.lng;\n\n              if (coord.lat != 0 || coord.lng != 0) {\n                route.lat = coord.lat;\n                route.lng = coord.lng;\n\n                self.globals\n                    .updateRouteDB(route, true)\n                    .then(isCommit => {\n                      //console.log(\"updateSiteDB isCommit\", isCommit);\n                      if (isCommit) {\n                        //self.globals.showSnack(\"Route location updated.\", \"success\");\n                        route.lastHash = Date.now();\n                        if (self.globals.activeRoute && self.activeRoute === route) {\n                          self.globals.commitRoute()\n                        }\n                      } else {\n                        //rollback update\n                        route.lat = priLat;\n                        route.lng = priLng;\n                        self.globals.showSnack(\"Route relocation failed.\", \"error\");\n                      }\n                    })\n                    .catch(err => {\n                      //rollback update\n                      route.lat = priLat;\n                      route.lng = priLng;\n                      RwLog.consoleError(SOURCE, \"WTF: update error\", err.toString());\n                      self.globals.showSnack(\"Route relocation failed.\", \"error\");\n                    });\n              } else {\n                self.globals.showSnack(\"Route cannot start at (0,0).\", \"error\");\n              }\n            }\n          });\n    }\n\n\n  }\n\n\n  //#endregion Route Actions\n\n\n  //#region Stop Actions\n\n  onStopView() {\n    const self = this;\n    self.showMenuStopPin = false;\n    this.forceViewPopup();\n  }\n\n\n  onStopEdit() {\n    const self = this;\n    self.showMenuStopPin = false;\n\n    if ((self.pinClicked && self.pinClicked.stop)) {\n      let stop = self.pinClicked.stop;\n      if (this.space.selectedPin != self.pinClicked) {\n        this.space.setPinSelection(self.pinClicked, true, false);\n      }\n\n      self\n          .globals.showStopEdit(stop)\n          .then(isCommit => {\n            if (isCommit) {\n              self.globals.showSnack(\"Stop Edited\", \"success\");\n            }\n            //console.log(\"RwPlannerList.onEditStopClick\", \"showStopEdit callback\", updated.name);\n          })\n          .catch(err => {\n            self.globals.showSnack(\"Stop Edit FAILED\", \"error\");\n            //console.log(\"RwPlannerList.onEditStopClick\", \"Unhandled Error: \", err.toString());\n          })\n\n    }\n  }\n\n  onStopDelete() {\n    const SOURCE = \"RwPlannerMap.onStopDelete\";\n    const self = this;\n    self.showMenuStopPin = false;\n    let pin = self.pinClicked;\n    this.space.deleteStopPin(pin, [SOURCE], true)\n        .then((deleted) => {\n          //self.removePinFromMap(pin, self.stopPins);\n          if (deleted) {\n            let isRouted = pin.stop && pin.stop.isRouted;\n            if (isRouted) {\n              this.space.activeRoute.path = \"\";\n              this.globals.updateRouteDB(this.space.activeRoute, false)\n                  .then(updated => {\n                    if (updated) {\n                      self.clearPath(true);\n                    } else {\n                      RwLog.warn(SOURCE, `Unable to clear route path after stop del ${pin.stop.stopId}`);\n                    }\n                  })\n                  .catch(err => {\n                    RwLog.error(SOURCE, `Unable to clear route path after stop del ${pin.stop.stopId},\\n\\n err:${JSON.stringify(err)}`);\n                  });\n            }\n          }\n        });\n  }\n\n  onStopCheckInScreen() {\n    if (RwPrefUtils.checkInStyle == 1 && !this.globals.hideStopStatus) {\n      this.showMenuStopPin = false;\n      this.showMenuCheckin = true;\n    } else {\n      this.pinClicked.stop.status = 10;\n      this.onStopCheckIn();\n    }\n  }\n\n\n  onCheckInStatus(val: number) {\n    this.showMenuCheckin = false;\n    this.pinClicked.stop.status = val;\n    this.onStopCheckIn();\n  }\n\n\n  onStopCheckIn() {\n    const self = this;\n    self.showMenuStopPin = false;\n    if (self.pinClicked && self.pinClicked.stop) {\n      if (!self.pinClicked.stop.note || self.pinClicked.stop.note.length <= 1000) {\n        this.space.checkInStopPin(self.pinClicked)\n            .then(() => {\n              this.updatePin(self.pinClicked);\n              // console.warn(\"this.pinclicked.stop.status:\", self.pinClicked.stop.status);\n              self.globals.commitStops();\n              if (this.activeRoute.statusCode == RwRouteStatusCodes.created) {\n                this.activeRoute.statusCode = RwRouteStatusCodes.active;\n              }\n            })\n            .catch(err => {\n              swal(\"Error updating stop\", err.message, \"error\");\n            })\n      } else {\n        this.globals.showSnack(\"Please shorten Stop note to 1000 characters or less and try again.\", \"error\");\n      }\n    } else {\n      RwLog.error(\"RwPlannerMap.onCheckInClick\", \"no stop \");\n    }\n  }\n\n\n  onStopRestore() {\n    const self = this;\n    self.showMenuStopPin = false;\n\n    if (self.pinClicked && self.pinClicked.stop) {\n\n      self.space.restoreStopPin(this.pinClicked)\n          .then(res => {\n            //console.log(\"onRestoreClick callback\");\n            this.updatePin(self.pinClicked);\n            self.globals.commitStops();\n          })\n          .catch(err => {\n            swal(\"Error restoring stop\", err.message, \"error\");\n          })\n    }\n  }\n\n\n  onStopAddSite() {\n    this.showMenuStopPin = false;\n    this.space.addSiteFromPin(this.pinClicked)\n  }\n\n\n  onStopAddSked() {\n    this.showMenuStopPin = false;\n\n    if (this.pinClicked && this.pinClicked.stop) {\n      let stop = this.pinClicked.stop;\n      this.globals\n          .multiSked(false, [stop])\n          .then((isAdded) => {\n            //console.log(\"onStopAddSked callback\", isAdded, stop.priority);\n            if (isAdded) {\n              this.globals.commitStops();\n              Vue.nextTick(() => {\n                const refreshedPinClicked = this.stopPins.find(p => p.stop.stopId === stop.stopId)\n                if (refreshedPinClicked) {\n                  refreshedPinClicked.stop.lastHash = Date.now();\n                  refreshedPinClicked.lastHash = Date.now();\n                  refreshedPinClicked.isSked = true;\n                  refreshedPinClicked.priority = stop.priority;\n                  this.updatePin(refreshedPinClicked);\n                } else {\n                  this.refreshRoute();\n                }\n              });\n            }\n          });\n    }\n  }\n\n\n  onStopRemoveSked() {\n    const self = this;\n    self.showMenuStopPin = false;\n\n    if (self.pinClicked && self.pinClicked.stop) {\n      let stop = self.pinClicked.stop;\n\n      self.globals\n          .multiSkedDB(false, [stop.stopId], RwSysUtils.guidEmpty(), stop.priority, 0, 0)\n          .then((isCommitted) => {\n            //console.log(\"onStopRemoveSked callback\", isCommitted);\n            stop.skedId = undefined;\n            stop.openTime = 0;\n            stop.closeTime = 0;\n            stop.lastHash = Date.now();\n            self.pinClicked.isSked = false;\n            self.updatePin(self.pinClicked);\n            self.globals.commitStops();\n            this.refreshRoute();\n          });\n    }\n  }\n\n  onStopMarkFirst() {\n    // console.warn(\"Previous route.firstStopId: \", this.activeRoute.firstStopId);\n    let route = this.activeRoute;\n    //console.warn(\"Route.ismanOrder: \", route.isManOrder);\n    if (route.isManOrder) {\n      this.globals.showConfirmDialog(\"Confirm Mark First\", \"Marking this stop First will disable Manual Order and revert the Route settings to Optimize. If you want to keep your Manual Order, hit Back and set your Stop Order in the Route Order Window.\", \"Continue\", \"Back\")\n          .then(onConfirm => {\n            if (onConfirm) {\n              route.isManOrder = false;\n              this.markFirst();\n            }\n          })\n    } else {\n      this.markFirst();\n    }\n  }\n\n\n  markFirst() {\n    const self = this;\n    //console.log(\"onStopMarkFirst\")\n\n    self.showMenuStopPin = false;\n    if (self.pinClicked && self.pinClicked.stop) {\n      let stop = self.pinClicked.stop;\n      let route = self.activeRoute;\n      if (stop && route) {\n        let priorId = route.firstStopId;\n        route.firstStopId = stop.stopId;\n\n        if (route.firstStopId == route.finalStopId) {\n          route.finalStopId = \"\";\n        }\n        self.globals.updateRouteDB(route, false, false, false, true)\n            .then(() => {\n\n              self.pinClicked.isFirst = true;\n              self.updatePin(self.pinClicked);\n\n              if (priorId && priorId.length > 0) {\n                let priorPin = self.space.stopPins.find(p => p.eid === priorId);\n                //console.warn(\"onStopMarkFirst OLD\", priorPin.title);\n                if (priorPin) {\n                  priorPin.isFirst = false;\n                  self.updatePin(priorPin);\n                }\n              }\n\n              self.globals.commitStops()\n\n            });\n      }\n    }\n  }\n\n  onStopMarkFinal() {\n    let route = this.activeRoute;\n    //console.warn(\"Route.ismanOrder: \", route.isManOrder);\n    if (route.isManOrder) {\n      this.globals.showConfirmDialog(\"Confirm Mark Final\", \"Marking this stop Final will disable Manual Order and revert the Route settings to Optimize. If you want to keep your Manual Order, hit Back and set your Stop Order in the Route Order Window.\", \"Continue\", \"Back\")\n          .then(onConfirm => {\n            if (onConfirm) {\n              route.isManOrder = false;\n              this.markFinal();\n            }\n          })\n    } else {\n      this.markFinal();\n    }\n  }\n\n\n  markFinal() {\n    const self = this;\n    self.showMenuStopPin = false;\n    if (self.pinClicked && self.pinClicked.stop) {\n      let stop = self.pinClicked.stop;\n      let route = self.activeRoute;\n      if (stop && route) {\n        let priorId = route.finalStopId;\n        route.finalStopId = stop.stopId;\n        if (route.firstStopId == route.finalStopId) {\n          route.firstStopId = \"\";\n        }\n        self.globals\n            .updateRouteDB(route, false, false, false, true)\n            .then(() => {\n              self.pinClicked.isFinal = true;\n              self.updatePin(self.pinClicked);\n\n              if (priorId && priorId.length > 0) {\n                let priorPin = self.space.stopPins.find(p => p.eid === priorId);\n                //console.warn(\"onStopMarkFinal\", priorPin.title);\n                if (priorPin) {\n                  priorPin.isFinal = false;\n                  self.updatePin(priorPin);\n                }\n              }\n\n              self.globals.commitStops();\n            })\n      }\n    }\n  }\n\n\n  onStopUnmarkFirst() {\n    const self = this;\n    self.showMenuStopPin = false;\n    let route = self.activeRoute;\n    if (route) {\n      route.firstStopId = \"\";\n      self.globals\n          .updateRouteDB(route, false, false, false, true)\n          .then(() => {\n            //console.log(\"onStopMarkFirst updatePin isFirst == false\", self.pinClicked.title);\n            self.pinClicked.isFirst = false;\n            self.updatePin(self.pinClicked);\n\n            self.globals.commitStops()\n          })\n\n    }\n  }\n\n\n  onStopUnmarkFinal() {\n    const self = this;\n    self.showMenuStopPin = false;\n    let route = self.activeRoute;\n    if (stop && route) {\n      route.finalStopId = \"\";\n      self.globals\n          .updateRouteDB(route, false, false, false, true)\n          .then(() => {\n            self.pinClicked.isFinal = false;\n            self.updatePin(self.pinClicked);\n            self.globals.commitStops();\n          })\n    }\n  }\n\n\n  onMoreMenu() {\n    setTimeout(() => window.dispatchEvent(new Event('resize')), 100);\n  }\n\n  onPinned() {\n    setTimeout(() => window.dispatchEvent(new Event('resize')), 100);\n  }\n\n  onComplete() {\n    setTimeout(() => window.dispatchEvent(new Event('resize')), 100);\n  }\n\n  onIncomplete() {\n    setTimeout(() => window.dispatchEvent(new Event('resize')), 100);\n  }\n\n\n  //#endregion Stop Actions\n\n\n  //#region Site Actions\n\n  onSiteView() {\n    const self = this;\n    self.showMenuSitePin = false;\n    this.forceViewPopup();\n  }\n\n\n  onSiteEdit() {\n    if (this.pinClicked && this.pinClicked.site) {\n      this.globals.showSiteEdit(this.pinClicked.site);\n      //this.space.editSitePin(this.pinClicked);\n    }\n    this.showMenuSitePin = false;\n  }\n\n\n  onSiteDelete() {\n    const self = this;\n    self.showMenuSitePin = false;\n    let pin = self.pinClicked;\n    self.space.onSiteDelete(pin)\n        .then((isDeleted) => {\n          if (isDeleted) {\n            //console.log(\"onDeleteSiteClick callback PASS\");\n            self.removePinFromMap(pin, self.sitePins);\n          }\n        })\n        .catch(err => {\n          RwLog.consoleError(\"WTF: onDeleteSiteClick FAIL\", err.toString());\n        });\n\n  }\n\n\n  onSiteRelocate() {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.onSiteRelocate\";\n    self.showMenuSitePin = false;\n    let pin = self.pinClicked;\n    let site = pin.site;\n    if (site) {\n      //console.log(SOURCE, \"lat, lng\", site.lat, site.lng);\n\n      self.globals\n          .showReloPicker(site.name, site.lat, site.lng)\n          .then(coord => {\n            if (coord) {\n              //console.log(SOURCE, \"showReloPicker callback\", coord.lat, coord.lng);\n              let priLat = site.lat;\n              let priLng = site.lng;\n\n              site.lat = coord.lat;\n              site.lng = coord.lng;\n\n              self.globals\n                  .updateSiteDB(site, [SOURCE])\n                  .then(isCommit => {\n                    //console.log(SOURCE, \"updateSiteDB isCommit\", isCommit);\n                    if (isCommit) {\n                      //self.globals.showSnack(\"Favorite location updated.\", \"success\");\n                      site.lastHash = Date.now();\n                      pin.lat = coord.lat;\n                      pin.lng = coord.lng;\n                      self.updatePinPosition(pin);\n\n                      // self.globals.targetFocusId = site.siteId;\n                      // self.globals.commitSites();\n                    } else {\n                      //rollback update\n                      site.lat = priLat;\n                      site.lng = priLng;\n                      self.globals.showSnack(\"Favorite relocation failed.\", \"error\");\n                    }\n                  })\n                  .catch(err => {\n                    //rollback update\n                    site.lat = priLat;\n                    site.lng = priLng;\n                    RwLog.consoleError(SOURCE, \"WTF: update error\", err.toString());\n                    self.globals.showSnack(\"Favorite relocation failed.\", \"error\");\n                  });\n\n            }\n          });\n    }\n  }\n\n  onStopMoveCopy() {\n    const self = this;\n\n    let pins = [self.pinClicked];\n    if (pins && pins.length > 0) {\n\n      let route = this.activeRoute;\n      let stops = pins.map(p => p.stop);\n\n      self.globals.multiCopy(route, stops);\n\n    }\n  }\n\n  onStopRelocate() {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.onStopRelocate\";\n\n    self.showMenuStopPin = false;\n    let pin = self.pinClicked;\n\n    let stop = pin.stop;\n    if (stop) {\n      //console.log(SOURCE, \" lat, lng\", stop.lat, stop.lng);\n\n      self.globals\n          .showReloPicker(stop.name, stop.lat, stop.lng)\n          .then(coord => {\n            if (coord) {\n              //console.log(SOURCE, \"showReloPicker callback\", coord.lat, coord.lng);\n              let priLat = stop.lat;\n              let priLng = stop.lng;\n\n              stop.lat = coord.lat;\n              stop.lng = coord.lng;\n\n              self.globals\n                  .updateStopDB(stop)\n                  .then(isCommit => {\n                    //console.log(SOURCE, \"isCommit\", isCommit, priLat, priLng, stop.lat, stop.lng);\n                    if (isCommit) {\n                      stop.lastHash = Date.now();\n                      let stopPin = this.stopPins.find(s => s.stop && s.stop.stopId === stop.stopId);\n                      if (stopPin) {\n                        stopPin.lat = coord.lat;\n                        stopPin.lng = coord.lng;\n                        //this.updateMarkerPosition(stopPin, stopPin.marker);\n                        this.removePinFromMap(stopPin);\n                        this.$nextTick(() => {\n                          this.addPin(stopPin, this.globals.idxURL[stopPin.urlHash], stopPin.zIndex, null, 1);\n                        })\n                        this.map.setCenter(new H.geo.Point(coord.lat, coord.lng), true);\n                      }\n\n                      let isRouted = stop.isRouted;\n                      if (isRouted) {\n                        this.space.activeRoute.path = \"\";\n                        theGlobals.updateRouteDB(this.space.activeRoute, false)\n                            .then((updated) => {\n                              if (updated) {\n                                self.clearPath(true);\n                              } else {\n                                RwLog.warn(SOURCE, `Unable to clear route path after relocating stop, ${stop.stopId}, rt: ${stop.routeId}\\n\\n`);\n                              }\n                            })\n                            .catch(err => {\n                              if (!err || (err.status !== 403 && err.status !== 504)) {\n                                RwLog.error(SOURCE, `Error clearing route path after relocating stop, ${stop.stopId}, rt: ${stop.routeId}\\n\\n\n                          err:${JSON.stringify(err)}`);\n                              }\n                            });\n\n                      }\n                    } else {\n                      RwLog.warn(SOURCE, \"Rolling back update stop\")\n                      //rollback update\n                      stop.lat = priLat;\n                      stop.lng = priLng;\n                    }\n                  })\n                  .catch(err => {\n                    //rollback update\n                    stop.lat = priLat;\n                    stop.lng = priLng;\n                    RwLog.error(SOURCE, `WTF: update error, ${JSON.stringify(err)}`);\n                  });\n\n            }\n          });\n    }\n\n\n  }\n\n\n  private updatePinPosition(pin: RwPin) {\n    let marker = this.findMarker(pin);\n    if (marker) {\n      this.updateMarkerPosition(pin, marker);\n      this.focusPin(pin, true, false);\n    } else {\n      RwLog.log(\"RwPlannerMap.updatePinPosition\", \"refreshing rt, marker not found\");\n      this.refreshRoute();\n    }\n  }\n\n\n  //#endregion Site Actions\n\n\n  //#region Task Actions\n\n\n  onTaskView() {\n    this.forceViewPopup();\n    this.showMenuTaskPin = false;\n  }\n\n\n  onTaskEdit(newTask: RwStop | undefined) {\n    const self = this;\n    this.showMenuTaskPin = false;\n    if ((self.pinClicked && self.pinClicked.task) || newTask) {\n      let stop;\n      if (newTask) {\n        stop = newTask;\n      } else {\n        stop = self.pinClicked.task;\n        if (this.space.selectedPin != self.pinClicked) {\n          this.space.setPinSelection(self.pinClicked, true, false);\n        }\n      }\n\n      self\n          .globals.showStopEdit(stop)\n          .then(isCommit => {\n            if (isCommit) {\n              self.globals.commitTasks();\n              self.globals.showSnack(\"Task Edited\", \"success\");\n            }\n            //console.log(\"RwPlannerList.onEditStopClick\", \"showStopEdit callback\", updated.name);\n          })\n          .catch(err => {\n            self.globals.showSnack(\"Task Edit FAILED\", \"error\");\n            //console.log(\"RwPlannerList.onEditStopClick\", \"Unhandled Error: \", err.toString());\n          })\n    }\n  }\n\n\n  onTaskDelete() {\n    const self = this;\n    let pin = self.pinClicked;\n    this.showMenuTaskPin = false;\n\n    this.space.onTaskDelete(pin)\n        .then(() => {\n          //console.log(\"onDeleteSiteClick SUCCESS!!!\");\n          self.removePinFromMap(pin, self.globals.taskPins);\n        })\n        .catch(err => {\n          RwLog.consoleError(\"WTF: onDeleteSiteClick FAIL\", err.toString());\n        })\n  }\n\n  onTaskRelocate() {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.onTaskRelocate\";\n\n    let pin = self.pinClicked;\n    this.showMenuTaskPin = false;\n\n    let task = pin.task;\n    if (task) {\n      //console.log(\"onSiteRelocate lat, lng\", site.lat, site.lng);\n\n      self.globals\n          .showReloPicker(task.name, task.lat, task.lng)\n          .then(coord => {\n            if (coord) {\n              //console.log(\"RwPlannerMap.onSiteRelocate showReloPicker callback\", coord.lat, coord.lng);\n              let priLat = task.lat;\n              let priLng = task.lng;\n\n              task.lat = coord.lat;\n              task.lng = coord.lng;\n\n              self.globals\n                  .updateStopDB(task)\n                  .then(isCommit => {\n                    //console.log(\"updateSiteDB isCommit\", isCommit);\n                    if (isCommit) {\n                      //self.globals.showSnack(\"Task location updated.\", \"success\");\n                      task.lastHash = Date.now();\n                      pin.lat = coord.lat;\n                      pin.lng = coord.lng;\n                      self.updatePinPosition(pin);\n                      //self.space.setPinSelection(pin, true, true);\n                      //self.globals.targetFocusId = task.stopId;\n                      //self.globals.commitTasks();\n                    } else {\n                      //rollback update\n                      task.lat = priLat;\n                      task.lng = priLng;\n                      self.globals.showSnack(\"Task relocation failed.\", \"error\");\n                    }\n                  })\n                  .catch(err => {\n                    //rollback update\n                    task.lat = priLat;\n                    task.lng = priLng;\n                    self.globals.showSnack(\"Task relocation failed.\", \"error\");\n                    RwLog.consoleError(SOURCE, \"WTF: update error\", err.toString());\n                  });\n\n            }\n          });\n    }\n\n\n  }\n\n\n  //#endregion Task Actions\n\n\n  //#region Driver Actions\n\n\n  onDriverView() {\n    const self = this;\n    self.showMenuDriverPin = false;\n    let pin = self.pinClicked;\n    this.forceViewPopup();\n  }\n\n\n  onDriverEdit() {\n    const self = this;\n    self.showMenuDriverPin = false;\n\n    let pin = self.pinClicked;\n    if (pin && pin.driver) {\n      this.globals.showDriverEdit(pin.driver)\n      // if (this.space.selectedPin != pin) {\n      //   this.space.setPinSelection(pin, true, false);\n      // }\n      // this.globals.showEditDriver = true;\n    }\n  }\n\n\n  onDriverDelete() {\n    const self = this;\n    self.showMenuDriverPin = false;\n\n    let pin = self.pinClicked;\n    //DEFER: ACTIONS: MAP: onDeleteDriverClick\n  }\n\n\n  //#endregion Driver Actions\n\n\n  //#region Cluster Actions\n\n\n  onClusterClick(pin: RwPin) {\n    this.globals.selectedClusterPin = pin;\n    this.globals.showClusterPicker = true;\n  }\n\n\n  isClusterCompleted(): boolean {\n    let isComplete = false;\n    let pin = this.pinClicked;\n    if (pin && pin.isCluster) {\n      let clustered = pin.clusteredPins;\n      let completeCount = clustered.filter(p => p.stop && p.stop.isComplete).length;\n      if (completeCount === clustered.length) {\n        isComplete = true;\n      }\n    }\n    return isComplete;\n  }\n\n\n  onClusterView() {\n    let pin = this.pinClicked;\n    if (pin && pin.isCluster) {\n      this.onClusterClick(pin);\n    }\n    this.showMenuClusterPin = false;\n  }\n\n\n  onClusterDelete() {\n    const self = this;\n    self.showMenuClusterPin = false;\n\n    let cluster = this.pinClicked;\n    if (cluster && cluster.isCluster) {\n      let clustered = cluster.clusteredPins;\n      let stops = clustered.map(p => p.stop);\n      stops = stops.filter((value, index, self) => self.findIndex(s => s.stopId === value.stopId) === index);\n      this.globals\n          .confirmAndDeleteStops(stops, [\"RwPlannerMap.onClusterDelete\"])\n          .then(() => {\n            self.removePinFromMap(cluster)\n          })\n\n    }\n  }\n\n\n  onClusterCheckIn() {\n    const self = this;\n    self.showMenuClusterPin = false;\n\n    let cluster = this.pinClicked;\n    if (cluster && cluster.isCluster) {\n      let clustered = cluster.clusteredPins;\n      let gotCommits = false;\n      clustered.forEach(p => {\n        self.space\n            .checkInStopPin(p)\n            .then((isCommitted) => {\n              //console.log(\"onClusterChecking\", \"checkInStopPin, isCommitted\", isCommitted)\n              if (isCommitted) {\n                gotCommits = true;\n                self.updatePin(p)\n              }\n            })\n      })\n\n      if (gotCommits) {\n        //self.space.setClusterSelect(cluster, this.space.selectedPins, true);\n        self.updatePin(cluster)\n      }\n\n    }\n  }\n\n  onClusterRestore() {\n    const self = this;\n    self.showMenuClusterPin = false;\n\n    let cluster = this.pinClicked;\n    if (cluster && cluster.isCluster) {\n      let clustered = cluster.clusteredPins;\n      let gotCommits = false;\n      clustered.forEach(p => {\n        self.space\n            .restoreStopPin(p)\n            .then((isCommitted) => {\n              if (isCommitted) {\n                gotCommits = true;\n                self.updatePin(p)\n              }\n            })\n      })\n\n      if (gotCommits) {\n        self.updatePin(cluster)\n      }\n\n    }\n  }\n\n\n  //#endregion Cluster Actions\n\n\n  //#region Map Refresh Ops\n\n\n  refreshAll() {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.refreshAll\"\n    //console.log(SOURCE);\n\n    //Check if pins require lazy init; occurs if planner is not 1st view\n    if (RwPrefUtils.showDataLayerRoute) {\n      if (this.isMapReady) {\n        this.refreshRoute();\n      }\n    }\n\n    //xTEST: Might be overkill, but this fixes login w/sites & tasks not displayed\n\n    if (RwPrefUtils.showDataLayerSites) {\n      setTimeout(() => {\n        let start = Date.now()\n        self.refreshSites();\n        let elapsed = Date.now() - start;\n        RwLog.consoleWarn(SOURCE, `sites loaded: ${elapsed}ms`);\n      }, 5000)\n      //this.refreshSites(); xxx\n    }\n\n    if (RwPrefUtils.showDataLayerTasks) {\n      setTimeout(() => {\n        let start = Date.now()\n        this.refreshTasks()\n        let elapsed = Date.now() - start;\n        RwLog.consoleWarn(SOURCE, `tasks loaded: ${elapsed}ms`);\n      }, 7500);\n    }\n\n  }\n\n\n  refreshRoute() {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.refreshRoute\";\n    //console.warn(SOURCE);\n\n    if (RwPrefUtils.showDataLayerRoute) {\n      if (this.map && this.activeRoute && self.isMapReady) {\n        this.isRenderedRoute = true;\n        //console.error(SOURCE, `${this.activeRoute.name} (${this.activeRoute.stops.length})`);\n        let route = this.activeRoute;\n        let isSameRoute = route.routeId === this.lastRenderedRouteId;\n        this.lastRenderedRouteId = route.routeId;\n\n        if (isSameRoute) {\n          this.refreshRouteDelta();\n        } else {\n          this.refreshRouteFull();\n        }\n      }\n    }\n  }\n\n\n  refreshRouteFull() {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.refreshRouteFull\";\n    //console.warn(SOURCE);\n\n    let route = this.activeRoute;\n\n    this.clearRouteMarkers();\n\n    self.refreshStartPin();\n\n    self.refreshDriverPin(route.driverId);\n\n    let pins = this.space.stopPinsFiltered;\n    if (pins) {\n\n      let idxClusterIds: string[] = [];\n      let clusterPins = self.createClusterPins(pins);\n      if (clusterPins && clusterPins.length > 0) {\n\n        //Create index of flattened cluster pin ids\n        clusterPins.forEach(cp => {\n          cp.clusteredPins.forEach(p => {\n            idxClusterIds.push(p.id);\n          })\n        });\n\n        // Add Clustered Stops\n        clusterPins.forEach(clusterPin => {\n          //console.log(SOURCE, \"PRE clusterPin.dataUrlAsync type, subType\", clusterPin.type, clusterPin.subType, clusterPin.seq);\n\n          let url = self.globals.idxURL[clusterPin.urlHash];\n          if (url && url.length > 0) {\n            self.addPin(clusterPin, url, clusterPin.zIndex, null, 1);\n          } else {\n            clusterPin\n                .dataUrlAsync()\n                .then(pinUrl => {\n                  self.addPin(clusterPin, pinUrl, clusterPin.zIndex, null, 1);\n                });\n          }\n        });\n      }\n\n\n      let soloPins = pins.filter(p => idxClusterIds.indexOf(p.id) === -1)\n      this.cacheStopPinSet(soloPins);\n\n\n      // Add Stops (non-clustered)\n      soloPins.forEach(stopPin => {\n        let url = self.globals.idxURL[stopPin.urlHash];\n        if (url && url.length > 0) {\n          self.addPin(stopPin, url, stopPin.zIndex, null, 1);\n        } else {\n          stopPin\n              .dataUrlAsync()\n              .then(pinUrl => {\n                //console.log(SOURCE, \"stopPin addPin\", stopPin.title);\n                self.addPin(stopPin, pinUrl, stopPin.zIndex, null, 1);\n              });\n        }\n      });\n\n      this.updatePolyline(route);\n\n      //Zoom To Route\n      this.zoomCheck(route);\n\n    }\n\n  }\n\n  isRefreshing = false\n  gotRefreshOnDeck = false\n  startPinCache: RwPin\n  driverPinCache: RwPin\n  stopPinCache: RwPin[] = []\n  refreshRouteDeltaTS: number = 0;\n\n\n  refreshRouteDelta() {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.refreshRouteDelta\";\n    //console.log(SOURCE);\n\n    let route = this.activeRoute;\n    if (this.isRefreshing) {\n      //console.log(\"isRefreshing SKIP\")\n      this.gotRefreshOnDeck = true;\n    } else {\n      this.isRefreshing = true;\n      this.gotRefreshOnDeck = false;\n\n      //console.log(SOURCE, \"isRefreshing\")\n      this.refreshStartPinDelta(route);\n      this.refreshDriverPinDelta(route.driverId);\n\n      let pins = this.space.stopPinsFiltered;\n      if (pins) {\n\n        //console.log(SOURCE, \"got filtered pins\", pins.length)\n        let idxClusterIds: string[] = [];\n        this.clearClusterMarkers();\n        let clusterPins = self.createClusterPins(pins);\n        if (clusterPins && clusterPins.length > 0) {\n\n          //Create index of flattened cluster pin ids\n          clusterPins.forEach(cp => {\n            cp.clusteredPins.forEach(p => {\n              idxClusterIds.push(p.id);\n            })\n          });\n\n          // Add Clustered Stops\n          clusterPins.forEach(clusterPin => {\n            //console.log(SOURCE, \"PRE clusterPin.dataUrlAsync type, subType\", clusterPin.type, clusterPin.subType, clusterPin.seq);\n            clusterPin\n                .dataUrlAsync()\n                .then(pinUrl => {\n                  //console.log(SOURCE, \"clusterPin addPin\", clusterPin.title);\n                  self.addPin(clusterPin, pinUrl, clusterPin.zIndex, null, 1);\n                });\n\n          });\n        }\n\n        // Add Stops (non-clustered)\n        let soloPins = pins.filter(p => idxClusterIds.indexOf(p.id) === -1)\n        //console.log(SOURCE, \"got soloPins pins\", soloPins.length)\n\n        let deltas = RwDeltas.getDeltas(soloPins, this.stopPinCache, this.refreshRouteDeltaTS);\n        this.cacheStopPinSet(soloPins);\n        //deltas.print(SOURCE);\n        if (deltas.gotAdds || deltas.gotRemoves || deltas.gotDeltas) {\n          //console.log(SOURCE, \"targetFocusId\", self.globals.targetFocusId);\n          deltas.adds.forEach(stopPin => {\n            //console.log(SOURCE, \"ADD stopPin\", stopPin.title);\n            let url = self.globals.idxURL[stopPin.urlHash];\n            if (url && url.length > 0) {\n              self.addPin(stopPin, url, stopPin.zIndex, null, 1);\n            } else {\n              stopPin\n                  .dataUrlAsync()\n                  .then(pinUrl => {\n                    //console.log(SOURCE, \"stopPin addPin\", stopPin.title);\n                    self.addPin(stopPin, pinUrl, stopPin.zIndex, null, 1);\n                  });\n            }\n\n          });\n          //console.log(\"updateStopPins newPins POST ADDS\", newPins.length);\n\n          deltas.removes.forEach(stopPin => {\n            //console.log(SOURCE, \"REMOVE stopPin\", stopPin.title);\n            if (stopPin) {\n              self.removeMarker(stopPin, stopPin.marker)\n            } else {\n              RwLog.consoleError(\"remove without marker???\", stopPin.title)\n            }\n          });\n\n\n          deltas.deltas.forEach(stopPin => {\n            //let isNewer = stopPin.lastHash > this.refreshRouteDeltaTS;\n            //console.warn(SOURCE, \"UPDATE stopPin\", stopPin.title);\n            //console.warn(SOURCE, \"UPDATE stopPin\", stopPin.title, \"isNewer\", isNewer, \"lastHash:\", stopPin.lastHash, \"TS\", this.refreshRouteDeltaTS);\n            this.updatePin(stopPin)\n          });\n\n\n          //this.plan.updateStopPins(deltas.adds, deltas.removes, deltas.deltas);\n        } else {\n          //console.warn(SOURCE, \"NO DELTAS\")\n        }\n\n\n        //xTEST: updatePolyline\n        this.updatePolyline(route);\n\n        //Zoom To Route\n        this.zoomCheck(route);\n\n      } else {\n        //console.warn(SOURCE, \"NO PINS\")\n      }\n\n      this.isRefreshing = false;\n\n      if (this.gotRefreshOnDeck) {\n        setTimeout(() => this.refreshRouteDelta(), 100)\n      }\n\n    }\n\n  }\n\n\n  private refreshStartPinDelta(route: RwRoute) {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.refreshStartPinDelta\"\n    //console.log(SOURCE, route.routeId)\n    let routePin = this.space.startPin;\n    if (routePin) {\n      let isCurrent = routePin.eid === route.routeId;\n      if (isCurrent) {\n\n        let gotStartDelta = route.lastHash > this.refreshRouteDeltaTS || routePin.lastHash > this.refreshRouteDeltaTS;\n        if (gotStartDelta) {\n          //console.log(SOURCE, \"UPDATE gotStartDelta\")\n          if (routePin.marker) {\n\n            let isUpdatedPosition = route.lat != routePin.lat || route.lng != routePin.lng;\n            if (isUpdatedPosition && routePin.marker) {\n              if (!(route.lat == 0 && route.lng == 0)) {\n                routePin.lat = route.lat;\n                routePin.lng = route.lng;\n                self.updateMarkerPosition(routePin, routePin.marker)\n              } else {\n                this.globals.showSnack('Route start cannot be (0,0)', 'error');\n              }\n            }\n\n            //console.log(SOURCE, \"UPDATE gotStartDelta updatePin\")\n            this.updatePin(routePin);\n          } else {\n            RwLog.warn(SOURCE, `NO MARKER!`);\n            // Refresh route instead of setting new pin to avoid duplicate pin\n            this.refreshRoute();\n          }\n        } else {\n          //console.log(SOURCE, \"NOOP: gotStartDelta\")\n        }\n      } else {\n        RwLog.consoleError(SOURCE, \"WTF, NOT CURRENT!\")\n      }\n    } else {\n      RwLog.consoleError(SOURCE, \"NO PIN!\")\n      this.refreshStartPin();\n      routePin = this.space.startPin;\n    }\n\n    this.startPinCache = routePin;\n    return routePin;\n  }\n\n\n  private zoomCheck(route: RwRoute) {\n    const self = this;\n    let zoomTime = false;\n    let gotNewRoute = route.routeId != this.lastZoomedRouteId;\n    if (gotNewRoute) {\n      //console.log(\"refreshRoute gotNewRoute zoomTime\");\n      zoomTime = true;\n      self.lastRouteLoadTime = route.loadTimeStops;\n\n      let pin = this.space.startPin;\n      if (pin) {\n        self.space.setPinSelection(self.space.startPin, true, false);\n      }\n    } else {\n      if (route.loadTimeStops > self.lastRouteLoadTime) {\n        zoomTime = true;\n        self.lastRouteLoadTime = route.loadTimeStops;\n      }\n    }\n\n    if (zoomTime) {\n      route.zoomedTo = true;\n      //console.log(\"refreshRoute zoomToRoute\");\n      self.resizeMapView();\n      setTimeout(() => {\n        if (self.zoomToRoute(true)) {\n          self.lastZoomedRouteId = route.routeId;\n          self.lastRenderedStopCount = route.stops.length;\n          //resizeMapView will interfere with zoom animation\n          setTimeout(() => self.resizeMapView(), 2500);\n        }\n      }, 1000); //Adjusting this allows time for map to prepare for zoom\n\n    }\n  }\n\n\n  private cacheStopPinSet(pins: RwPin[]) {\n    this.refreshRouteDeltaTS = Date.now();\n    if (pins && pins.length > 0) {\n      this.stopPinCache = [...pins];\n    } else {\n      this.stopPinCache = [];\n    }\n  }\n\n\n  private gotRoutePinDelta(route: RwRoute): RwPin {\n    let updatedPin: RwPin;\n    let startPin = this.space.startPin;\n    if (startPin) {\n      let currHash = startPin.urlHash;\n      let newPin = RwPin.fromRoute(route);\n      let newHash = newPin.urlHash;\n      let isDelta = currHash !== newHash;\n      if (isDelta) {\n        updatedPin = newPin;\n      }\n      //console.warn(\"gotRouteDelta\", isDelta, currHash, newHash);\n    }\n    return updatedPin;\n  }\n\n\n  private createClusterPins(pins: RwPin[]): RwPin[] {\n\n    //Identify Stops Same Location Point\n    let clusterPins: RwPin[] = [];\n    if (pins.length > 1) {\n\n      //xWIP: createClusterPins Short-Circuit: Check if there are any clusters\n      //let gotClusters = pins.find(p => p.clusterParent\n\n      let idxGeo: { [locHash: string]: RwPin[] } = {};\n      pins.forEach(stopPin => {\n        //DEFER: Consider if clustered Pins must have beyond location same dependencies (e.g. TW, Drops)\n        let locHash = md5(`${stopPin.lat},${stopPin.lng}`, 8);\n        if (idxGeo[locHash]) {\n          idxGeo[locHash].push(stopPin);\n        } else {\n          let newPinArray = [stopPin];\n          idxGeo[locHash] = newPinArray;\n        }\n      });\n\n      //For locations with more than 1 stop; add to clusters list\n      for (let key in idxGeo) {\n        let geoCluster: RwPin[] = idxGeo[key];\n        if (geoCluster.length >= 2) {\n          let clusterPin = RwPin.fromStopPins(geoCluster);\n          clusterPins.push(clusterPin);\n        }\n      }\n    }\n\n    return clusterPins;\n  }\n\n\n  private clearClusterMarkers() {\n    let mapGroup = this.getMapGroupByType(RwPinTypes.Route);\n    if (mapGroup) {\n      let mapObjects = mapGroup.getObjects();\n      //let stopMarkers = mapObjects.filter(mo => (mo as RwMarker).pinType === RwPinTypes.Stop).map(mo => mo as RwMarker);\n      let stopMarkers = mapObjects.map(mo => mo as RwMarker);\n      let clusterMarkers = stopMarkers.filter(m => m.pin && m.pin.isCluster);\n      if (clusterMarkers.length > 0) {\n        clusterMarkers.forEach(dm => mapGroup.removeObject(dm))\n      }\n    }\n  }\n\n\n  refreshStartPin() {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.refreshStartPin\";\n\n    if (this.map && this.activeRoute && self.isMapReady) {\n      let route = this.activeRoute;\n\n      //xTEST: refreshStartPin: selection | focus logic\n      let setSelect = self.globals.targetSelectId && self.globals.targetSelectId === route.routeId;\n      let setFocus = self.globals.targetFocusId && self.globals.targetFocusId === route.routeId;\n      if (setFocus) {\n        setSelect = true;\n      }\n\n      let routePin = RwPin.fromRoute(route);\n      let anchor: H.math.Point = null;\n      if (route.isDynLoc) {\n        anchor = new H.math.Point(24, 24);\n      }\n\n      this.startPinCache = routePin;\n      this.space.startPin = routePin;\n\n      routePin\n          .dataUrlAsync()\n          .then(url => {\n\n            //console.log(SOURCE, \"routePin addPin\", routePin.title);\n            self\n                .addPin(routePin, url, self.startPinZIndex, null, 1, anchor)\n                .then(isAdded => {\n                  if (isAdded) {\n                    routePin.lastHash = Date.now();\n                    //console.log(\"refreshStartPin\", setSelect, setFocus);\n                    if (setSelect) self.space.setPinSelection(routePin, true);\n                    if (setFocus) self.focusPin(routePin, true, false);\n                  } else {\n                    RwLog.consoleError(\"WTF: refreshStartPin addPin FAILED\", routePin.type);\n                  }\n                });\n          });\n    }\n  }\n\n\n  private addSitePins(pins, cachedUrl) {\n    const self = this;\n    pins.forEach(pin => {\n      if (pin.eid === this.globals.targetSelectId) {\n        let setFocus = pin.eid === this.globals.targetFocusId;\n        self.space.setPinSelection(pin, true, setFocus);\n      }\n      self.addPin(pin, cachedUrl, 2, null, 40 / 48);\n    })\n  }\n\n\n  refreshSites() {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.refreshSites\"\n\n    if (this.map && self.isMapReady && RwPrefUtils.showDataLayerSites) {\n      this.clearSitePins();\n      let pins = this.space.sitePinsFiltered;\n      //console.warn(\"RwPlannerMap refreshSites\", this.refreshSitesCount, pins.length);\n\n      //Add Sites\n      if (pins) {\n        pins.forEach(sitePin => {\n          if (sitePin) {\n\n            if (sitePin.eid === this.globals.targetSelectId) {\n              let setFocus = sitePin.eid === this.globals.targetFocusId;\n              self.space.setPinSelection(sitePin, true, setFocus);\n            }\n\n            let args = sitePin.imgArgs;\n            let hash = RwPin.getPinHash(args);\n            let cachedUrl = this.globals.idxURL[hash];\n            if (cachedUrl) {\n              self.addPin(sitePin, cachedUrl, 2, null, 40 / 48);\n            } else {\n              RwPin\n                  .calcSitePinUrlNew(hash, args)\n                  .then(dataUrl => {\n                    //console.log(SOURCE, \"sitePin addPin\", sitePin.title);\n                    self.addPin(sitePin, dataUrl, 2, null, 40 / 48);\n                  });\n\n            }\n          }\n        });\n      }\n    }\n  }\n\n\n  refreshTasks() {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.refreshTasks\"\n\n    if (this.map && self.isMapReady && RwPrefUtils.showDataLayerTasks) {\n      this.clearTaskPins();\n      let pins = this.space.taskPinsFiltered;\n\n      //Add Pins to Map\n      if (pins) {\n        pins.forEach(taskPin => {\n          if (taskPin) {\n\n            let args = taskPin.imgArgs;\n            let hash = RwPin.getPinHash(args);\n            let cachedUrl = this.globals.idxURL[hash];\n\n            if (cachedUrl) {\n              //console.warn(SOURCE, \"cachedUrl\", hash, cachedUrl);\n              if (taskPin.eid === this.globals.targetSelectId) {\n                let setFocus = taskPin.eid === this.globals.targetFocusId;\n                self.space.setPinSelection(taskPin, true, setFocus);\n              }\n              self.addPin(taskPin, cachedUrl, taskPin.zIndex, null, 1);\n            } else {\n              if (taskPin.eid === this.globals.targetSelectId) {\n                let setFocus = taskPin.eid === this.globals.targetFocusId;\n                self.space.setPinSelection(taskPin, true, setFocus);\n              }\n\n              //console.warn(SOURCE, \"PRE calcTaskPinUrl\", hash);\n              RwPin\n                  .calcTaskPinUrl(hash, args)\n                  .then(dataUrl => {\n                    self.addPin(taskPin, dataUrl, taskPin.zIndex, null, 1);\n                  });\n            }\n          }\n        });\n      }\n    }\n  }\n\n\n  updatePolyline(route: RwRoute) {\n    const self = this;\n    if (route.path && route.path.length > 0) {\n      self.clearPath();\n      let coords = self.decodePath(route.path, 5);\n      let strip = new H.geo.LineString() as any;\n      coords.forEach(c => {\n        strip.pushPoint(new H.geo.Point(c.lat, c.lng));\n      });\n\n      let polylineOpts: H.map.Polyline.Options = {\n        //style: {lineWidth: 6, strokeColor: \"rgba(233,30,99,0.5)\"}, //E91E63\n        style: {lineWidth: 6, strokeColor: \"rgba(33,245,218,0.76)\"},\n        /*arrows: {\n          fillColor: \"rgba(255, 255, 255,0.7)\",\n          frequency: 4,\n          width: 2,\n          length: 4\n        }*/\n      };\n\n      self.polyLine = new H.map.Polyline(strip, polylineOpts);\n      self.mapGroupRoute.addObject(self.polyLine);\n      self.polyString = route.path;\n    } else {\n      self.clearPath();\n    }\n  }\n\n\n  refreshRouteInfo(route: RwRoute) {\n    let self = this;\n\n    //REFACTOR: This should be calculated fields on the route\n    let travelText = \"\";\n    let distText = \"\";\n    let timeText = \"\";\n    let warningText = \"\";\n    let rtTimeText = \"\";\n\n    if (route != null) {\n      travelText = route.travelTimeText;\n      distText = route.totalDistText;\n      timeText = route.totalTimeString;\n      warningText = route.fullVioText;\n      rtTimeText = route.departureTimeString;\n    }\n\n    this.space.travelTimeText = travelText == null ? \"\" : \"Travel Time: \" + travelText;\n    this.space.totalDistText = distText == null ? \"\" : \"Travel Dist: \" + distText;\n    this.space.totalTimeText = timeText == null ? \"\" : \"Total Time: \" + timeText;\n    this.space.routeTimeText = rtTimeText ? rtTimeText : \"\";\n    this.space.routeWarningText = warningText;\n  }\n\n\n  //#endregion\n\n\n  //region Helper Ops\n\n  onMapOptions() {\n\n    //xTEST: Remove\n    // let realToken = RwPrefUtils.token;\n    // RwPrefUtils.token = \"64e08c26-1757-48b2-879e-f97c99c80aa7\";\n    // RwTaskMisc.getWebPrefs()\n    //     .then(prefs => {\n    //       RwPrefUtils.token = realToken;\n    //       if (prefs.FlexOptIn && prefs.FlexOptIn !== 0) {\n    //         RwPrefUtils.flexOptInSelected = prefs.FlexOptIn;\n    //       }\n    //       else {\n    //         RwTaskLicense.getLicenseCount().then(lc => {\n    //           if (lc.LicenseCount > 0 || theStore.drivers.length > 0) theStore.showFlexOptIn = true;\n    //         })\n    //       }\n    //     })\n    //   .catch(err => {\n    //     RwPrefUtils.token = realToken;\n    //     RwLog.consoleLog(\"onMapOptions\", `err: ${err}`)\n    //   })\n\n\n    //xTEST: Remove\n    // let jRoute = {\"nm\":\"September 30 Jordan \",\"rid\":\"28e6591f-623f-496e-bd29-ac7a194cda4d\",\"uid\":\"15326636-3931-4eac-bceb-f53299598169\",\"rnm\":\"September 30 Jordan \",\"ssm\":1601502180000,\"sem\":1601574180000,\"lat\":51.1966833,\"lon\":-114.5153631,\"om\":2,\"mode\":\"driving\",\"vio\":0,\"tdist\":63946,\"t2d\":4588,\"ttime\":5548,\"uhard\":true,\"ihstt\":false,\"ihstp\":false,\"idl\":true,\"t2i\":0,\"irt\":false,\"imo\":false,\"isArch\":false,\"isTemp\":false,\"isComp\":false,\"status\":0,\"assign\":0,\"rtime\":0,\"rdist\":0,\"note\":\"\",\"poly\":\"_jnwHvg}yTm@eC@_@fBoFzCoIlBsDxBcDdB|DhAdCdM}SlAgBmAhBqBdDgCyFiA_CeAa@_AA[iE_@mAaAyDuAoGtAnGx@bDiBnB{A|A_@d@GZCrJ\\\\|@lBzDyB`DqBtDyCnIyDDmNIEkAESE]BoGsA@qBA[GoCcBeBwAbAgFcFcDc@[fA{F`BoI}GqE`E}RpAkHvAiI?[l@cDn@aEnD_X`B}Ir@yCx@wCbAcDj@cBjBoEjDlAhAXhARdBTzCRxD?pCSnC[p@M`Hw@zQ}BjCWpACbCBbBVpF`ADc@p@{Cj@cAz@w@tAiCNg@|@kGd@sE`@Fp@@q@Aa@EB}MAgCoE]sAq@k@g@o@lCUr@a@p@_@T_@AsAi@gA}@iBw@yAb@AyB?mDB_@HC|Ah@fAh@fCjBV\\\\BN?V_@~@i@vArAh@^B^W^q@Vs@n@mCh@d@ZPx@^pGl@`JpAz@G~@_@h@q@`@s@Z_Af@_CrB{IlB|@x@TnDd@InACZGNMACKFuBjEj@{IkAy@QoB}@fBqHjC{ImCyClCxCmCzIeBpHyCvM[`Aa@p@i@p@_A`@}@F_JqAaAK@dCC|Me@pE}@jGOf@wAhCy@v@k@bAq@|CE`@jCf@\\\\H^@bCr@|A^~EzAnAZnATzAJ`ABnBGn@GxBc@~@WnAe@lAq@xB_B|@{@bF{Fzq@{x@|DcEdDoCtB{AjC_B|BoAbSsJ`EuBdBw@hDcBpDeB|HkDzD}A`A[hAYtAUxC_@v@GfCGnR?`Z@lOIv@BdQKhTBfBAbaB@tsAAng@FfEDb`@FrAA`f@@PBjY?lcAGpUDlHAzHIf}AMlsAK|KAzN?tED`FCvMIbAIt@KtBg@p@IfD?R@VX@XDRNTNHTAVWb@MxLC|KThAHlARvAX`Cp@`Br@xCfBnA|@hB~AzA~AlAxAdA~AbAdB`AlB~@tBz@rBv@xBhFhQvE|NrAlDrBbF`ArB|AtCjFfJ~@dB|ClFhDnFhArAhFjF~U`UhAdApA~@nAp@zAn@na@`P~F|BzAr@z@f@r@j@hArA`@n@jC~E~c@~|@jBnEp@dB|B`H~@jCjPzf@dGvQrAtDh@hBrAhE`[d_Ar@hBv@`Bn`@bq@dYxe@zAdCfAvAvAzAx\\\\`]|M~MvA|AhCbDXVXP~DLjBH`OxAzALpCJhB@lBAlESxAGnN{@hIIzqBAHgGDk|ADyDFmCJeBVcCRoAd@}Bp@sCfAyD`AsDd@mCXeCP_DHeDBcWB_BNuCRgCNkAb@yC\\\\{Az@{C~@iCbAaCbb@icAvAaE`AqERmA^aDTuDHkEBqj@?aq@H_FT}EZuCd@uC~@eEt@wBzAkDzA}CxAoCzAaDx@aCr@gCf@eCPmA^sC\\\\uFFmE@kCLie@E}CGkC[}E_@uCsDmRm@_EYuDG_AGaD@wDHwCvAiTP{Bf@qH\\\\wDzA}T\\\\eE\\\\cD\\\\gCv@yEPy@dJgj@dEmW^wEPsDB{B?kDC_BYaGUgC_@kCo@eD{Jce@{@oEy@aG[{DGgBEeBCwDK}pC@{BLgENiDTuDh@aFx@sF~@wEfAkEtAkEb@eAbAcChAwBrCwEtAkBtB}B|@y@`DeCvBmAxFeClCiApBaAxBqAjA}@xAmA`AgAz@eAt@aApAqBd@u@dAuBbBuDvAgEd@_BXcAl@oCl@kDh@{D\\\\qCVcDLmBJwCDsDBaCCgh@nADJZ@ri@KbFwApQDvfAEdc@@tcAE|AQ~@gD`Ho@lAyAlB{F`FeChB}HrDmEjEYqCVcG\",\"did\":\"9628f8f9-293c-4f3b-912f-d09f5c0bb6fc\",\"add\":\"51.19668, -114.51536\",\"avoids\":[]}\n    // let route = new RwRoute(jRoute);\n    // this.globals.copyRoute(route, RwRouteCopyType.AllStops)\n\n    //RwTaskManifest.TestImportManifestV2();\n\n    this.space.showMapOptions = true;\n  }\n\n\n  private forceViewPopup() {\n    if (this.pinClicked) {\n      if (this.space.selectedPin != this.pinClicked) {\n        this.space.setPinSelection(this.pinClicked, true, false);\n      }\n      this.space.forceShowDataView();\n    }\n  }\n\n  updateDynamicRouteStart() {\n    if (this.activeRoute.isDynLoc && !!this.activeRoute.driver && (this.lastDrvLoc.lat !== this.activeRoute.driver.lat && this.lastDrvLoc.lng !== this.activeRoute.driver.lng)) {\n      this.lastDrvLoc.lat = this.activeRoute.driver.lat;\n      this.lastDrvLoc.lng = this.activeRoute.driver.lng;\n      this.updateStartAtCoord(this.activeRoute.driver.lat, this.activeRoute.driver.lng, true);\n    }\n  }\n\n  //endregion Helper Ops\n\n  //#region LifeCycle\n\n\n  created() {\n    window.addEventListener(\"resize\", this.resizeViaWindow, {passive: true});\n  }\n\n  resizeViaWindow() {\n    this.resizeMapView();\n  }\n\n\n  mounted() {\n    //console.warn(`RwPlannerMap.mounted`);\n    setTimeout(() => this.mapInit(), 100);\n    RwEventBus.$on(RwEvents.RouteRefresh, () => {\n      this.refreshRouteFull();\n    });\n\n    RwEventBus.$on(RwEvents.StopUpdate, (stopId) => {\n      let stopPin = this.stopPins.find(s => s.stop && s.stop.stopId === stopId);\n      if (stopPin && stopPin.marker) {\n        //this.updateMarkerPosition(stopPin, stopPin.marker);\n        this.removePinFromMap(stopPin);\n        this.$nextTick(() => {\n          this.addPin(stopPin, this.globals.idxURL[stopPin.urlHash], stopPin.zIndex, null, 1);\n        })\n        this.map.setCenter(new H.geo.Point(stopPin.lat, stopPin.lng), true);\n      }\n    });\n\n    RwEventBus.$on(RwEvents.MapReRender, () => {\n      this.resizeMapViewDelayed(1000);\n    });\n  }\n\n\n  activated() {\n    this.resizeMapView();\n\n    const isFirstTime = this.isRenderedRoute == false;\n    if (isFirstTime && this.isMapReady) {\n      //console.error(\"RwPlannerMap.activated >> refreshView\");\n      this.refreshAll();\n    } else {\n      //console.info(\"RwPlannerMap.activated SKIPPED refreshView\");\n    }\n  }\n\n\n  destroyed() {\n    window.removeEventListener(\"resize\", this.resizeViaWindow);\n  }\n\n\n  //#endregion\n\n\n  onStopAddTask() {\n    this.showMenuStopPin = false;\n    this.space.addTaskFromPin(this.pinClicked)\n  }\n\n  get changePin(): RwPin {\n    return this.space.changePin;\n  }\n\n  @Watch(\"changePin\")\n  watchChangePin(val) {\n    if (this.changePin) {\n      this.updatePinPosition(this.space.changePin);\n      this.space.changePin = null;\n    }\n  }\n\n}\n\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerMap.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerMap.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerMap.vue?vue&type=style&index=0&id=7213fbb6&prod&lang=scss&\"","import { render, staticRenderFns } from \"./RwPlannerMap.vue?vue&type=template&id=7213fbb6&\"\nimport script from \"./RwPlannerMap.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPlannerMap.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwPlannerMap.vue?vue&type=style&index=0&id=7213fbb6&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","// extracted by mini-css-extract-plugin\nexport {};","// Styles\nimport \"../../../src/components/VTimeline/VTimeline.sass\";\nimport mixins from '../../util/mixins'; // Mixins\n\nimport Themeable from '../../mixins/themeable';\nexport default mixins(Themeable\n/* @vue/component */\n).extend({\n  name: 'v-timeline',\n\n  provide() {\n    return {\n      timeline: this\n    };\n  },\n\n  props: {\n    alignTop: Boolean,\n    dense: Boolean,\n    reverse: Boolean\n  },\n  computed: {\n    classes() {\n      return {\n        'v-timeline--align-top': this.alignTop,\n        'v-timeline--dense': this.dense,\n        'v-timeline--reverse': this.reverse,\n        ...this.themeClasses\n      };\n    }\n\n  },\n\n  render(h) {\n    return h('div', {\n      staticClass: 'v-timeline',\n      class: this.classes\n    }, this.$slots.default);\n  }\n\n});\n//# sourceMappingURL=VTimeline.js.map","// Types\nimport mixins from '../../util/mixins';\nimport VIcon from '../VIcon'; // Mixins\n\nimport Themeable from '../../mixins/themeable';\nimport Colorable from '../../mixins/colorable';\nconst baseMixins = mixins(Colorable, Themeable\n/* @vue/component */\n);\nexport default baseMixins.extend().extend({\n  name: 'v-timeline-item',\n  inject: ['timeline'],\n  props: {\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    fillDot: Boolean,\n    hideDot: Boolean,\n    icon: String,\n    iconColor: String,\n    large: Boolean,\n    left: Boolean,\n    right: Boolean,\n    small: Boolean\n  },\n  computed: {\n    hasIcon() {\n      return !!this.icon || !!this.$slots.icon;\n    }\n\n  },\n  methods: {\n    genBody() {\n      return this.$createElement('div', {\n        staticClass: 'v-timeline-item__body'\n      }, this.$slots.default);\n    },\n\n    genIcon() {\n      if (this.$slots.icon) {\n        return this.$slots.icon;\n      }\n\n      return this.$createElement(VIcon, {\n        props: {\n          color: this.iconColor,\n          dark: !this.theme.isDark,\n          small: this.small\n        }\n      }, this.icon);\n    },\n\n    genInnerDot() {\n      const data = this.setBackgroundColor(this.color);\n      return this.$createElement('div', {\n        staticClass: 'v-timeline-item__inner-dot',\n        ...data\n      }, [this.hasIcon && this.genIcon()]);\n    },\n\n    genDot() {\n      return this.$createElement('div', {\n        staticClass: 'v-timeline-item__dot',\n        class: {\n          'v-timeline-item__dot--small': this.small,\n          'v-timeline-item__dot--large': this.large\n        }\n      }, [this.genInnerDot()]);\n    },\n\n    genDivider() {\n      const children = [];\n      if (!this.hideDot) children.push(this.genDot());\n      return this.$createElement('div', {\n        staticClass: 'v-timeline-item__divider'\n      }, children);\n    },\n\n    genOpposite() {\n      return this.$createElement('div', {\n        staticClass: 'v-timeline-item__opposite'\n      }, this.$slots.opposite);\n    }\n\n  },\n\n  render(h) {\n    const children = [this.genBody(), this.genDivider()];\n    if (this.$slots.opposite) children.push(this.genOpposite());\n    return h('div', {\n      staticClass: 'v-timeline-item',\n      class: {\n        'v-timeline-item--fill-dot': this.fillDot,\n        'v-timeline-item--before': this.timeline.reverse ? this.right : this.left,\n        'v-timeline-item--after': this.timeline.reverse ? this.left : this.right,\n        ...this.themeClasses\n      }\n    }, children);\n  }\n\n});\n//# sourceMappingURL=VTimelineItem.js.map","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VLazy } from 'vuetify/lib/components/VLazy';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VTimeline } from 'vuetify/lib/components/VTimeline';\nimport { VTimelineItem } from 'vuetify/lib/components/VTimeline';\nimport Scroll from 'vuetify/lib/directives/scroll';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticStyle:{\"height\":\"100%\",\"width\":\"100%\",\"background-color\":\"white\"}},[_c(VRow,{staticStyle:{\"height\":\"48px\",\"width\":\"100%\",\"background-color\":\"green\"},attrs:{\"no-gutters\":\"\"}},[_c(VTabs,{class:_vm.backColor,attrs:{\"grow\":\"\",\"show-arrows\":\"\"},model:{value:(_vm.idxTab),callback:function ($$v) {_vm.idxTab=$$v},expression:\"idxTab\"}},[_c(VTab,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showSteps),expression:\"showSteps\"}],key:\"0\",class:_vm.globals.backColorBar},[_vm._v(\"Itinerary\")]),_c(VTab,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showStops),expression:\"showStops\"}],key:\"1\",class:_vm.globals.backColorBar},[_vm._v(\"Stops\")]),_c(VTab,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showSites),expression:\"showSites\"}],key:\"2\",class:_vm.globals.backColorBar},[_vm._v(\"Favorites\")]),_c(VTab,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showTasks),expression:\"showTasks\"}],key:\"3\",class:_vm.globals.backColorBar},[_vm._v(\"Tasks\")])],1)],1),_c(VRow,{staticStyle:{\"height\":\"calc(100% - 48px)\",\"width\":\"100%\",\"background-color\":\"green\"},attrs:{\"no-gutters\":\"\"}},[_c(VTabsItems,{staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},model:{value:(_vm.idxTab),callback:function ($$v) {_vm.idxTab=$$v},expression:\"idxTab\"}},[_c(VTabItem,{key:\"0\",staticClass:\"rw-container tab-content timeline-tab\",class:_vm.globals.theme,staticStyle:{\"width\":\"100%\"},attrs:{\"no-gutters\":\"\"}},[_c('RwPlannerActions',{attrs:{\"stops\":_vm.stops,\"showAddStopsImage\":\"true\"},on:{\"addStop\":function($event){return _vm.$emit('addStop')},\"orderRoute\":function($event){return _vm.$emit('orderRoute')},\"assignToDriver\":function($event){return _vm.$emit('assignToDriver')}}}),_c(VRow,{staticClass:\"rw-container ma-0 pa-0\",staticStyle:{},attrs:{\"no-gutters\":\"\"}},[(_vm.idxTab === 0)?_c(VTimeline,{staticClass:\"smallText tab-content\",class:_vm.globals.theme,staticStyle:{\"width\":\"100%\",\"height\":\"100%\"},attrs:{\"fixed-header\":\"\",\"align-top\":\"\",\"dense\":\"\"},on:{\"click\":_vm.onTimeLine}},_vm._l((_vm.steps),function(step,idxStep){return _c(VTimelineItem,{key:idxStep,staticClass:\"text-left\",attrs:{\"color\":_vm.stepColor(step),\"small\":step.stepType === 1,\"left\":\"\"},on:{\"click\":function($event){return _vm.onStepBody(step)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('span',{class:_vm.stepTextColor(step),on:{\"click\":function($event){return _vm.onStepIcon(step)}}},[_c('strong',[_vm._v(_vm._s(_vm.stepSeqText(step)))])])]},proxy:true}],null,true)},[(step.stepType === 0)?_c('div',[_c(VRow,{staticClass:\"text--primary\",staticStyle:{\"height\":\"36px\"},attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":function($event){return _vm.onStepBody(step)}}},[_c(VCol,{attrs:{\"cols\":\"7\"}},[_vm._v(_vm._s(step.text))]),_c(VCol,{staticClass:\"text-right mr-8\"},[_vm._v(_vm._s(step.time))])],1)],1):_vm._e(),(step.stepType === 1)?_c('div',[_c(VRow,{staticClass:\"grey--text mb-2\",style:(`font-size: small;${_vm.globals.isMobileView?'height:auto;':'height:24px;'}`),attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VCol,{staticClass:\"text-left\",attrs:{\"cols\":\"7\"}},[_vm._v(_vm._s(step.text))]),_c(VCol,{staticClass:\"text-right mr-8\"},[_vm._v(_vm._s(step.time))])],1)],1):(step.stepType === 2)?_c('div',[_c(VRow,{staticClass:\"text--primary\",staticStyle:{\"height\":\"36px\"},attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":function($event){return _vm.onStepBody(step)}}},[_c(VCol,{staticClass:\"text-left\",attrs:{\"cols\":\"7\"}},[_vm._v(_vm._s(step.text))]),_c(VCol,{staticClass:\"text-right mr-8\"},[_vm._v(_vm._s(step.time))])],1)],1):(step.stepType === 3)?_c('div',[_c(VRow,{staticClass:\"text--primary\",staticStyle:{\"height\":\"36px\"},attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":function($event){return _vm.onStepBody(step)}}},[_c(VCol,{attrs:{\"cols\":\"7\"}},[_vm._v(_vm._s(step.text))]),_c(VCol,{staticClass:\"text-right mr-8\"},[_vm._v(_vm._s(step.time))])],1)],1):(step.stepType === 4)?_c('div',[_c(VRow,{staticClass:\"text--primary\",staticStyle:{\"height\":\"36px\"},attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":function($event){return _vm.onStepBody(step)}}},[_c(VCol,[_vm._v(_vm._s(step.text))]),_c(VCol,{staticClass:\"text-right mr-8\"},[_vm._v(_vm._s(step.time))])],1)],1):_vm._e()])}),1):_vm._e()],1)],1),_c(VTabItem,{key:\"1\",staticClass:\"rw-container tab-content\"},[_c('RwPlannerActions',{attrs:{\"stops\":_vm.stops},on:{\"addStop\":function($event){return _vm.$emit('addStop')},\"orderRoute\":function($event){return _vm.$emit('orderRoute')},\"assignToDriver\":function($event){return _vm.$emit('assignToDriver')}}}),(_vm.idxTab === 1)?_c(VDataTable,{staticClass:\"tab-content\",class:_vm.globals.theme,attrs:{\"headers\":_vm.headerStops,\"items\":_vm.stopPins,\"disable-pagination\":\"\",\"multi-sort\":false,\"show-select\":_vm.isMultiMode,\"single-select\":_vm.isMultiMode === false,\"sort-by\":_vm.sortByStops,\"sort-desc\":_vm.sortDescStops,\"fixed-header\":\"\",\"hide-default-footer\":\"\",\"item-key\":\"id\",\"must-sort\":\"\"},on:{\"update:sortBy\":function($event){_vm.sortByStops=$event},\"update:sort-by\":function($event){_vm.sortByStops=$event},\"update:sortDesc\":function($event){_vm.sortDescStops=$event},\"update:sort-desc\":function($event){_vm.sortDescStops=$event},\"click:row\":_vm.onStopPinClick},scopedSlots:_vm._u([{key:\"item.baseOrder\",fn:function({ item }){return [_c('div',{staticClass:\"stop-icon-wrapper\"},[_c(VImg,{attrs:{\"src\":item.dataUrl ? item.dataUrl : '',\"contain\":\"\",\"height\":\"32\",\"width\":\"32\"}}),(item.stop && !!item.stop.siteId)?_c(VIcon,{staticClass:\"stop-favorite-icon\",attrs:{\"color\":_vm.getSiteColor(item.stop.siteId)}},[_vm._v(\" grade \")]):_vm._e()],1)]}},{key:\"item.title\",fn:function({ item }){return [_c('div',{staticClass:\"rw-cell\"},[_c('div',{staticClass:\"rw-cell-overflow\"},[_vm._v(\" \"+_vm._s(item.title)+\" \")])])]}},{key:\"item.address\",fn:function({ item }){return [_c('div',{staticClass:\"rw-cell\"},[(item.stop)?_c('div',{staticClass:\"rw-cell-overflow\"},[_vm._v(\" \"+_vm._s(item.stop.address)+\" \")]):_vm._e()])]}},(!_vm.isMultiMode)?{key:\"item.action\",fn:function({ item }){return [_c(VMenu,{scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();}}},on),[_c(VIcon,[_vm._v(\"mdi-dots-vertical\")])],1)]}}],null,true)},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c(VListItemTitle,[_vm._v(\"More Actions\")])]},proxy:true}],null,true)},[_c(VSubheader,[_c(VImg,{staticClass:\"mr-2\",staticStyle:{\"max-width\":\"56px\"},attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.pinClickedUrl(item)}}),_vm._v(\" \"+_vm._s(item ? item.title : '')+\" \")],1),_c(VDivider),_c(VListItem,{on:{\"click\":function($event){return _vm.onPinView(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"View Full Stop\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onEditStopClick(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit\")])],1),(_vm.globals.isActionAvailable(_vm.globals.Actions.deleteStops))?_c(VListItem,{on:{\"click\":function($event){return _vm.onDeleteStopClick(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,[_vm._v(\"Delete\")])],1):_vm._e(),(!_vm.space.isStopCompleted(item))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onStopCheckIn(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check-circle\")])],1),_c(VListItemTitle,[_vm._v(\"Check-In\")])],1):_c(VListItem,{on:{\"click\":function($event){return _vm.space.onStopRestore(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-checkbox-blank-circle\")])],1),_c(VListItemTitle,[_vm._v(\"Restore\")])],1),_c(VDivider),(_vm.space.canStopAddSite(item))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onStopAddSite(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-star\")])],1),_c(VListItemTitle,[_vm._v(\"Create Favorite\")])],1):_vm._e(),(_vm.space.canShowSkeds(item) && !_vm.space.isStopScheduled(item))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onStopAddSked(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-calendar-clock\")])],1),_c(VListItemTitle,[_vm._v(\"Add Schedule\")])],1):_vm._e(),(_vm.space.canShowSkeds(item) && _vm.space.isStopScheduled(item) && _vm.globals.isActionAvailable(_vm.globals.Actions.deleteSked))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onStopRemoveSked(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-calendar-clock\")])],1),_c(VListItemTitle,[_vm._v(\"Remove Schedule: \"+_vm._s(_vm.space.stopSkedText(item))+\" \")])],1):_vm._e(),(!_vm.space.hasDropStop(item))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onAddDropStop(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-package-variant\")])],1),_c(VListItemTitle,[_vm._v(\"Add Drop Stop\")])],1):_vm._e(),(_vm.space.hasDropStop(item))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onAddDropStop(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-package-variant\")])],1),_c(VListItemTitle,[_vm._v(\"Replace Drop Stop\")])],1):_vm._e(),(_vm.space.canShowRemoveDropStop(item))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onRemoveDropStop(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-package-variant-closed\")])],1),_c(VListItemTitle,[_vm._v(\"Remove Drop Stop (\"+_vm._s(_vm.space.getDropStopName(item))+\") \")])],1):_vm._e(),(_vm.space.canShowMarkFirst(item))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onStopMarkFirst(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-first\")])],1),_c(VListItemTitle,[_vm._v(\"Mark First\")])],1):_vm._e(),(_vm.space.canShowUnmarkFirst(item))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onStopUnmarkFirst(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-first\")])],1),_c(VListItemTitle,[_vm._v(\"Unmark First\")])],1):_vm._e(),(_vm.space.canShowMarkFinal(item))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onStopMarkFinal(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-last\")])],1),_c(VListItemTitle,[_vm._v(\"Mark Final\")])],1):_vm._e(),(_vm.space.canShowUnmarkFinal(item))?_c(VListItem,{on:{\"click\":function($event){return _vm.space.onStopUnmarkFinal(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-last\")])],1),_c(VListItemTitle,[_vm._v(\"Unmark Final\")])],1):_vm._e(),_c(VListItem,{on:{\"click\":function($event){return _vm.onStopRelocate(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-crosshairs\")])],1),_c(VListItemTitle,[_vm._v(\"Relocate Pin\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onStopMoveCopy(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-content-copy\")])],1),_c(VListItemTitle,[_vm._v(\"Move to Another Route\")])],1)],1)],1)]}}:null],null,true),model:{value:(_vm.selectedPins),callback:function ($$v) {_vm.selectedPins=$$v},expression:\"selectedPins\"}}):_vm._e()],1),_c(VTabItem,{key:\"2\",staticClass:\"rw-container tab-content\"},[_c('RwPlannerActions',{attrs:{\"stops\":_vm.stops},on:{\"addStop\":function($event){return _vm.$emit('addStop')},\"orderRoute\":function($event){return _vm.$emit('orderRoute')},\"assignToDriver\":function($event){return _vm.$emit('assignToDriver')}}}),(_vm.idxTab === 2)?_c(VDataTable,{directives:[{def: Scroll,name:\"scroll\",rawName:\"v-scroll:#virtualized-sites\",value:(_vm.onScrollSites),expression:\"onScrollSites\",arg:\"#virtualized-sites\"}],staticClass:\"tab-content\",class:_vm.globals.theme,attrs:{\"headers\":_vm.headerSites,\"items\":_vm.sitePins,\"id\":\"virtualized-sites\",\"multi-sort\":false,\"show-select\":_vm.isMultiMode,\"single-select\":_vm.isMultiMode === false,\"sort-by\":_vm.sortBySites,\"sort-desc\":_vm.sortDescSites,\"item-key\":\"id\",\"fixed-header\":\"\",\"must-sort\":\"\",\"disable-pagination\":\"\",\"hide-default-footer\":\"\"},on:{\"update:sortBy\":function($event){_vm.sortBySites=$event},\"update:sort-by\":function($event){_vm.sortBySites=$event},\"update:sortDesc\":function($event){_vm.sortDescSites=$event},\"update:sort-desc\":function($event){_vm.sortDescSites=$event},\"click:row\":_vm.onSitePinClick},scopedSlots:_vm._u([{key:\"item.baseOrder\",fn:function({ item }){return [_c(VLazy,[(item.isSite)?_c(VImg,{staticStyle:{\"margin-left\":\"4px\"},attrs:{\"src\":item.dataUrl ? item.dataUrl : '',\"height\":\"24\",\"width\":\"24\"}}):_vm._e(),(item.isSite === false)?_c(VImg,{attrs:{\"src\":item.dataUrl ? item.dataUrl : '',\"height\":\"32\",\"width\":\"32\"}}):_vm._e()],1)]}},{key:\"item.title\",fn:function({ item }){return [_c(VLazy,[_c('div',{staticClass:\"rw-cell\"},[_c('div',{staticClass:\"rw-cell-overflow\"},[_vm._v(\" \"+_vm._s(item.title)+\" \")])])])]}},{key:\"item.address\",fn:function({ item }){return [_c(VLazy,[_c('div',{staticClass:\"rw-cell\"},[_c('div',{staticClass:\"rw-cell-overflow\"},[_vm._v(\" \"+_vm._s(item.site.address)+\" \")])])])]}},{key:\"item.timeText\",fn:function({ item }){return [_c(VLazy,[_c('div',{staticClass:\"rw-cell\"},[_c('div',{staticClass:\"rw-cell-overflow\"},[_vm._v(\" \"+_vm._s(item.travelText)+\" \")])])])]}},(!_vm.isMultiMode)?{key:\"item.action\",fn:function({ item }){return [_c(VLazy,[_c(VMenu,{scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();}}},on),[_c(VIcon,[_vm._v(\"mdi-dots-vertical\")])],1)]}}],null,true)},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_vm._v(\"Site Actions\")]),_c(VDivider),_c(VListItem,{on:{\"click\":function($event){return _vm.onPinView(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"View Full Favorite\")])],1),(!_vm.space.isSiteRouted(item))?[_c(VListItem,{on:{\"click\":function($event){return _vm.space.onSiteToRoute(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-content-copy\")])],1),_c(VListItemTitle,[_vm._v(\"Add To Open Route\")])],1)]:_vm._e(),_c(VListItem,{on:{\"click\":function($event){return _vm.onEditSiteClick(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit\")])],1),(_vm.globals.isActionAvailable(_vm.globals.Actions.deleteFavorite))?_c(VListItem,{on:{\"click\":function($event){return _vm.onDeleteSiteClick(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,[_vm._v(\"Delete\")])],1):_vm._e(),_c(VDivider),_c(VListItem,{on:{\"click\":function($event){return _vm.onSiteRelocate(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-crosshairs\")])],1),_c(VListItemTitle,[_vm._v(\"Relocate\")])],1)],2)],1)],1)]}}:null],null,true),model:{value:(_vm.selectedPins),callback:function ($$v) {_vm.selectedPins=$$v},expression:\"selectedPins\"}}):_vm._e()],1),_c(VTabItem,{key:\"3\",staticClass:\"rw-container tab-content\"},[_c('RwPlannerActions',{attrs:{\"stops\":_vm.stops},on:{\"addStop\":function($event){return _vm.$emit('addStop')},\"orderRoute\":function($event){return _vm.$emit('orderRoute')},\"assignToDriver\":function($event){return _vm.$emit('assignToDriver')}}}),(_vm.idxTab === 3)?_c(VDataTable,{directives:[{def: Scroll,name:\"scroll\",rawName:\"v-scroll:#virtualized-tasks\",value:(_vm.onScrollTasks),expression:\"onScrollTasks\",arg:\"#virtualized-tasks\"}],staticClass:\"tab-content\",class:_vm.globals.theme,attrs:{\"headers\":_vm.headerTasks,\"items\":_vm.tasks,\"id\":\"virtualized-tasks\",\"hide-default-footer\":\"\",\"multi-sort\":false,\"show-select\":_vm.isMultiMode,\"single-select\":_vm.isMultiMode === false,\"sort-by\":_vm.sortByTasks,\"sort-desc\":_vm.sortDescTasks,\"fixed-header\":\"\",\"item-key\":\"id\",\"must-sort\":\"\",\"disable-pagination\":\"\"},on:{\"update:sortBy\":function($event){_vm.sortByTasks=$event},\"update:sort-by\":function($event){_vm.sortByTasks=$event},\"update:sortDesc\":function($event){_vm.sortDescTasks=$event},\"update:sort-desc\":function($event){_vm.sortDescTasks=$event},\"click:row\":_vm.onTaskPinClick},scopedSlots:_vm._u([{key:\"item.baseOrder\",fn:function({ item }){return [_c(VLazy,[_c(VImg,{attrs:{\"src\":item.dataUrl ? item.dataUrl : '',\"contain\":\"\",\"height\":\"24\",\"width\":\"24\"}})],1)]}},{key:\"item.title\",fn:function({ item }){return [_c(VLazy,[_c('div',{staticClass:\"rw-cell\"},[_c('div',{staticClass:\"rw-cell-overflow\"},[_vm._v(\" \"+_vm._s(item.title)+\" \")])])])]}},{key:\"item.address\",fn:function({ item }){return [_c(VLazy,[_c('div',{staticClass:\"rw-cell\"},[_c('div',{staticClass:\"rw-cell-overflow\"},[_vm._v(\" \"+_vm._s(item.task.address)+\" \")])])])]}},(!_vm.isMultiMode)?{key:\"item.action\",fn:function({ item }){return [_c(VLazy,[_c(VMenu,{scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();}}},on),[_c(VIcon,[_vm._v(\"mdi-dots-vertical\")])],1)]}}],null,true)},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_vm._v(\"Task Actions\")]),_c(VDivider),_c(VListItem,{on:{\"click\":function($event){return _vm.onPinView(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"View Full Task\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onEditTaskClick(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onTaskDelete(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,[_vm._v(\"Delete\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.space.onTaskToRoute(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-arrow-right\")])],1),_c(VListItemTitle,[_vm._v(\"Add to Open Route\")])],1),_c(VDivider),_c(VListItem,{on:{\"click\":function($event){return _vm.onTaskRelocate(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-crosshairs\")])],1),_c(VListItemTitle,[_vm._v(\"Relocate\")])],1)],1)],1)],1)]}}:null],null,true),model:{value:(_vm.selectedPins),callback:function ($$v) {_vm.selectedPins=$$v},expression:\"selectedPins\"}}):_vm._e()],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import {RwRoute} from \"@/app/dem/RwRoute\";\nimport {RwStop} from \"@/app/dem/RwStop\";\n// import {RwPin} from \"@/app/dem/RwPin\";\n// import {RwDateUtils} from \"@/app/utils/RwDateUtils\";\n// import theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\n// import thePlanSpace, {RwPlannerSpace} from \"@/app/views//planner/RwPlannerSpace\";\n//import { selectedPin } from \"@/app/views/planner/RwPlannerSpace\"\n\n\nexport enum RwStepTypes { start, travel, stop, finish, offRoute}\n\n\nexport class RwStep {\n\n    stepType: RwStepTypes;\n    seq: number\n    text: string;\n    time: string;\n    custColor: string;\n    isSelected: boolean;\n    stop: RwStop;\n    route: RwRoute;\n\n    // get globals(): RwGlobals {\n    //   return theGlobals;\n    // }\n    //\n    // get space(): RwPlannerSpace {\n    //   return thePlanSpace;\n    // }\n    //\n    // get stopPin():RwPin {\n    //   let pin:RwPin;\n    //   if(this.stop && this.stop.stopId){\n    //     let stopId = this.stop.stopId;\n    //     pin = this.space.stopPins.find(p => p.eid === stopId);\n    //   }\n    //   return pin;\n    // }\n    //\n    //\n    // get selectedPin():RwPin {\n    //   //return <RwPin>selectedPin.value;\n    //   return thePlanSpace.selectedPin\n    // }\n    //\n    //\n    // get stepColor() {\n    //   let stepColor = '';\n    //   if (this.custColor) {\n    //     stepColor = this.custColor;\n    //   }\n    //   else {\n    //     switch (this.stepType) {\n    //       //@formatter:off\n    //       case RwStepTypes.start: stepColor = '#6da848'; break;\n    //       case RwStepTypes.finish: stepColor = '#F00'; break;\n    //       case RwStepTypes.stop: stepColor = '#000'; break;\n    //       case RwStepTypes.travel: stepColor = '#3a3a3a'; break;\n    //       //@formatter:on\n    //     }\n    //   }\n    //   return stepColor;\n    // }\n    //\n    //\n    // get checkIsSelected():boolean{\n    //   let isSel = false;\n    //   let stop = this.stop;\n    //   let pin = this.stopPin;\n    //   if(stop && pin) {\n    //     //if (this.stepType == RwStepTypes.stop && this.pin && this.pin.stop) {\n    //     //let stop = this.pin.stop;\n    //     let selPin = this.selectedPin;\n    //     if (selPin && selPin.stop) {\n    //       isSel = selPin.stop.stopId === stop.stopId;\n    //     }\n    //   }\n    //   //console.warn(\"isSelected\", isSel);\n    //   return isSel;\n    // }\n    //\n    //\n    // get seqText(){\n    //   let seqText = '';\n    //   if (this.stepType == RwStepTypes.stop){\n    //     if(this.seq >= 1 && this.seq <= 240){\n    //       seqText = this.seq.toString();\n    //     }\n    //   }\n    //   return seqText;\n    // }\n    //\n    //\n    // static startStep(pin:RwPin, route:RwRoute): RwStep{\n    //   let step = new RwStep();\n    //   step.stepType = RwStepTypes.start;\n    //   step.seq = 0;\n    //   //step.pin = pin;\n    //   step.route = route;\n    //   step.text = \"START\";\n    //   if(route){\n    //     step.time = route.startTimeString;\n    //   }\n    //   return step;\n    // }\n    //\n    //\n    // static travelStep(stop:RwStop): RwStep{\n    //   let step = new RwStep();\n    //   //step.pin = pin;\n    //   step.stop = stop;\n    //   step.stepType = RwStepTypes.travel;\n    //   //step.seq = pin.seq - 0.5;\n    //   step.seq = stop.seq - 0.5;\n    //   step.text = \"travel to: \" + stop.address;\n    //   if(stop && stop.timeOfArr) {\n    //   //if(pin.stop && pin.stop.timeOfArr) {\n    //     //step.time = pin.stop.timeOfArr.toTimeString();\n    //     //step.time = pin.travelText;\n    //     step.time = stop.travelText;\n    //   }\n    //   return step;\n    // }\n    //\n    //\n    // static stopStep(stop:RwStop): RwStep {\n    //   let step = new RwStep();\n    //   //step.pin = pin;\n    //   step.stop = stop;\n    //   step.stepType = RwStepTypes.stop;\n    //   step.seq = stop.seq;\n    //   step.text = stop.name;\n    //\n    //   step.isSelected = step.checkIsSelected;\n    //\n    //   if (stop.timeOfArr) {\n    //     step.time = stop.timeText;\n    //   }\n    //\n    //   if (step.isSelected) {\n    //     step.custColor = \"#FFFFFF\";\n    //   }\n    //   else {\n    //     if (stop.isActive) {\n    //       if (stop.baseColor) {\n    //         step.custColor = stop.baseColor;\n    //       }\n    //     }\n    //     else {\n    //       step.custColor = \"#595a5b\";\n    //     }\n    //   }\n    //   return step;\n    // }\n    //\n    //\n    // static lastTravelStep(route:RwRoute): RwStep{\n    //   let step: RwStep;\n    //   if(route.isRoundTrip) {\n    //     step = new RwStep();\n    //     step.stepType = RwStepTypes.travel;\n    //     step.text = \"return to start\"\n    //     if(route.stops && route.stops.length > 0) {\n    //       step.time = route.travelReturnText;\n    //     }\n    //     step.seq = route.stops.length + 0.5;\n    //\n    //   }\n    //   return step;\n    // }\n    //\n    //\n    // static finishStep(route:RwRoute): RwStep{\n    //   let step = new RwStep();\n    //   step.stepType = RwStepTypes.finish;\n    //   step.text = \"FINISH\";\n    //   if(route && route.stops){\n    //     step.time = route.finishTimeString;\n    //     step.seq = route.stops.length + 1;\n    //   }\n    //   return step;\n    // }\n    //\n    //\n    // static offRouteStep(stop:RwStop): RwStep{\n    //   let step = new RwStep();\n    //   //step.pin = pin;\n    //   step.stop = stop;\n    //   step.stepType = RwStepTypes.offRoute;\n    //   //step.seq = pin.seq;\n    //   step.text = stop.name;\n    //   if(stop) {\n    //\n    //     step.isSelected = step.checkIsSelected;\n    //     if(stop.isComplete){\n    //       step.time = RwDateUtils.formatDate(stop.checkDate);\n    //     }\n    //     else {\n    //       step.time = \"off-route\";\n    //     }\n    //\n    //     if(step.isSelected){\n    //       step.custColor = \"#FFFFFF\";\n    //     }\n    //     else {\n    //       if (stop.isComplete) {\n    //         step.custColor = \"#595a5b\";\n    //       }\n    //       else {\n    //         if (stop.baseColor) {\n    //           step.custColor = stop.baseColor;\n    //         }\n    //       }\n    //\n    //       // if (stop.isActive) {\n    //       //   if (stop.baseColor) {\n    //       //     step.custColor = stop.baseColor;\n    //       //   }\n    //       // }\n    //       // else {\n    //       //   step.custColor = \"#595a5b\";\n    //       // }\n    //     }\n    //\n    //   }\n    //   return step;\n    // }\n    //\n\n}\n\n","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VItemGroup } from 'vuetify/lib/components/VItemGroup';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (!_vm.globals.isMobile())?_c(VItemGroup,{staticClass:\"v-btn-toggle\",class:{ dark: _vm.globals.isDarkMode },staticStyle:{\"margin\":\"12px\",\"position\":\"relative\"},attrs:{\"id\":\"tab-actions\"}},[_c(VBtn,{staticStyle:{\"border-radius\":\"8px 0 0 8px\"},on:{\"click\":function($event){return _vm.$emit('addStop')}}},[_c(VIcon,{attrs:{\"left\":\"\",\"color\":\"primary\"}},[_vm._v(\" mdi-magnify \")]),_c('span',[_vm._v(\"Add stop\")])],1),_c(VBtn,{attrs:{\"disabled\":!_vm.stops.length},on:{\"click\":function($event){return _vm.$emit('orderRoute')}}},[_c('div',{staticClass:\"star-icons\"},[_c(VIcon,{staticClass:\"top\",attrs:{\"left\":\"\",\"color\":\"primary\"}},[_vm._v(\" mdi-star-four-points \")]),_c(VIcon,{staticClass:\"middle\",attrs:{\"left\":\"\",\"color\":\"primary\"}},[_vm._v(\" mdi-star-four-points \")]),_c(VIcon,{staticClass:\"bottom\",attrs:{\"left\":\"\",\"color\":\"primary\"}},[_vm._v(\" mdi-star-four-points \")])],1),_c('span',[_vm._v(\"Order route\")])]),_c(VBtn,{staticStyle:{\"border-radius\":\"0 8px 8px 0\"},attrs:{\"disabled\":!_vm.stops.length},on:{\"click\":function($event){return _vm.$emit('assignToDriver')}}},[_c(VIcon,{attrs:{\"left\":\"\",\"color\":\"primary\"}},[_vm._v(\" mdi-account-outline \")]),_c('span',[_vm._v(\"Assign to driver\")])],1),(_vm.showAddStopsImage && _vm.globals.showOnboardAddStopArrowActive && _vm.stops.length === 0)?_c('RwAddStopsArrow',{attrs:{\"id\":\"add-stops-image\"}}):_vm._e(),(_vm.showAddStopsImage && _vm.stops.length === 0)?_c('button',{attrs:{\"id\":\"add-stops-button\"},on:{\"click\":function($event){return _vm.$emit('addStop')}}},[_c('img',{attrs:{\"src\":\"/images/icons/add_stops.svg\"}}),_vm._v(\" Add some stops to your route\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('lottie',{attrs:{\"options\":_vm.defaultOptions,\"height\":380,\"width\":380},on:{\"animCreated\":_vm.handleAnimation}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:\"lavContainer\",style:(_vm.style)})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n    <div :style=\"style\" ref=\"lavContainer\"></div>\n</template>\n\n<script>\n  import lottie from 'lottie-web';\n\n  export default {\n    props: {\n      options: {\n        type: Object,\n        required: true\n      },\n      height: Number,\n      width: Number,\n    },\n\n    data () {\n      return {\n        style: {\n          width: this.width ? `${this.width}px` : '100%',\n          height: this.height ? `${this.height}px` : '100%',\n          overflow: 'hidden',\n          margin: '0 auto'\n        }\n      }\n    },\n\n    mounted () {\n      this.anim = lottie.loadAnimation({\n          container: this.$refs.lavContainer,\n          renderer: 'svg',\n          loop: this.options.loop !== false,\n          autoplay: this.options.autoplay !== false,\n          animationData: this.options.animationData,\n          rendererSettings: this.options.rendererSettings\n        }\n      );\n      this.$emit('animCreated', this.anim)\n    }\n  }\n</script>\n","import mod from \"-!../../@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./lottie.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./lottie.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./lottie.vue?vue&type=template&id=3c796cc7&\"\nimport script from \"./lottie.vue?vue&type=script&lang=js&\"\nexport * from \"./lottie.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","\nimport { Component, Vue } from \"vue-property-decorator\";\nimport Lottie from 'vue-lottie';\nimport * as animationData from '@/assets/animations/add-stops-arrow.json';\n\n@Component({ components: { Lottie } })\nexport default class RwAddStopsArrow extends Vue {\n\n    defaultOptions = { animationData: animationData };\n    anim = null;\n\n    handleAnimation(anim) {\n        this.anim = anim;\n    }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwAddStopsArrow.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwAddStopsArrow.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwAddStopsArrow.vue?vue&type=template&id=15174084&scoped=true&\"\nimport script from \"./RwAddStopsArrow.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwAddStopsArrow.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"15174084\",\n  null\n  \n)\n\nexport default component.exports","\n\nimport { Component, Prop, Vue } from \"vue-property-decorator\";\nimport theGlobals, { RwGlobals } from \"@/app/RwGlobals\";\nimport { RwStop } from \"@/app/dem/RwStop\";\nimport RwAddStopsArrow from \"@/app/views/animations/RwAddStopsArrow.vue\";\n\n@Component({ components: { RwAddStopsArrow } })\nexport default class RwPlannerActions extends Vue {\n    @Prop() stops: RwStop[];\n    @Prop({ required: false, default: false }) showAddStopsImage: boolean;\n\n    get globals(): RwGlobals {\n        return theGlobals;\n    }\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerActions.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerActions.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerActions.vue?vue&type=style&index=0&id=34b0455a&prod&lang=scss&\"","import { render, staticRenderFns } from \"./RwPlannerActions.vue?vue&type=template&id=34b0455a&\"\nimport script from \"./RwPlannerActions.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPlannerActions.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwPlannerActions.vue?vue&type=style&index=0&id=34b0455a&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","\n\nimport moment from \"moment\";\nimport {Component, Prop, Vue, Watch} from \"vue-property-decorator\";\nimport {RwRoute} from \"@/app/dem/RwRoute\";\nimport {RwStop} from \"@/app/dem/RwStop\";\nimport {RwMarker, RwPin} from \"@/app/dem/RwPin\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views//planner/RwPlannerSpace\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport {RwMultiMode} from \"@/app/RwEnums\";\nimport {RwStep, RwStepTypes} from \"@/app/dem/RwStep\";\nimport {RwImgUtils} from \"@/app/utils/RwImgUtils\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport {RwDateUtils} from \"@/app/utils/RwDateUtils\";\nimport RwEventBus from \"@/utils/RwEventBus\";\nimport RwEvents from \"@/app/consts/RwEvents\";\nimport RwPlannerActions from \"@/app/views/planner/RwPlannerActions.vue\";\n\n@Component({components: {RwPlannerActions}})\nexport default class RwPlannerList extends Vue {\n\n\n  //#region Props\n\n  idxTab = 0;\n  stepsCount = 0;\n  private lastPinClickTime;\n  private lastPinClicked: RwPin = null;\n  showOverflowMenu = false;\n\n  get steps(): RwStep[] {\n    let stops = this.stops;\n    let selectPin = this.space.selectedPin;\n    let selectId = selectPin ? selectPin.eid : null;\n    let steps = this.genSteps(stops, selectId);\n    return steps;\n  }\n\n  set steps(val: RwStep[]) {\n    this.space.steps = val;\n  }\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get activeRoute(): RwRoute {\n    return this.space.activeRoute;\n  }\n\n  get selectedPin(): RwPin {\n    let selPin: RwPin;\n    if (this.space.isMultiMode == false) {\n      let selPins = this.selectedPins;\n      if (selPins && selPins.length > 0) {\n        selPin = selPins[0];\n      }\n    }\n    //console.warn(\"RwPinPanel.selectedPin\");\n    return selPin;\n  }\n\n  get headerStops(): any[] {\n    return [\n      {text: \"\", align: \"center\", value: \"baseOrder\"},\n      {text: \"Name\", align: \"left\", value: \"title\"},\n      {text: \"Address\", value: \"address\"},\n      {\n        text: \"Actions\",\n        value: \"action\",\n        width: 48,\n        align: \"center\",\n        divider: \"true\",\n        sortable: false\n      }\n    ];\n  }\n\n  get headerSites(): any[] {\n    return [\n      {text: \"\", align: \"center\", value: \"baseOrder\"},\n      {text: \"Name\", align: \"left\", value: \"title\"},\n      {text: \"Address\", value: \"address\"},\n      {\n        text: \"Actions\",\n        value: \"action\",\n        width: 48,\n        align: \"center\",\n        divider: \"true\",\n        sortable: false\n      }\n    ];\n  }\n\n  get headerTasks(): any[] {\n    return [\n      {text: \"\", align: \"center\", value: \"baseOrder\"},\n      {text: \"Name\", align: \"left\", value: \"title\"},\n      {text: \"Address\", value: \"address\"},\n      {\n        text: \"Actions\",\n        value: \"action\",\n        width: 48,\n        align: \"center\",\n        divider: \"true\",\n        sortable: false\n      }\n    ];\n  }\n\n\n  get selectedPins(): RwPin[] {\n    //console.log(\"RwPlannerList GET selectedPins\", this.space.selectedPins);\n    return this.space.selectedPins;\n  }\n\n  set selectedPins(val: RwPin[]) {\n    //console.log(\"RwPlannerList SET selectedPins\", val);\n    this.space.selectedPins = val;\n  }\n\n  get sortByStops(): string[] {\n    return RwPrefUtils.plannerSortByStops;\n  }\n\n  set sortByStops(val: string[]) {\n    RwPrefUtils.plannerSortByStops = val;\n  }\n\n  get sortDescStops(): boolean[] {\n    return RwPrefUtils.plannerSortDescStops;\n  }\n\n  set sortDescStops(val: boolean[]) {\n    RwPrefUtils.plannerSortDescStops = val;\n  }\n\n  get sortBySites(): string[] {\n    return RwPrefUtils.plannerSortBySites;\n  }\n\n  set sortBySites(val: string[]) {\n    RwPrefUtils.plannerSortBySites = val;\n  }\n\n  get sortDescSites(): boolean[] {\n    return RwPrefUtils.plannerSortDescSites;\n  }\n\n  set sortDescSites(val: boolean[]) {\n    RwPrefUtils.plannerSortDescSites = val;\n  }\n\n  get sortByTasks(): string[] {\n    return RwPrefUtils.plannerSortByTasks;\n  }\n\n  set sortByTasks(val: string[]) {\n    RwPrefUtils.plannerSortByTasks = val;\n  }\n\n  get sortDescTasks(): boolean[] {\n    return RwPrefUtils.plannerSortDescTasks;\n  }\n\n  set sortDescTasks(val: boolean[]) {\n    RwPrefUtils.plannerSortDescTasks = val;\n  }\n\n  get backColor() {\n    return this.globals.isDarkMode ? \"rwBackDark\" : \"rwBackLight\";\n  }\n\n  get showSteps(): boolean {\n    return !this.isMultiMode;\n  }\n\n  get tasks(): RwPin[] {\n    //return this.space.taskPins;\n    return this.space.taskPinsFiltered;\n  }\n\n  @Prop() forceDropUpdate: boolean;\n\n  @Watch(\"forceDropUpdate\")\n  watchForceDropUpdate(item) {\n    this.selectedPins = [this.stopPins.find(sp => sp.id !== item.id)];\n    setTimeout(() => this.selectedPins = [item], 500);\n  }\n\n  get stopPins(): RwPin[] {\n    //let stopPins = this.space.stopPins;\n    let stopPins = this.space.stopPinsFiltered;\n    return stopPins;\n  }\n\n  get sitePins(): RwPin[] {\n    //let sitePins = this.space.sitePins;\n    let sitePins = this.space.sitePinsFiltered;\n    return sitePins;\n  }\n\n  get stops(): RwStop[] {\n    return this.space.activeRoute && this.space.activeRoute.stops ? this.space.activeRoute.stops : [];\n  }\n\n  get isDarkMode(): boolean {\n    return this.globals.isDarkMode;\n  }\n\n  get isMultiMode(): boolean {\n    return this.space.multiMode != RwMultiMode.none;\n  }\n\n  get showTasks(): boolean {\n    let canShow = this.space.showDataLayerTasks && (this.globals.isDisp && (!this.isMultiMode || this.space.multiMode == RwMultiMode.tasks));\n    return canShow;\n  }\n\n\n  get showStops(): boolean {\n    let canShowStops = this.space.showDataLayerRoute && (!this.isMultiMode || this.space.multiMode == RwMultiMode.stops);\n    return canShowStops;\n  }\n\n  get showSites(): boolean {\n    return this.space.showDataLayerSites && (!this.isMultiMode || this.space.multiMode == RwMultiMode.sites);\n  }\n\n  get siteColor(): string {\n    return RwPrefUtils.siteColor;\n  }\n\n  updatePin(pin: RwPin) {\n    const self = this;\n    const SOURCE = \"RwPlannerList.updatePin\"\n    //console.log(\"updatePin:\", pin.title);\n\n    if (pin) {\n      let isClusterChild = !!pin.clusterParent\n      if (!isClusterChild) {\n        let marker = pin.marker;\n        if (marker) {\n          self.updateMarker(pin, marker);\n        }\n      } else {\n        //NOTE: Cluster Children do not have markers\n        let cluster = pin.clusterParent;\n        if (cluster.marker) {\n          cluster.invalidatePinImage();\n          self.updateMarker(cluster, cluster.marker);\n        }\n\n        pin.invalidatePinImage();\n        pin.lastHash = Date.now();\n        //console.log(SOURCE, pin.title, pin.urlHash, pin.imgArgs);\n\n      }\n\n    } else {\n      RwLog.consoleError(\"WTF: No Map || No Pin - List\");\n    }\n  }\n\n\n  updateMarker(pin: RwPin, marker: RwMarker) {\n    const self = this;\n    const SOURCE = 'RwPlannerList.updateMarker';\n    //console.log(\"updateMarker:\", pin.title);\n\n    if (pin && marker) {\n      pin.invalidatePinImage();\n      pin.lastHash = Date.now();\n\n      let url = thePlanSpace.globals.idxURL[pin.urlHash];\n      if (url && url.length > 0) {\n        self.setMapMarker(pin, marker, url);\n      } else {\n        pin\n            .dataUrlAsync()\n            .then(dataUrl => {\n              self.setMapMarker(pin, marker, dataUrl);\n            });\n      }\n    } else {\n      RwLog.consoleError(SOURCE, \"WTF: updateMarker: no marker\");\n    }\n  }\n\n  private setMapMarker(pin: RwPin, marker: RwMarker, dataUrl: string) {\n    const SOURCE = 'RwPlannerMap.setMapMarker';\n    //console.log(SOURCE, pin.title);\n    const self = this;\n    let zIndex = pin.zIndex;\n    let iconSize = self.globals.getIconSize(pin.type);\n    let anchor = self.globals.getAnchorPoint(pin.type);\n    let iconOpts = {} as H.map.Icon.Options;\n    if (anchor) iconOpts.anchor = anchor;\n    if (iconSize) iconOpts.size = iconSize;\n    let icon = new H.map.Icon(dataUrl, iconOpts);\n    marker.setZIndex(zIndex); //Note: setZIndex must be called prior to setIcon\n    marker.setIcon(icon);\n    marker.invalidate(0);\n    //console.warn(SOURCE, \"POST marker.invalidate\", pin.title, pin.baseColor);\n  }\n\n\n  //#endregion\n\n\n  //region Virtualization POC\n\n  start = 0;\n  timeout = null;\n  rowHeight = 48;\n  perPage = 50;\n\n  onScrollSites(e) {\n    // debounce if scrolling fast\n    this.timeout && clearTimeout(this.timeout);\n\n    this.timeout = setTimeout(() => {\n      const {scrollTop} = e.target;\n      const rows = Math.ceil(scrollTop / this.rowHeight);\n\n      this.start = rows + this.perPage > this.sitePins.length ?\n          this.sitePins.length - this.perPage : rows;\n\n      this.$nextTick(() => {\n        e.target.scrollTop = scrollTop;\n      });\n    }, 20);\n  }\n\n  /* scrollableTasks = [];\n   _tasks = [];\n   @Watch(\"idxTab\")\n   watchIdxTab(val) {\n     if(val === 3){\n       const met = () => {\n         if(RwPrefUtils.sortByTasks === [\"baseOrder\"]){\n           this._tasks = this.tasks;\n         }else {\n           const key = RwPrefUtils.sortByTasks[0];\n           this._tasks = this.tasks.sort((a, b) => RwPrefUtils.sortDescTasks ? (a[key] < b[key]) ? 1 : -1 : (a[key] > b[key]) ? 1 : -1 );\n         }\n         this.scrollableTasks = this._tasks;\n         console.log(this.scrollableTasks);\n       }\n       const timeout = () => setTimeout(() => !(this.tasks.length) ? timeout() : met(),20);\n       timeout();\n     }\n\n\n   }*/\n\n  onScrollTasks(e) {\n    // debounce if scrolling fast\n    this.timeout && clearTimeout(this.timeout);\n\n    this.timeout = setTimeout(() => {\n      const {scrollTop} = e.target;\n      const rows = Math.ceil(scrollTop / this.rowHeight);\n\n      this.start = rows + this.perPage > this.tasks.length ?\n          this.tasks.length - this.perPage : rows;\n\n      this.$nextTick(() => {\n        e.target.scrollTop = scrollTop;\n      });\n    }, 20);\n  }\n\n  //endregion Virtualization POC\n\n\n  //#region Watchers\n\n\n  @Watch(\"space.multiMode\")\n  watchSelectMode(mode: RwMultiMode) {\n    //console.warn(`RwPlannerList.watchSelectMode mode:`, mode, this.idxTab);\n    switch (mode) {\n        //@formatter:off\n      case RwMultiMode.stops:\n        this.idxTab = 1;\n        break;\n      case RwMultiMode.sites:\n        this.idxTab = 2;\n        break;\n      case RwMultiMode.tasks:\n        this.idxTab = 3;\n        break;\n      default:\n        this.idxTab = 0;\n        break;\n        //@formatter:on\n    }\n\n    //console.log(`RwPlannerList.watchSelectMode mode:`, mode, this.idxTab);\n  }\n\n  @Watch(\"space.showDropSelect\")\n  watchDropStopSelect(val) {\n    if (!val) this.updatePin(this.selectedPin);\n  }\n\n  @Watch(\"space.showDropRemove\")\n  watchDropStopRemove(val) {\n    if (!val) this.updatePin(this.selectedPin);\n  }\n\n  @Watch(\"space.showDataLayerRoute\")\n  watchShowDataLayerRoute(val: boolean) {\n    if (!val && this.idxTab === 1) {\n      this.idxTab = 0;\n    }\n  }\n\n\n  @Watch(\"space.showDataLayerSites\")\n  watchShowLayerSites(val: boolean) {\n    if (!val && this.idxTab === 2) {\n      this.idxTab = 0;\n    }\n  }\n\n\n  @Watch(\"space.showDataLayerTasks\")\n  watchShowDataLayerTasks(val: boolean) {\n    if (!val && this.idxTab === 3) {\n      this.idxTab = 0;\n    }\n  }\n\n  //#endregion\n\n\n  //#region Data Ops\n\n  getSiteColor(siteId: string) {\n    if (siteId) {\n      const site = theGlobals.sites.find(s => s.siteId === siteId);\n      if (site) {\n        return site.baseColor;\n      }\n    }\n    return this.siteColor;\n  }\n\n  pinClickedUrl(pin: RwPin) {\n    let url = ''\n    if (pin) {\n      url = pin.dataUrl ? pin.dataUrl : ''\n    }\n    return url;\n  }\n\n  onEditStopClick(pin: RwPin) {\n    const self = this;\n    if (pin && pin.stop) {\n      let stop = pin.stop;\n      if (this.selectedPin != pin) {\n        this.space.setPinSelection(pin, true, false);\n      }\n\n      self\n          .globals.showStopEdit(stop)\n          .then(isCommit => {\n            if (isCommit) {\n              self.globals.showSnack(\"Stop Edited\", \"success\");\n            }\n            //console.log(\"RwPlannerList.onEditStopClick\", \"showStopEdit callback\", updated.name);\n          })\n          .catch(err => {\n            self.globals.showSnack(\"Stop Edit FAILED\", \"error\");\n            //console.log(\"RwPlannerList.onEditStopClick\", \"Unhandled Error: \", err.toString());\n          })\n\n    }\n  }\n\n\n  onDeleteStopClick(pin: RwPin) {\n    const SOURCE = \"RwPlannerList.onDeleteStopClick\";\n    let isStop = pin && pin.stop;\n    if (isStop) {\n      this.space.deleteStopPin(pin, [SOURCE])\n          .then((deleted) => {\n            if (deleted) {\n              let isRouted = pin.stop && pin.stop.isRouted;\n              if (isRouted) {\n                this.space.activeRoute.path = \"\";\n                this.globals.updateRouteDB(this.space.activeRoute, false)\n                    .then(updated => {\n                      if (updated) {\n                        RwEventBus.$emit(\"onRouteRefresh\");\n                      } else {\n                        RwLog.warn(SOURCE, `Unable to clear route path after stop del ${pin.stop.stopId}`);\n                      }\n                    })\n                    .catch(err => {\n                      RwLog.error(SOURCE, `Unable to clear route path after stop del ${pin.stop.stopId},\\n\\n err:${JSON.stringify(err)}`);\n                    });\n              }\n            }\n          });\n    }\n  }\n\n\n  onEditSiteClick(pin: RwPin) {\n    if (pin && pin.site) {\n      this.globals.showSiteEdit(pin.site);\n      //this.space.editSitePin(pin);\n    }\n  }\n\n\n  onDeleteSiteClick(pin: RwPin) {\n    //console.log(\"onDeleteSiteClick\");\n    let isSite = pin && pin.site;\n    if (isSite) {\n      this.space.onSiteDelete(pin);\n    }\n  }\n\n\n  //#endregion\n\n\n  //#region List Ops\n\n  onEditTaskClick(pin: RwPin) {\n    const self = this;\n    if (pin && pin.task) {\n      let stop = pin.task;\n      if (this.selectedPin != pin) {\n        this.space.setPinSelection(pin, true, false);\n      }\n      //this.space.showStopEdit = true;\n\n      self\n          .globals.showStopEdit(stop)\n          .then(isCommit => {\n            if (isCommit) {\n              self.globals.commitTasks();\n              self.globals.showSnack(\"Task Edited\", \"success\");\n            }\n            //console.log(\"RwPlannerList.onEditStopClick\", \"showStopEdit callback\", updated.name);\n          })\n          .catch(err => {\n            self.globals.showSnack(\"Task Edit FAILED\", \"error\");\n            //console.log(\"RwPlannerList.onEditStopClick\", \"Unhandled Error: \", err.toString());\n          })\n    }\n  }\n\n\n  onTaskDelete(pin: RwPin) {\n    const SOURCE = \"RwPlannerList.onTaskDelete\";\n    let isTask = pin && pin.task;\n    if (isTask) {\n      const self = this;\n      this.space.onTaskDelete(pin)\n          .then(() => {\n            //console.log(\"delete success\");\n          })\n          .catch(ex => {\n            RwLog.error(SOURCE, \"WTF: delete failed\");\n          });\n    }\n  }\n\n\n  stepTextColor(step: RwStep) {\n    let textColor = 'white--text';\n    if (step.isSelected) {\n      textColor = 'black--text'\n    } else {\n      let isDark = RwImgUtils.isDark(this.stepColor(step));\n      if (isDark) {\n        textColor = 'white--text'\n      } else {\n        textColor = 'black--text'\n      }\n\n    }\n    //return !step.isSelected || theGlobals.isDarkMode ? 'white--text' : 'black--text'\n    return textColor;\n  }\n\n\n  genSteps(stops: RwStop[], selectId?: string): RwStep[] {\n    const self = this;\n\n    //console.warn(\"genSteps selectId\", selectId);\n\n    let steps: RwStep[] = [];\n    if (this.activeRoute) {\n      //let pins = this.stopPins;\n      this.stepsCount = this.stopPins.length;\n      let activeStops = this.stops.filter(s => s.seq > 0 && s.seq <= 240 && s.isActive);\n      activeStops.sort((a, b) => a.seq < b.seq ? -1 : a.seq > b.seq ? 1 : 0);\n\n      let pin = this.space.startPin;\n      //steps.push(RwStep.startStep(pin, this.activeRoute));\n      steps.push(self.startStep(pin, this.activeRoute));\n      activeStops.forEach(s => {\n        if (s.isActive) {\n          steps.push(self.travelStep(s));\n          steps.push(self.stopStep(s));\n        }\n      });\n\n      if (this.activeRoute.isRoundTrip) {\n        let lastStep = self.lastTravelStep(this.activeRoute);\n        if (lastStep) {\n          steps.push(lastStep);\n        }\n      }\n      steps.push(self.finishStep(this.activeRoute));\n\n\n      // let offStops = stops.filter(s => s.seq <= 0 || s.seq > 240 || !s.isActive);\n      let offStops = stops.filter(s => s.isRouted === false);\n\n      offStops.sort((a, b) => {\n        if (a.isComplete === b.isComplete) {\n          if (a.isComplete) {\n            return a.checkDate < b.checkDate ? -1 : 0;\n          } else {\n            return a.seq < b.seq ? -1 : a.seq > b.seq ? 1 : 0;\n          }\n        } else {\n          return (!a.isComplete) ? -1 : 1;\n        }\n      });\n\n\n      offStops.forEach(s => {\n        let offStep = self.offRouteStep(s);\n        steps.push(offStep);\n      });\n\n    }\n    return steps;\n  }\n\n\n  onTimeLine() {\n    //console.log(\"onTimeLine\");\n  }\n\n\n  onStepIcon(step: RwStep) {\n    //console.log(\"onStepIcon\");\n    this.onTimeItemClicked(step);\n  }\n\n\n  onStepBody(step: RwStep) {\n    //console.log(\"onStepBody\");\n    this.onTimeItemClicked(step);\n  }\n\n  private onTimeItemClicked(step: RwStep) {\n    let pin: RwPin;\n    if (step.stop) {\n      let stopId = step.stop.stopId;\n      pin = this.space.stopPins.find(p => p.eid === stopId);\n    } else if (step.route) {\n      pin = this.space.startPin.eid === step.route.routeId ? this.space.startPin : null;\n    }\n\n    if (pin) {\n      this.togglePinSelect(pin);\n    }\n  }\n\n\n  onStopPinClick(pin: RwPin, evt) {\n    //console.log(\"onStopPinClick\", pin, evt)\n    if (!this.space.isMultiMode) {\n      this.togglePinSelect(pin);\n    }\n  }\n\n  canStopShowMore(pin: RwPin): boolean {\n    let canShow = false;\n    if (pin && pin.stop) {\n      let stop = pin.stop;\n      if (!stop.isComplete) {\n        canShow = true;\n      }\n    }\n    return canShow;\n  }\n\n  onSitePinClick(pin: RwPin) {\n    if (!this.space.isMultiMode) {\n      this.togglePinSelect(pin);\n    }\n  }\n\n\n  onTaskPinClick(pin: RwPin) {\n    if (!this.space.isMultiMode) {\n      this.togglePinSelect(pin);\n    }\n  }\n\n\n  togglePinSelect(pin: RwPin) {\n    if (pin) {\n      //console.warn(\"RwPlannerList.togglePinSelect isSelected\", pin.title);\n      let isSelected = this.space.isSelected(pin);\n      if (isSelected) {\n        // pin.isSelected = false;\n        // this.space.deselectPin(pin);\n\n        let isDoubleClick = this.isDoubleClick(pin);\n        if (isDoubleClick) {\n          this.space.forceShowDataView();\n        }\n\n      } else {\n        //console.log(\"RwPlannerList.togglePinSelect\");\n        this.space.setPinSelection(pin, true, true);\n      }\n    }\n  }\n\n\n  isDoubleClick(pin: RwPin): boolean {\n    let isDoubleClick = false;\n\n    if (pin && pin === this.lastPinClicked) {\n      let timePassed = 0;\n      if (this.lastPinClickTime) {\n        timePassed = moment().diff(this.lastPinClickTime);\n        if (timePassed < 500) {\n          isDoubleClick = true;\n        }\n        // let elapsed = RwTextUtils.round4(timePassed);\n        // console.log(\"elapsed time: \", elapsed, this.timeOfLastPinClick);\n      }\n    }\n    this.lastPinClicked = pin;\n    this.lastPinClickTime = moment();\n\n    return isDoubleClick;\n  }\n\n\n  //#endregion\n\n\n  //#region Step Ops\n\n  stepPin(step: RwStep): RwPin {\n    let pin: RwPin;\n    if (step.stop && step.stop.stopId) {\n      let stopId = step.stop.stopId;\n      pin = this.space.stopPins.find(p => p.eid === stopId);\n    }\n    return pin;\n  }\n\n\n  stepColor(step: RwStep) {\n    let stepColor = '';\n    if (step.custColor) {\n      stepColor = step.custColor;\n    } else {\n      switch (step.stepType) {\n          //@formatter:off\n        case RwStepTypes.start:\n          stepColor = '#6da848';\n          break;\n        case RwStepTypes.finish:\n          stepColor = '#F00';\n          break;\n        case RwStepTypes.stop:\n          stepColor = '#000';\n          break;\n        case RwStepTypes.travel:\n          stepColor = '#3a3a3a';\n          break;\n          //@formatter:on\n      }\n    }\n    return stepColor;\n  }\n\n\n  stepIsSelected(step: RwStep): boolean {\n    let isSelected = false;\n    let stop = step.stop;\n    let pin = this.stepPin(step);\n    if (stop && pin) {\n      let selPin = this.selectedPin;\n      if (selPin && selPin.stop) {\n        isSelected = selPin.stop.stopId === stop.stopId;\n      }\n    }\n    //console.warn(\"isSelected\", isSel);\n    return isSelected;\n  }\n\n\n  stepSeqText(step: RwStep) {\n    let seqText = '';\n    if (step.stepType == RwStepTypes.stop) {\n      if (step.seq >= 1 && step.seq <= 240) {\n        seqText = step.seq.toString();\n      }\n    }\n    return seqText;\n  }\n\n\n  startStep(pin: RwPin, route: RwRoute): RwStep {\n    let step = new RwStep();\n    step.stepType = RwStepTypes.start;\n    step.seq = 0;\n    step.route = route;\n    step.text = \"START\";\n    if (route) {\n      step.time = route.startTimeString;\n    }\n    return step;\n  }\n\n\n  travelStep(stop: RwStop): RwStep {\n    let step = new RwStep();\n    step.stop = stop;\n    step.stepType = RwStepTypes.travel;\n    step.seq = stop.seq - 0.5;\n    step.text = \"travel to: \" + stop.address;\n    if (stop && stop.timeOfArr) {\n      step.time = stop.travelText;\n    }\n    return step;\n  }\n\n\n  stopStep(stop: RwStop): RwStep {\n    let step = new RwStep();\n    step.stop = stop;\n    step.stepType = RwStepTypes.stop;\n    step.seq = stop.seq;\n    step.text = stop.name;\n\n    step.isSelected = this.stepIsSelected(step);\n\n    if (stop.timeOfArr) {\n      step.time = stop.timeText;\n    }\n\n    if (step.isSelected) {\n      step.custColor = \"#FFFFFF\";\n    } else {\n      if (stop.isActive) {\n        if (stop.baseColor) {\n          step.custColor = stop.baseColor;\n        }\n      } else {\n        step.custColor = \"#595a5b\";\n      }\n    }\n    return step;\n  }\n\n\n  lastTravelStep(route: RwRoute): RwStep {\n    let step: RwStep;\n    if (route.isRoundTrip) {\n      step = new RwStep();\n      step.stepType = RwStepTypes.travel;\n      step.text = \"return to start\"\n      if (route.stops && route.stops.length > 0) {\n        step.time = route.travelReturnText;\n      }\n      step.seq = route.stops.length + 0.5;\n\n    }\n    return step;\n  }\n\n\n  finishStep(route: RwRoute): RwStep {\n    let step = new RwStep();\n    step.stepType = RwStepTypes.finish;\n    step.text = \"FINISH\";\n    if (route && route.stops) {\n      step.time = route.finishTimeString;\n      step.seq = route.stops.length + 1;\n    }\n    return step;\n  }\n\n\n  offRouteStep(stop: RwStop): RwStep {\n    let step = new RwStep();\n    step.stop = stop;\n    step.stepType = RwStepTypes.offRoute;\n    step.text = stop.name;\n    if (stop) {\n\n      step.isSelected = this.stepIsSelected(step);\n      if (stop.isComplete) {\n        step.time = RwDateUtils.formatDate(stop.checkDate);\n      } else {\n        step.time = \"not optimized\";\n      }\n\n      if (step.isSelected) {\n        step.custColor = \"#FFFFFF\";\n      } else {\n        if (stop.isComplete) {\n          step.custColor = \"#595a5b\";\n        } else {\n          if (stop.baseColor) {\n            step.custColor = stop.baseColor;\n          }\n        }\n      }\n\n    }\n    return step;\n  }\n\n  onPinView(item) {\n    if (this.space.selectedPin != item) {\n      this.space.setPinSelection(item, true, false);\n    }\n    this.space.forceShowDataView();\n  }\n\n  onStopRelocate(pin) {\n    const SOURCE = \"RwPlannerList.onStopRelocate\";\n    let stop = pin.stop as RwStop;\n    if (stop) {\n      //RwLog.log(SOURCE, `Starting stop relocate for stop: ${stop.stopId} @ ${stop.lat},${stop.lng}, \\n\\njson: ${JSON.stringify(stop)}`)\n      this.globals\n          .showReloPicker(stop.name, stop.lat, stop.lng)\n          .then(coord => {\n            //RwLog.log(SOURCE, `Stop relocate, back from relopicker, for stop: ${stop.stopId} @ ${stop.lat},${stop.lng} \\n\\n coord: ${JSON.stringify(coord)}`);\n            if (coord) {\n              let priLat = stop.lat;\n              let priLng = stop.lng;\n\n              stop.lat = coord.lat;\n              stop.lng = coord.lng;\n\n              //RwLog.log(SOURCE, `Stop relocate, before updatestopdb, for stop: ${stop.stopId} @ ${stop.lat},${stop.lng} \\n\\n stop: ${JSON.stringify(stop)}}`)\n              this.globals\n                  .updateStopDB(stop)\n                  .then(isCommit => {\n                    if (isCommit) {\n                      stop.lastHash = Date.now();\n                      //pin.lat = coord.lat;\n                      //pin.lng = coord.lng;\n                      let stopPin = this.stopPins.find(p => p.stop && p.stop.stopId === stop.stopId);\n                      if (stopPin) {\n                        stopPin.lat = coord.lat;\n                        stopPin.lng = coord.lng;\n                      }\n                      let stopToUpdate = this.space.activeRoute.findStop(stop.stopId);\n                      if (stopToUpdate) {\n                        stopToUpdate.lat = coord.lat;\n                        stopToUpdate.lng = coord.lng;\n                      }\n                      RwEventBus.$emit(RwEvents.StopUpdate, stopToUpdate.stopId);\n                      //this.space.changePin = pin;\n                      if (stop.isRouted) {\n                        this.space.activeRoute.path = \"\";\n                        theGlobals.updateRouteDB(this.space.activeRoute, false)\n                            .then((updated) => {\n                              if (updated) {\n                                RwEventBus.$emit(RwEvents.RouteRefresh);\n                              } else {\n                                RwLog.warn(SOURCE, `Unable to clear route path after relocating stop, ${stop.stopId}, rt: ${stop.routeId}\\n\\n`);\n                              }\n                            })\n                            .catch(err => {\n                              RwLog.error(SOURCE, `Error clearing route path after relocating stop, ${stop.stopId}, rt: ${stop.routeId}\\n\\n\n                          err:${JSON.stringify(err)}`);\n                            });\n                      } else {\n                        RwEventBus.$emit(RwEvents.RouteRefresh);\n                      }\n                    } else {\n                      //rollback update\n                      stop.lat = priLat;\n                      stop.lng = priLng;\n                    }\n                  })\n                  .catch(err => {\n                    //rollback update\n                    RwLog.warn(SOURCE, `Stop relocate, in catch, rolling back update, for stop: ${stop.stopId} @ ${stop.lat},${stop.lng} \\n\\n err: ${JSON.stringify(err)}}`)\n                    stop.lat = priLat;\n                    stop.lng = priLng;\n                  });\n\n            } else {\n              RwLog.warn(SOURCE, `Stop relocate, back from relopicker, for stop: ${stop.stopId} @ ${stop.lat},${stop.lng} \\n\\n coord is null`)\n            }\n          });\n    }\n  }\n\n  onStopMoveCopy(pin) {\n    let pins = [pin];\n    if (pins && pins.length > 0) {\n      let route = this.activeRoute;\n      let stops = pins.map(p => p.stop);\n      this.space.selectedPins = pins;\n      this.globals.multiCopy(route, stops);\n    }\n  }\n\n  onSiteRelocate(pin) {\n    const self = this;\n    const SOURCE = \"RwPlannerList.onSiteRelocate\";\n    let site = pin.site;\n    if (site) {\n      //console.log(SOURCE, \"lat, lng\", site.lat, site.lng);\n\n      self.globals\n          .showReloPicker(site.name, site.lat, site.lng)\n          .then(coord => {\n            if (coord) {\n              let priLat = site.lat;\n              let priLng = site.lng;\n\n              site.lat = coord.lat;\n              site.lng = coord.lng;\n\n              self.globals\n                  .updateSiteDB(site, [SOURCE])\n                  .then(isCommit => {\n                    if (isCommit) {\n                      site.lastHash = Date.now();\n                      pin.lat = coord.lat;\n                      pin.lng = coord.lng;\n                      this.space.changePin = pin;\n                    } else {\n                      //rollback update\n                      site.lat = priLat;\n                      site.lng = priLng;\n                      self.globals.showSnack(\"Favorite relocation failed.\", \"error\");\n                    }\n                  })\n                  .catch(err => {\n                    //rollback update\n                    site.lat = priLat;\n                    site.lng = priLng;\n                    RwLog.consoleError(SOURCE, \"Update error\", err.toString());\n                    self.globals.showSnack(\"Favorite relocation failed.\", \"error\");\n                  });\n\n            }\n          });\n    }\n  }\n\n  onTaskRelocate(pin) {\n    const self = this;\n    const SOURCE = \"RwPlannerMap.onTaskRelocate\";\n\n    let task = pin.task;\n    if (task) {\n\n      self.globals\n          .showReloPicker(task.name, task.lat, task.lng)\n          .then(coord => {\n            if (coord) {\n              let priLat = task.lat;\n              let priLng = task.lng;\n\n              task.lat = coord.lat;\n              task.lng = coord.lng;\n\n              self.globals\n                  .updateStopDB(task)\n                  .then(isCommit => {\n                    if (isCommit) {\n                      task.lastHash = Date.now();\n                      pin.lat = coord.lat;\n                      pin.lng = coord.lng;\n                      this.space.changePin = pin;\n                    } else {\n                      //rollback update\n                      task.lat = priLat;\n                      task.lng = priLng;\n                      self.globals.showSnack(\"Task relocation failed.\", \"error\");\n                    }\n                  })\n                  .catch(err => {\n                    //rollback update\n                    task.lat = priLat;\n                    task.lng = priLng;\n                    self.globals.showSnack(\"Task relocation failed.\", \"error\");\n                    RwLog.consoleError(SOURCE, \"Update error\", err.toString());\n                  });\n\n            }\n          });\n    }\n\n\n  }\n\n  //#endregion Step Ops\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerList.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerList.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerList.vue?vue&type=style&index=0&id=7cc9df21&prod&scoped=true&lang=scss&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerList.vue?vue&type=style&index=1&id=7cc9df21&prod&lang=scss&\"","import { render, staticRenderFns } from \"./RwPlannerList.vue?vue&type=template&id=7cc9df21&scoped=true&\"\nimport script from \"./RwPlannerList.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPlannerList.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwPlannerList.vue?vue&type=style&index=0&id=7cc9df21&prod&scoped=true&lang=scss&\"\nimport style1 from \"./RwPlannerList.vue?vue&type=style&index=1&id=7cc9df21&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7cc9df21\",\n  null\n  \n)\n\nexport default component.exports","import { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VLazy } from 'vuetify/lib/components/VLazy';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VDataTable,{staticClass:\"elevation-1 rw-inset darkMode ml-0\",class:_vm.globals.theme,staticStyle:{\"margin-left\":\"0\",\"padding-left\":\"0\"},style:(_vm.calcTableStyle),attrs:{\"items\":_vm.openRoutes,\"headers\":_vm.m_headers,\"items-per-page\":100,\"sort-by\":_vm.sortBy,\"sort-desc\":_vm.sortDesc,\"item-key\":\"routeId\",\"hide-default-footer\":\"\"},on:{\"update:sortBy\":function($event){_vm.sortBy=$event},\"update:sort-by\":function($event){_vm.sortBy=$event},\"update:sortDesc\":function($event){_vm.sortDesc=$event},\"update:sort-desc\":function($event){_vm.sortDesc=$event},\"click:row\":_vm.onRowClick},scopedSlots:_vm._u([{key:\"item.isSelected\",fn:function({ item }){return [(_vm.isSelected(item))?_c('div',{staticStyle:{\"background-color\":\"#E2004F\",\"height\":\"100%\",\"width\":\"4px\",\"margin-left\":\"-16px\",\"padding-top\":\"2px\",\"padding-bottom\":\"2px\"}}):_vm._e()]}},{key:\"item.name\",fn:function({ item }){return [_c('div',{staticClass:\"rw-cell\"},[_c('div',{staticClass:\"rw-cell-overflow\"},[_vm._v(\" \"+_vm._s(item.name)+\" \")])])]}},{key:\"item.assignment\",fn:function({ item }){return [_c(VLazy,[_c(VRow,{attrs:{\"align\":\"center\"}},[_c(VAvatar,{attrs:{\"size\":\"32\",\"icon\":\"\"}},[_c(VImg,{attrs:{\"src\":_vm.driverUrl(item),\"alt\":\"driverImage\"}})],1),_c(VCol,[_c('div',{staticClass:\"rw-cell\"},[_c('div',{staticClass:\"rw-cell-overflow\"},[_c('span',{staticClass:\"ml-0\",staticStyle:{\"font-size\":\"small\"}},[_vm._v(\" \"+_vm._s(_vm.driverName(item))+\" \")]),(item.assignCode !== 0)?_c('span',{class:item.getAssignTextStyle()},[_vm._v(\" \"+_vm._s(item.assignTextInline)+\" \")]):_vm._e()])])])],1)],1)]}},{key:\"item.statusCode\",fn:function({ item }){return [_c('span',{class:item.getStatusTextStyle()},[_vm._v(\" \"+_vm._s(item.routeStatusText)+\" \")])]}},{key:\"item.progress\",fn:function({ item }){return [_c(VTooltip,{attrs:{\"top\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VProgressLinear,_vm._g({attrs:{\"color\":item.getProgressColor(),\"height\":\"10\",\"value\":item.progress,\"striped\":\"\"}},on))]}}],null,true)},[_c('span',{staticStyle:{\"font-size\":\"small\",\"margin-left\":\"4px\"}},[_vm._v(\" \"+_vm._s(item.getProgressText())+\" \")])])]}},{key:\"item.action\",fn:function({ item }){return [_c(VMenu,{scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();}}},on),[_c(VIcon,[_vm._v(\"mdi-dots-vertical\")])],1)]}}],null,true)},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_vm._v(\"Route Actions\")]),_c(VDivider),_c(VListItem,{on:{\"click\":function($event){return _vm.space.onRouteView(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"View Route\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.space.onRouteEdit(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit Route\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.onRouteCopy(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-content-copy\")])],1),_c(VListItemTitle,[_vm._v(\"Copy Route\")])],1),_c(VListItem,{on:{\"click\":function($event){return _vm.globals.confirmAndArchiveRoute(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-archive\")])],1),_c(VListItemTitle,[_vm._v(\"Archive Route\")])],1),_c(VDivider),(_vm.globals.isDisp)?_c(VListItem,{on:{\"click\":function($event){return _vm.globals.assignRoute(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-account\")])],1),_c(VListItemTitle,[_vm._v(\"Assignment\")])],1):_vm._e(),_c(VListItem,{on:{\"click\":function($event){return _vm.globals.onRouteStatus(item)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Change Status\")])],1)],1)],1)]}}]),model:{value:(_vm.selectedRoutes),callback:function ($$v) {_vm.selectedRoutes=$$v},expression:\"selectedRoutes\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views//planner/RwPlannerSpace\";\nimport {RwRoute} from \"@/app/dem/RwRoute\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\n\n@Component\nexport default class RwPlannerStatus extends Vue {\n\n  //#region Props\n\n  counter = 0;\n  showStatusMenu = false;\n  showAssignMenu = false;\n  clickRoute: RwRoute = null;\n\n  get globals(): RwGlobals {\n    return this.space.globals;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get isDispatcher(): boolean {\n    if (this.globals.isTeam && this.globals.isDisp) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  get m_headers() {\n    return this.headers.filter(x => x.show)\n  }\n\n  get headers(): any[] {\n    return [\n      {value: \"isSelected\", align: 'left', sortable: false, width: 8, show: true},\n      {text: \"Route\", value: \"name\", align: \"left\", show: true},\n      {text: \"Assignment\", value: \"assignment\", align: \"left\", show: this.isDispatcher},\n      {text: \"Status\", value: \"statusCode\", align: \"center\", width: 128, show: true},\n      {text: \"Progress\", value: \"progress\", width: \"25%\", show: true},\n      //{text: \"\", value: \"action\", width: 64},\n\n    ];\n  }\n\n  get sortBy(): string {\n    return RwPrefUtils.routeStatusSortBy;\n  }\n\n  set sortBy(val: string) {\n    RwPrefUtils.routeStatusSortBy = val;\n  }\n\n  get sortDesc(): boolean {\n    return RwPrefUtils.routeStatusSortDesc;\n  }\n\n  set sortDesc(val: boolean) {\n    RwPrefUtils.routeStatusSortDesc = val;\n  }\n\n  get calcTableStyle() {\n    let heightStyle = '';\n    let height = this.space.timeHeight;\n    if (this.space.showPanelStatus && !this.space.showPanelMap && !this.space.showPanelList) {\n      heightStyle = \"width:100%;height:100%;overflow-y:auto;\";\n    } else {\n      heightStyle = height <= 240 ? `overflow-y:auto;width:100%;height: ${height}px` : `overflow-y:scroll;width:100%;height:100%`;\n    }\n    return heightStyle;\n  }\n\n  get openRoutes(): RwRoute[] {\n    return this.space.openRoutes;\n  }\n\n  get selectedRoutes(): RwRoute[] {\n    let routes: RwRoute[] = [];\n    if (this.space.activeRoute) {\n      routes = [this.space.activeRoute];\n    }\n    return routes;\n  }\n\n  set selectedRoutes(val: RwRoute[]) {\n    if (val && val.length > 0) {\n      //console.warn(\"selectedRoutes\", val[0]);\n      this.space.activeRoute = val[0];\n    }\n  }\n\n\n  //#endregion\n\n\n  //#region Helper APIs\n\n  driverUrl(route: RwRoute): string {\n    let driverUrl: string;\n    if (route && route.driver) {\n      driverUrl = route.driver.imageUrl;\n    }\n    return driverUrl;\n  }\n\n  driverName(route: RwRoute): string {\n    // let driverName = route.driver ? route.driver.userName : \"NO DRIVER\"\n    // console.log(\"RwRouteList.driverName\", route.name, driverName)\n    let driverUrl: string;\n    if (route && route.driver) {\n      driverUrl = route.driver.userName;\n    }\n    return driverUrl;\n  }\n\n  onRouteCopy(route: RwRoute) {\n    //console.log(\"onRouteCopy\");\n    const self = this;\n    this.globals\n        .showRouteNew(false, route)\n        .then(pick => {\n          if (pick) {\n            self.globals.plan.openRouteInPlanner(pick);\n            if (RwPrefUtils.editAfterAdd) {\n              self.globals.showRouteEdit(pick)\n            }\n\n          }\n        });\n\n    // this.globals\n    //   .showRouteEdit(route)\n    //   .then(isSaved => {\n    //     self.globals.plan.openRouteInPlanner(route);\n    //   });\n\n  }\n\n  onRowClick(route: RwRoute) {\n    //console.warn(\"RwPlannerStatus.clickRow\", route.name)\n    if (route && route != this.space.activeRoute) {\n      this.$router.push({path: route.plannerUrl}).catch();\n      this.space.activeRoute = route;\n    }\n  }\n\n\n  onButtonClick(route: RwRoute) {\n    //console.warn(\"RwPlannerStatus.clickRow\", route.name)\n    if (route) {\n      this.clickRoute = route;\n    }\n  }\n\n\n  isSelected(item: RwRoute): boolean {\n    let isSel = this.space.activeRoute && this.space.activeRoute == item;\n    return isSel;\n  }\n\n\n  //endregion\n\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerStatus.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerStatus.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerStatus.vue?vue&type=style&index=0&id=6cd2a630&prod&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./RwPlannerStatus.vue?vue&type=template&id=6cd2a630&scoped=true&\"\nimport script from \"./RwPlannerStatus.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPlannerStatus.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwPlannerStatus.vue?vue&type=style&index=0&id=6cd2a630&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6cd2a630\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticStyle:{\"height\":\"100%\",\"width\":\"100%\"}},[(_vm.showDriverView)?_c('RwDriverView',{attrs:{\"driver\":_vm.selectedPin.dataItem,\"is-popup\":false},on:{\"onCloseDock\":_vm.onCloseDock,\"onDeleted\":_vm.onDeleted,\"onPop\":_vm.onPop}}):_vm._e(),(_vm.showRouteView)?_c('RwRouteView',{attrs:{\"is-planner\":true,\"is-popup\":false,\"route\":_vm.selectedPin.dataItem},on:{\"onCloseDock\":_vm.onCloseDock,\"onDeleted\":_vm.onDeleted,\"onPop\":_vm.onPop}}):_vm._e(),(_vm.showSiteView)?_c('RwSiteView',{attrs:{\"is-popup\":false,\"site\":_vm.selectedPin.dataItem},on:{\"onCloseDock\":_vm.onCloseDock,\"onDeleted\":_vm.onDeleted,\"onPop\":_vm.onPop}}):_vm._e(),(_vm.showStopView)?_c('RwStopView',{attrs:{\"popup\":false,\"stop\":_vm.selectedPin.dataItem},on:{\"onCloseDock\":_vm.onCloseDock,\"onDeleted\":_vm.onDeleted,\"onPop\":_vm.onPop}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport {RwRoute} from \"@/app/dem/RwRoute\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlan, {RwPlannerSpace} from \"@/app/views//planner/RwPlannerSpace\";\nimport RwStopView from \"@/app/views/planner/RwStopView.vue\";\nimport {RwPinTypes} from \"@/app/RwEnums\";\nimport RwRouteView from \"@/app/views/routes/RwRouteView.vue\";\nimport RwSiteView from \"@/app/views/sites/RwSiteView.vue\";\nimport RwDriverView from \"@/app/views/drivers/RwDriverView.vue\";\nimport {RwPin} from \"@/app/dem/RwPin\";\n\n@Component({components: {RwStopView, RwRouteView, RwSiteView, RwDriverView}})\nexport default class RwPinPanel extends Vue {\n\n  ///region Props\n\n  get globals(): RwGlobals {\n    return theGlobals\n  };\n\n  get space(): RwPlannerSpace {\n    return thePlan\n  };\n\n  get activeRoute(): RwRoute {\n    return this.space.activeRoute;\n  }\n\n  get isDarkMode(): boolean {\n    return this.globals.isDarkMode;\n  }\n\n\n  get selectedPins(): RwPin[] {\n    //console.log(\"GET selectedPins\", theStore.getters.selectedPins.length);\n    return this.space.selectedPins;\n  }\n\n  get selectedPin(): RwPin {\n    let selPin: RwPin;\n    if (this.space.isMultiMode == false) {\n      let selPins = this.selectedPins;\n      if (selPins && selPins.length > 0) {\n        selPin = selPins[0];\n      }\n    }\n    //console.warn(\"RwPinPanel.selectedPin\");\n    return selPin;\n  }\n\n  get showStopView() {\n    let show = false;\n    let pin = this.selectedPin;\n    if (pin && (pin.type == RwPinTypes.Stop || pin.type == RwPinTypes.Task)) {\n      show = true;\n    }\n    //console.warn(\"showStopView\", show, pin);\n    return show;\n  }\n\n\n  get showDriverView() {\n    let show = false;\n    let pin = this.selectedPin;\n    if (pin && pin.type == RwPinTypes.Driver) {\n      show = true;\n    }\n    //console.log(\"showDriverView\", show);\n    return show;\n  }\n\n  get showRouteView() {\n    let show = false;\n    let pin = this.selectedPin;\n    if (pin && pin.type == RwPinTypes.Route) {\n      show = true;\n    }\n    //console.log(\"showRouteView\", show);\n    return show;\n  }\n\n  get showSiteView() {\n    let show = false;\n    let pin = this.selectedPin;\n    if (pin && pin.type == RwPinTypes.Site) {\n      show = true;\n    }\n    //console.log(\"showSiteView\", show);\n    return show;\n  }\n\n  //#endregion\n\n  onPop() {\n    this.globals.showPinPopup = true;\n    this.globals.showPinPanel = false;\n  }\n\n  onCloseDock() {\n    this.globals.showPinPopup = false;\n    this.globals.showPinPanel = false;\n  }\n\n  onDeleted() {\n    this.globals.showPinPopup = false;\n    this.space.clearPinSelections();\n  }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPinPanel.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPinPanel.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwPinPanel.vue?vue&type=template&id=f60b9142&\"\nimport script from \"./RwPinPanel.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPinPanel.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VRow } from 'vuetify/lib/components/VGrid';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"max-width\":\"600px\",\"content-class\":\"dialog-with-scroll\",\"overlay-opacity\":\"0.5\",\"overlay-color\":_vm.globals.isDarkMode ? '#000' : '#000'},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.escPress.apply(null, arguments)}},model:{value:(_vm.globals.showPinPopup),callback:function ($$v) {_vm.$set(_vm.globals, \"showPinPopup\", $$v)},expression:\"globals.showPinPopup\"}},[(_vm.showDriverView)?_c('RwDriverView',{attrs:{\"driver\":_vm.space.selectedPin.dataItem,\"is-popup\":true},on:{\"onDock\":_vm.onDock,\"onClosePop\":_vm.onClosePop,\"onDeleted\":_vm.onDeleted}}):_vm._e(),(_vm.showRouteView)?_c('RwRouteView',{attrs:{\"route\":_vm.space.selectedPin.dataItem,\"is-popup\":true,\"is-planner\":true},on:{\"onDock\":_vm.onDock,\"onClosePop\":_vm.onClosePop,\"onDeleted\":_vm.onDeleted}}):_vm._e(),(_vm.showSiteView)?_c('RwSiteView',{attrs:{\"site\":_vm.space.selectedPin.dataItem,\"is-popup\":true},on:{\"onDock\":_vm.onDock,\"onClosePop\":_vm.onClosePop,\"onDeleted\":_vm.onDeleted}}):_vm._e(),(_vm.showStopView)?_c('RwStopView',{attrs:{\"popup\":true,\"stop\":_vm.space.selectedPin.dataItem},on:{\"onClosePop\":_vm.onClosePop,\"onDeleted\":_vm.onDeleted,\"onDock\":_vm.onDock}}):_vm._e(),(_vm.showHistoryView)?_c('RwHistoryView',{attrs:{\"popup\":true,\"hist\":_vm.selectedHistoryItem},on:{\"onClosePop\":_vm.onClosePop,\"onDeleted\":_vm.onDeleted,\"onDock\":_vm.onDock}}):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VCard,{ref:\"cardHistView\",staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},attrs:{\"height\":\"100\"}},[_c(VToolbar,{attrs:{\"max-height\":\"48px\",\"dense\":\"\",\"color\":_vm.globals.backColorBar}},[(_vm.plan.previousPin)?_c(VBtn,{staticClass:\"pl-0 pr-0\",staticStyle:{\"min-width\":\"auto\"},attrs:{\"text\":\"\"},on:{\"click\":_vm.backToStop}},[_c(VIcon,[_vm._v(\"chevron_left\")])],1):_vm._e(),(_vm.stop)?_c(VImg,{attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.stop.dataUrl ? _vm.stop.dataUrl : '',\"max-width\":\"32\"}}):_vm._e(),_c(VToolbarTitle,{staticClass:\"ml-2\"},[_vm._v(\"View Check-In: \"+_vm._s(_vm.name))]),_c(VSpacer),(_vm.stop)?_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [(_vm.hist)?_c(VBtn,{attrs:{\"icon\":\"\"},on:{\"click\":_vm.onClickEdit}},[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1):_vm._e()]}}],null,false,4293292929)},[_c('span',{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Edit\")])]):_vm._e()],1),(_vm.hist)?_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme,staticStyle:{\"height\":\"calc(100% - 98px)\",\"width\":\"100%\",\"overflow-y\":\"auto\"}},[_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Name: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.hist.name)+\" \")])]),_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Check-In Time: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.hist.formattedStartTime)+\" \")])]),_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Address: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.hist.address)+\" \")])]),_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Display Color: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_c(VIcon,{attrs:{\"color\":_vm.color}},[_vm._v(\"mdi-map-marker\")])],1)]),(_vm.globals.showProofOfDelivery)?_c(VRow,{staticClass:\"px-3 flex-column text-left\",attrs:{\"no-gutters\":\"\"}},[(!!_vm.stop.addOns.itemToDeliver?.trim())?_c(VRow,{staticClass:\"mt-2\",attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Item: \")]),_c('div',{staticStyle:{\"font-size\":\"small\",\"font-weight\":\"bold\"}},[_vm._v(\" \"+_vm._s(_vm.stop.addOns.itemToDeliver.trim())+\" \")])]):_vm._e(),_c('div',{staticClass:\"mt-4 mb-2\"},[_vm._v(\" Proof of Delivery: \")]),_c('div',{staticStyle:{\"display\":\"flex\",\"column-gap\":\"10px\",\"flex-direction\":\"row\"}},[(_vm.stop && !_vm.stop.addOns.podPhoto && !_vm.stop.addOns.podBar && !_vm.stop.addOns.podSig)?_c('RwPODThumbnail',{attrs:{\"mode\":\"fulfill\",\"type\":\"none\",\"checked\":\"true\"}}):_vm._e(),(_vm.stop && _vm.stop.addOns.podPhoto)?_c('RwPODThumbnail',{attrs:{\"mode\":\"fulfill\",\"type\":\"photo\",\"media\":_vm.hist.getFirstPhoto(),\"quantity\":_vm.hist.getPhotos()?.length},on:{\"clicked\":function($event){return _vm.viewPOD(_vm.ConfirmationType.Photo)}}}):_vm._e(),(_vm.stop && _vm.stop.addOns.podBar)?_c('RwPODThumbnail',{attrs:{\"mode\":\"fulfill\",\"type\":\"barcode\",\"media\":_vm.hist.getMedia(_vm.ConfirmationType.Barcode)},on:{\"clicked\":function($event){return _vm.viewPOD(_vm.ConfirmationType.Barcode)}}}):_vm._e(),(_vm.stop && _vm.stop.addOns.podSig)?_c('RwPODThumbnail',{attrs:{\"mode\":\"fulfill\",\"type\":\"signature\",\"media\":_vm.hist.getMedia(_vm.ConfirmationType.Signature)},on:{\"clicked\":function($event){return _vm.viewPOD(_vm.ConfirmationType.Signature)}}}):_vm._e()],1),(_vm.viewingPOD)?_c('div',{staticClass:\"viewPODPopup\",class:_vm.globals.isDarkMode ? 'dark' : ''},[_c('button',{staticStyle:{\"font-size\":\"28px\",\"position\":\"absolute\",\"top\":\"15px\",\"right\":\"15px\"},on:{\"click\":function($event){return _vm.closeViewPOD()}}},[_c(VIcon,{style:({ color: _vm.globals.isDarkMode ? 'white' : 'black' })},[_vm._v(\"mdi-close\")])],1),(_vm.isViewingPhoto() && _vm.showNextPhotoButton())?_c('button',{staticStyle:{\"position\":\"absolute\",\"top\":\"50%\",\"right\":\"15px\",\"margin-top\":\"-15px\"},on:{\"click\":function($event){return _vm.showNextPhoto()}}},[_c(VIcon,{staticStyle:{\"font-size\":\"40px\"},style:({ color: _vm.globals.isDarkMode ? 'white' : 'black' })},[_vm._v(\"mdi-chevron-right\")])],1):_vm._e(),(_vm.isViewingPhoto() && _vm.currentPhotoIndex > 0)?_c('button',{staticStyle:{\"position\":\"absolute\",\"top\":\"50%\",\"left\":\"15px\",\"margin-top\":\"-15px\"},on:{\"click\":function($event){return _vm.showPreviousPhoto()}}},[_c(VIcon,{staticStyle:{\"font-size\":\"40px\"},style:({ color: _vm.globals.isDarkMode ? 'white' : 'black' })},[_vm._v(\"mdi-chevron-left\")])],1):_vm._e(),_c('div',[(!!_vm.getCurrentMedia())?_c('div',{staticStyle:{\"position\":\"relative\"},attrs:{\"id\":\"popup-image-wrapper\"}},[_c('img',{staticStyle:{\"max-width\":\"460px\",\"max-height\":\"60vh\"},style:({background: _vm.getCurrentMediaBackgroundColor(), borderRadius: _vm.getCurrentMediaBorderRadius(), padding: _vm.getCurrentMediaPadding(), opacity: _vm.popupImageOpacity}),attrs:{\"src\":_vm.getMediaLink()}})]):_vm._e()])]):_vm._e()],1):_vm._e(),(_vm.hist.note)?_c(VRow,{staticClass:\"px-3 mt-3 mb-4\",attrs:{\"no-gutters\":\"\"}},[(_vm.hist.note)?_c('div',{staticStyle:{\"display\":\"flex\",\"flex-direction\":\"row\",\"flex-basis\":\"100%\"}},[_c('div',{staticClass:\"text-left\",staticStyle:{\"flex-basis\":\"35%\"}},[_vm._v(\"Check-in comments:\")]),_c('div',{staticClass:\"text-right\",staticStyle:{\"flex-basis\":\"65%\",\"font-weight\":\"bold\"}},[_vm._v(_vm._s(_vm.hist.note))])]):_vm._e()]):_vm._e()],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Prop, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlan, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport {RwHistory} from \"@/app/dem/RwHistory\";\nimport RwPODThumbnail from \"@/app/views/components/RwPODThumbnail.vue\";\nimport {ConfirmationType} from \"@/app/dem/ProofOfDelivery/ProofOfDeliveryEnums\";\nimport { RwCoreMedia } from \"@/app/dem/ProofOfDelivery/RwCoreMedia\";\n\n@Component({\n  components: {RwPODThumbnail}\n})\nexport default class RwHistoryView extends Vue {\n  @Prop(Boolean) readonly popup: boolean;\n  @Prop(RwHistory) readonly hist: RwHistory;\n\n  isMounted = false;\n  finalLength: string = this.calcMaxWidth();\n  noteVisibility = false;\n\n  ConfirmationType = ConfirmationType;\n  viewingPOD = false;\n  currentPhotoIndex = 0;\n  viewingType: ConfirmationType;\n  popupImageOpacity = 0;\n\n  get stop() {\n    if (this.hist && this.hist.stopId) {\n      if (this.plan.selectedStop && this.plan.selectedStop.stopId === this.hist.stopId) {\n        return this.plan.selectedStop;\n      } else {\n        const stop = this.globals.stops.find(s => s.stopId === this.hist.stopId);\n        return stop ?? null;\n      }\n    }\n    return null;\n  }\n\n  get color() {\n    if (this.stop) {\n      return this.stop.baseColor;\n    }\n    return \"#ff5963\";\n\n  }\n\n  get name() {\n    return this.hist?.name ?? \"\";\n  }\n\n  get globals(): RwGlobals {\n    return theGlobals\n  }\n\n  get plan(): RwPlannerSpace {\n    return thePlan;\n  };\n\n  onClickEdit() {\n    if (this.hist) {\n      this.globals.showHistoryEdit(this.hist);\n      this.onClosePop();\n    }\n  }\n\n  onClosePop() {\n    this.$emit(\"onClosePop\");\n  }\n\n  closeViewPOD() {\n    this.viewingPOD = false;\n    this.currentPhotoIndex = 0;\n  }\n\n  isViewingPhoto(): boolean {\n    return this.viewingType === ConfirmationType.Photo;\n  }\n\n  showNextPhotoButton(): boolean {\n    return this.hist.getPhotos()?.length > 1 && this.currentPhotoIndex < this.hist.getPhotos()?.length - 1;\n  }\n\n  showNextPhoto(): void {\n    if (this.currentPhotoIndex < this.hist.getPhotos().length - 1) {\n      this.popupImageOpacity = 0;\n      setTimeout(() => {\n        this.currentPhotoIndex++;\n        setTimeout(() => {\n          this.popupImageOpacity = 1;\n        }, 200);\n      }, 200);\n    }\n  }\n\n  showPreviousPhoto(): void {\n    if (this.currentPhotoIndex > 0) {\n      this.popupImageOpacity = 0;\n      setTimeout(() => {\n        this.currentPhotoIndex--;\n        setTimeout(() => {\n          this.popupImageOpacity = 1;\n        }, 200);\n      }, 200);\n    }\n  }\n\n  getCurrentMedia(): RwCoreMedia {\n    if (this.viewingType === ConfirmationType.Photo) {\n      return this.hist.getPhoto(this.currentPhotoIndex);\n    }\n    return this.hist.getMedia(this.viewingType);\n  }\n\n  getMediaLink(): string {\n    return RwCoreMedia.getLink(this.getCurrentMedia());\n  }\n\n  getCurrentMediaBackgroundColor(): string {\n    if (this.getCurrentMedia().confType === ConfirmationType.Signature) {\n      return 'white';\n    }\n    return 'none';\n  }\n\n  getCurrentMediaBorderRadius(): string {\n    return '8px';\n  }\n\n  getCurrentMediaPadding(): string {\n    if (this.getCurrentMedia().confType === ConfirmationType.Signature) {\n      return '20px';\n    }\n    return 'none';\n  }\n\n  viewPOD(type: ConfirmationType) {\n    if (this.hist.getMedia(type)) {\n      this.viewingType = type;\n      this.viewingPOD = true;\n      \n      this.popupImageOpacity = 0;\n      setTimeout(() => {\n        this.popupImageOpacity = 1;\n      }, 200);\n    }\n  }\n\n  backToStop() {\n    this.plan.selectedPin = this.plan.previousPin;\n    this.globals.showHistoryPop = false;\n    this.globals.selectedHistoryItem = null;\n  }\n\n  get cardElement(): Element {\n    let el: Element;\n    let card = this.$refs.cardHistView as any;\n    if (card && card.$el && card.$el) {\n      el = card.$el;\n    }\n    return el;\n  }\n\n  showTooltip(text: string) {\n    return text.length > 72 || text.indexOf(\"\\n\") !== -1;\n  }\n\n  toggleNoteVisibility() {\n    this.noteVisibility = !this.noteVisibility;\n  }\n\n  calcMaxWidth(): string {\n    const SOURCE = \"RwHistoryView.calcMaxWidth\"\n\n    let maxWidth = window.innerWidth;\n    if (this.popup == true) {\n      maxWidth = 450\n    } else {\n\n      if (this.isMounted) {\n\n        let card = this.cardElement;\n        if (card && card.clientWidth) {\n          maxWidth = card.clientWidth - 150;\n        } else {\n          //This occurs in Empty State\n          maxWidth = 450;\n        }\n      }\n\n    }\n    let output = \"max-width: \" + maxWidth.toString() + \"px\";\n    this.finalLength = output;\n\n    return output;\n  }\n\n  mounted() {\n    this.isMounted = true;\n    this.calcMaxWidth();\n    window.addEventListener('resize', this.calcMaxWidth);\n  }\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwHistoryView.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwHistoryView.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwHistoryView.vue?vue&type=style&index=0&id=7f85fdce&prod&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./RwHistoryView.vue?vue&type=template&id=7f85fdce&scoped=true&\"\nimport script from \"./RwHistoryView.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwHistoryView.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwHistoryView.vue?vue&type=style&index=0&id=7f85fdce&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7f85fdce\",\n  null\n  \n)\n\nexport default component.exports","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport RwStopView from \"@/app/views/planner/RwStopView.vue\";\nimport RwHistoryView from \"@/app/views/history/RwHistoryView.vue\";\nimport RwRouteView from \"@/app/views/routes/RwRouteView.vue\";\nimport RwSiteView from \"@/app/views/sites/RwSiteView.vue\";\nimport RwDriverView from \"@/app/views/drivers/RwDriverView.vue\";\nimport {RwPinTypes} from \"@/app/RwEnums\";\n\n@Component({components: {RwStopView, RwRouteView, RwSiteView, RwDriverView, RwHistoryView}})\nexport default class RwPinPopup extends Vue {\n\n  //#region Props\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get showHistoryView() {\n    return this.globals.showHistoryPop && this.selectedHistoryItem;\n  }\n\n  get selectedHistoryItem() {\n    return this.globals.selectedHistoryItem;\n  }\n\n  get showStopView() {\n    let show = false;\n    let pin = this.space.selectedPin;\n    if (pin && (pin.type == RwPinTypes.Stop || pin.type == RwPinTypes.Task)) {\n      show = true;\n    }\n    //console.warn(\"showStopView\", show);\n    return show;\n  }\n\n  get showDriverView() {\n    let show = false;\n    let pin = this.space.selectedPin;\n    if (pin && pin.type == RwPinTypes.Driver) {\n      show = true;\n    }\n    //console.log(\"showDriverView\", show);\n    return show;\n  }\n\n  get showRouteView() {\n    let show = false;\n    let pin = this.space.selectedPin;\n    if (pin && pin.type == RwPinTypes.Route) {\n      show = true;\n    }\n    //console.log(\"showRouteView\", show);\n    return show;\n  }\n\n  get showSiteView() {\n    let show = false;\n    let pin = this.space.selectedPin;\n    if (pin && pin.type == RwPinTypes.Site) {\n      show = true;\n    }\n    //console.log(\"showSiteView\", show);\n    return show;\n  }\n\n\n  //#endregion\n\n\n  onDock() {\n    this.globals.showPinPopup = false;\n    this.globals.showPinPanel = true;\n  }\n\n  onClosePop() {\n    this.globals.showPinPopup = false;\n  }\n\n  onDeleted() {\n    //console.log(\"RwPinPopup.onDeleted\")\n    this.globals.showPinPopup = false;\n    this.space.clearPinSelections();\n  }\n\n  escPress(event: Event) {\n    event.stopPropagation();\n    this.globals.showPinPopup = false;\n  }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPinPopup.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPinPopup.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPinPopup.vue?vue&type=style&index=0&id=c5e0d1ce&prod&scoped=true&lang=scss&\"","import { render, staticRenderFns } from \"./RwPinPopup.vue?vue&type=template&id=c5e0d1ce&scoped=true&\"\nimport script from \"./RwPinPopup.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPinPopup.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwPinPopup.vue?vue&type=style&index=0&id=c5e0d1ce&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"c5e0d1ce\",\n  null\n  \n)\n\nexport default component.exports","// extracted by mini-css-extract-plugin\nexport {};","import VSlider from './VSlider';\nexport { VSlider };\nexport default VSlider;\n//# sourceMappingURL=index.js.map","// Styles\nimport \"../../../src/components/VRangeSlider/VRangeSlider.sass\"; // Components\n\nimport VSlider from '../VSlider'; // Helpers\n\nimport { addOnceEventListener, createRange, deepEqual, passiveSupported } from '../../util/helpers';\n/* @vue/component */\n\nexport default VSlider.extend({\n  name: 'v-range-slider',\n  props: {\n    value: {\n      type: Array,\n      default: () => [0, 0]\n    }\n  },\n\n  data() {\n    return {\n      activeThumb: null,\n      lazyValue: this.value\n    };\n  },\n\n  computed: {\n    classes() {\n      return { ...VSlider.options.computed.classes.call(this),\n        'v-input--range-slider': true\n      };\n    },\n\n    internalValue: {\n      get() {\n        return this.lazyValue;\n      },\n\n      set(val) {\n        // Round value to ensure the\n        // entire slider range can\n        // be selected with step\n        let value = val.map((v = 0) => this.roundValue(Math.min(Math.max(v, this.minValue), this.maxValue))); // Switch values if range and wrong order\n\n        if (value[0] > value[1] || value[1] < value[0]) {\n          if (this.activeThumb !== null) {\n            const toFocus = this.activeThumb === 1 ? 0 : 1;\n            const el = this.$refs[`thumb_${toFocus}`];\n            el.focus();\n          }\n\n          value = [value[1], value[0]];\n        }\n\n        this.lazyValue = value;\n        if (!deepEqual(value, this.value)) this.$emit('input', value);\n        this.validate();\n      }\n\n    },\n\n    inputWidth() {\n      return this.internalValue.map(v => (this.roundValue(v) - this.minValue) / (this.maxValue - this.minValue) * 100);\n    }\n\n  },\n  methods: {\n    getTrackStyle(startLength, endLength, startPadding = 0, endPadding = 0) {\n      const startDir = this.vertical ? this.$vuetify.rtl ? 'top' : 'bottom' : this.$vuetify.rtl ? 'right' : 'left';\n      const endDir = this.vertical ? 'height' : 'width';\n      const start = `calc(${startLength}% + ${startPadding}px)`;\n      const end = `calc(${endLength}% + ${endPadding}px)`;\n      return {\n        transition: this.trackTransition,\n        [startDir]: start,\n        [endDir]: end\n      };\n    },\n\n    getIndexOfClosestValue(arr, v) {\n      if (Math.abs(arr[0] - v) < Math.abs(arr[1] - v)) return 0;else return 1;\n    },\n\n    genInput() {\n      return createRange(2).map(i => {\n        const input = VSlider.options.methods.genInput.call(this);\n        input.data = input.data || {};\n        input.data.attrs = input.data.attrs || {};\n        input.data.attrs.value = this.internalValue[i];\n        input.data.attrs.id = `input-${i ? 'max' : 'min'}-${this._uid}`;\n        return input;\n      });\n    },\n\n    genTrackContainer() {\n      const children = [];\n      const padding = this.isDisabled ? 10 : 0;\n      const sections = [{\n        class: 'v-slider__track-background',\n        color: this.computedTrackColor,\n        styles: [0, this.inputWidth[0], 0, -padding]\n      }, {\n        class: this.isDisabled ? 'v-slider__track-background' : 'v-slider__track-fill',\n        color: this.isDisabled ? this.computedTrackColor : this.computedTrackFillColor,\n        styles: [this.inputWidth[0], Math.abs(this.inputWidth[1] - this.inputWidth[0]), padding, padding * -2]\n      }, {\n        class: 'v-slider__track-background',\n        color: this.computedTrackColor,\n        styles: [this.inputWidth[1], Math.abs(100 - this.inputWidth[1]), padding, -padding]\n      }];\n      if (this.$vuetify.rtl) sections.reverse();\n      children.push(...sections.map(section => this.$createElement('div', this.setBackgroundColor(section.color, {\n        staticClass: section.class,\n        style: this.getTrackStyle(...section.styles)\n      }))));\n      return this.$createElement('div', {\n        staticClass: 'v-slider__track-container',\n        ref: 'track'\n      }, children);\n    },\n\n    genChildren() {\n      return [this.genInput(), this.genTrackContainer(), this.genSteps(), createRange(2).map(index => {\n        const value = this.internalValue[index];\n\n        const onFocus = e => {\n          this.isFocused = true;\n          this.activeThumb = index;\n          this.$emit('focus', e);\n        };\n\n        const onBlur = e => {\n          this.isFocused = false;\n          this.activeThumb = null;\n          this.$emit('blur', e);\n        };\n\n        const valueWidth = this.inputWidth[index];\n        const isActive = this.isActive && this.activeThumb === index;\n        const isFocused = this.isFocused && this.activeThumb === index;\n        return this.genThumbContainer(value, valueWidth, isActive, isFocused, onFocus, onBlur, `thumb_${index}`);\n      })];\n    },\n\n    reevaluateSelected(value) {\n      this.activeThumb = this.getIndexOfClosestValue(this.internalValue, value);\n      const refName = `thumb_${this.activeThumb}`;\n      const thumbRef = this.$refs[refName];\n      thumbRef.focus();\n    },\n\n    onSliderMouseDown(e) {\n      var _a;\n\n      const value = this.parseMouseMove(e);\n      this.reevaluateSelected(value);\n      this.oldValue = this.internalValue;\n      this.isActive = true;\n\n      if ((_a = e.target) === null || _a === void 0 ? void 0 : _a.matches('.v-slider__thumb-container, .v-slider__thumb-container *')) {\n        this.thumbPressed = true;\n        const domRect = e.target.getBoundingClientRect();\n        const touch = 'touches' in e ? e.touches[0] : e;\n        this.startOffset = this.vertical ? touch.clientY - (domRect.top + domRect.height / 2) : touch.clientX - (domRect.left + domRect.width / 2);\n      } else {\n        this.startOffset = 0;\n        window.clearTimeout(this.mouseTimeout);\n        this.mouseTimeout = window.setTimeout(() => {\n          this.thumbPressed = true;\n        }, 300);\n      }\n\n      const mouseUpOptions = passiveSupported ? {\n        passive: true,\n        capture: true\n      } : true;\n      const mouseMoveOptions = passiveSupported ? {\n        passive: true\n      } : false;\n      const isTouchEvent = ('touches' in e);\n      this.onMouseMove(e);\n      this.app.addEventListener(isTouchEvent ? 'touchmove' : 'mousemove', this.onMouseMove, mouseMoveOptions);\n      addOnceEventListener(this.app, isTouchEvent ? 'touchend' : 'mouseup', this.onSliderMouseUp, mouseUpOptions);\n      this.$emit('start', this.internalValue);\n    },\n\n    onSliderClick(e) {\n      if (!this.isActive) {\n        if (this.noClick) {\n          this.noClick = false;\n          return;\n        }\n\n        const value = this.parseMouseMove(e);\n        this.reevaluateSelected(value);\n        this.setInternalValue(value);\n        this.$emit('change', this.internalValue);\n      }\n    },\n\n    onMouseMove(e) {\n      const value = this.parseMouseMove(e);\n\n      if (e.type === 'mousemove') {\n        this.thumbPressed = true;\n      }\n\n      if (this.activeThumb === null) {\n        this.activeThumb = this.getIndexOfClosestValue(this.internalValue, value);\n      }\n\n      this.setInternalValue(value);\n    },\n\n    onKeyDown(e) {\n      if (this.activeThumb === null) return;\n      const value = this.parseKeyDown(e, this.internalValue[this.activeThumb]);\n      if (value == null) return;\n      this.setInternalValue(value);\n      this.$emit('change', this.internalValue);\n    },\n\n    setInternalValue(value) {\n      this.internalValue = this.internalValue.map((v, i) => {\n        if (i === this.activeThumb) return value;else return Number(v);\n      });\n    }\n\n  }\n});\n//# sourceMappingURL=VRangeSlider.js.map","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VColorPicker } from 'vuetify/lib/components/VColorPicker';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRangeSlider } from 'vuetify/lib/components/VRangeSlider';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"overlay-color\":_vm.globals.isDarkMode ? '#000' : '#000',\"content-class\":\"dialog-with-scroll\",\"max-width\":\"600px\",\"overlay-opacity\":\"0.65\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.onEscape.apply(null, arguments)}},model:{value:(_vm.space.showDataLayers),callback:function ($$v) {_vm.$set(_vm.space, \"showDataLayers\", $$v)},expression:\"space.showDataLayers\"}},[_c(VCard,{staticClass:\"dialog-card mx-auto\"},[_c(VToolbar,{attrs:{\"color\":_vm.globals.backColorBar,\"dense\":\"\"}},[_c(VToolbarTitle,[_vm._v(_vm._s(_vm.title))])],1),_c(VCardText,{class:_vm.globals.theme,staticStyle:{\"height\":\"100%\",\"width\":\"100%\",\"overflow-y\":\"auto\"}},[_c(VTabsItems,{attrs:{\"grow\":\"\",\"solo-inverted\":\"\"},model:{value:(_vm.idxTab),callback:function ($$v) {_vm.idxTab=$$v},expression:\"idxTab\"}},[_c(VTabItem,{key:\"0\"},[_c(VContainer,{staticClass:\"mt-4\"},[_c(VRow,{attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c('span',{staticClass:\"item-text-overflow\"},[_vm._v(\"Show Route (Stops)\")]),_c(VRow,{attrs:{\"align\":\"center\",\"justify\":\"end\",\"no-gutters\":\"\"}},[_c(VSwitch,{attrs:{\"dense\":\"\"},model:{value:(_vm.space.showDataLayerRoute),callback:function ($$v) {_vm.$set(_vm.space, \"showDataLayerRoute\", $$v)},expression:\"space.showDataLayerRoute\"}}),_c(VBtn,{attrs:{\"disabled\":!_vm.space.showDataLayerRoute,\"icon\":\"\"},on:{\"click\":_vm.onFilterStopsClick}},[_c(VIcon,{attrs:{\"color\":_vm.isStopFiltered ? 'primary' : 'normal'}},[_vm._v(\"mdi-filter\")])],1)],1)],1),_c(VRow,{attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c('span',{staticClass:\"item-text-overflow\"},[_vm._v(\"Show Favorites\")]),_c(VRow,{attrs:{\"align\":\"center\",\"justify\":\"end\",\"no-gutters\":\"\"}},[_c(VSwitch,{attrs:{\"dense\":\"\"},model:{value:(_vm.space.showDataLayerSites),callback:function ($$v) {_vm.$set(_vm.space, \"showDataLayerSites\", $$v)},expression:\"space.showDataLayerSites\"}}),_c(VBtn,{attrs:{\"disabled\":!_vm.space.showDataLayerSites,\"icon\":\"\"},on:{\"click\":_vm.onFilterSitesClick}},[_c(VIcon,{attrs:{\"color\":_vm.isSiteFiltered ? 'primary' : 'normal'}},[_vm._v(\"mdi-filter\")])],1)],1)],1),(_vm.globals.isDisp)?_c(VRow,{attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c('span',{staticClass:\"item-text-overflow\"},[_vm._v(\"Show Tasks\")]),_c(VRow,{attrs:{\"align\":\"center\",\"justify\":\"end\",\"no-gutters\":\"\"}},[_c(VSwitch,{attrs:{\"dense\":\"\"},model:{value:(_vm.space.showDataLayerTasks),callback:function ($$v) {_vm.$set(_vm.space, \"showDataLayerTasks\", $$v)},expression:\"space.showDataLayerTasks\"}}),_c(VBtn,{attrs:{\"disabled\":!_vm.space.showDataLayerTasks,\"icon\":\"\"},on:{\"click\":_vm.onFilterTasksClick}},[_c(VIcon,{attrs:{\"color\":_vm.isTaskFiltered ? 'primary' : 'normal'}},[_vm._v(\"mdi-filter\")])],1)],1)],1):_vm._e()],1)],1),_c(VTabItem,{key:\"1\"},[_c(VContainer,{staticClass:\"mt-4\",attrs:{\"fill-height\":\"\",\"fluid\":\"\"}},[_c(VRow,{attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VTextField,{ref:\"txtStopFilterName\",attrs:{\"clearable\":\"\",\"filled\":\"\",\"label\":\"Filter By Name\",\"single-line\":\"\"},model:{value:(_vm.stopFilterName),callback:function ($$v) {_vm.stopFilterName=$$v},expression:\"stopFilterName\"}})],1),_c(VRow,{attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VTextField,{attrs:{\"clearable\":\"\",\"filled\":\"\",\"label\":\"Filter By Address\",\"single-line\":\"\"},model:{value:(_vm.stopFilterAddress),callback:function ($$v) {_vm.stopFilterAddress=$$v},expression:\"stopFilterAddress\"}})],1),_c(VBtn,{staticClass:\"mx-0 px-0 grey--text font-weight-bold filter-button\",staticStyle:{\"height\":\"56px\",\"width\":\"100%\"},attrs:{\"block\":\"\",\"justify\":\"space-between\",\"text\":\"\"},on:{\"click\":_vm.onActiveStopsSwitch}},[_c('div',{staticClass:\"text-left text-capitalize\",staticStyle:{\"white-space\":\"pre-wrap\"}},[_vm._v(\"Active Stops Only: \")]),_c(VCol,{staticClass:\"ma-0 pa-0\",attrs:{\"align\":\"right\"}},[_c(VSwitch,{staticClass:\"pt-2 ma-0\",staticStyle:{\"height\":\"32px\",\"width\":\"40px\"},on:{\"click\":_vm.onActiveStopsSwitch},model:{value:(_vm.stopFilterActiveOnly),callback:function ($$v) {_vm.stopFilterActiveOnly=$$v},expression:\"stopFilterActiveOnly\"}})],1)],1),_c(VBtn,{staticClass:\"mx-0 px-0 grey--text font-weight-bold filter-button\",staticStyle:{\"height\":\"56px\",\"width\":\"100%\"},attrs:{\"block\":\"\",\"justify\":\"space-between\",\"text\":\"\"},on:{\"click\":_vm.onStopDist}},[_c('div',{staticClass:\"text-left text-capitalize\",staticStyle:{\"white-space\":\"pre-wrap\"}},[_vm._v(\"Distance From Route Start: \")]),_c(VCol,{staticClass:\"mr-0 pr-0\",attrs:{\"align\":\"right\"}},[_c('span',{staticClass:\"pink--text darken-1\"},[_vm._v(_vm._s(_vm.stopDistText))]),_c(VIcon,{staticClass:\"ml-2\"},[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VBtn,{staticClass:\"mx-0 px-0 grey--text font-weight-bold filter-button\",staticStyle:{\"height\":\"56px\",\"width\":\"100%\"},attrs:{\"block\":\"\",\"justify\":\"space-between\",\"text\":\"\"},on:{\"click\":_vm.onStopHash}},[_c('div',{staticClass:\"text-left text-capitalize\",staticStyle:{\"white-space\":\"pre-wrap\"}},[_vm._v(\"Hashtags (from Notes): \")]),_c(VCol,{staticClass:\"mr-0 pr-0\",attrs:{\"align\":\"right\"}},[_c('span',{staticClass:\"pink--text text-none\"},[_vm._v(_vm._s(_vm.stopHashText))]),_c(VIcon,{staticClass:\"ml-2\"},[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VBtn,{staticClass:\"mx-0 px-0 grey--text font-weight-bold\",staticStyle:{\"height\":\"56px\"},attrs:{\"block\":\"\",\"justify\":\"space-between\",\"text\":\"\"},on:{\"click\":_vm.onStopColor}},[_c('div',{staticClass:\"text-left text-capitalize\"},[_vm._v(\" Color Match: \")]),_c(VCol,{staticClass:\"mr-0 pr-0\",attrs:{\"align\":\"right\"}},[(_vm.stopFilterColor.length > 0)?_c(VIcon,{staticClass:\"ml-2\",attrs:{\"color\":_vm.stopFilterColor}},[_vm._v(\" mdi-map-marker \")]):_vm._e(),_c(VIcon,{staticClass:\"ml-2\"},[_vm._v(\"mdi-chevron-right\")])],1)],1)],1)],1),_c(VTabItem,{key:\"2\"},[_c(VContainer,{staticClass:\"mt-4\",attrs:{\"fill-height\":\"\",\"fluid\":\"\"}},[_c(VRow,{attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VTextField,{ref:\"txtSiteFilterName\",attrs:{\"clearable\":\"\",\"filled\":\"\",\"label\":\"Filter By Name\",\"single-line\":\"\"},model:{value:(_vm.siteFilterName),callback:function ($$v) {_vm.siteFilterName=$$v},expression:\"siteFilterName\"}})],1),_c(VRow,{attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VTextField,{attrs:{\"clearable\":\"\",\"filled\":\"\",\"label\":\"Filter By Address\",\"single-line\":\"\"},model:{value:(_vm.siteFilterAddress),callback:function ($$v) {_vm.siteFilterAddress=$$v},expression:\"siteFilterAddress\"}})],1),_c(VRow,{staticStyle:{\"height\":\"56px\"},attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":_vm.onSiteDist}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Distance From Route Start: \")]),_c(VCol,{attrs:{\"align\":\"right\"}},[_c('span',{staticClass:\"pink--text darken-1\"},[_vm._v(_vm._s(_vm.siteDistText))]),_c(VIcon,{staticClass:\"ml-2\"},[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticStyle:{\"height\":\"56px\"},attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":_vm.onSiteHash}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Hashtags (from Notes): \")]),_c(VCol,{attrs:{\"align\":\"right\"}},[_c('span',{staticClass:\"pink--text darken-1\"},[_vm._v(_vm._s(_vm.siteHashText))]),_c(VIcon,{staticClass:\"ml-2\"},[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticStyle:{\"height\":\"56px\"},attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":_vm.onSiteColor}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Color Match: \")]),_c(VCol,{attrs:{\"align\":\"right\"}},[(_vm.siteFilterColor.length > 0)?_c(VIcon,{staticClass:\"ml-2\",attrs:{\"color\":_vm.siteFilterColor}},[_vm._v(\" mdi-star \")]):_vm._e(),_c(VIcon,{staticClass:\"ml-2\"},[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticStyle:{\"height\":\"56px\"},attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":_vm.onSiteCheck}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Check-In: \")]),_c(VCol,{attrs:{\"align\":\"right\"}},[_c('span',{staticClass:\"pink--text lighten-3\"},[_vm._v(_vm._s(_vm.siteCheckText))]),_c(VIcon,{staticClass:\"ml-2\"},[_vm._v(\"mdi-chevron-right\")])],1)],1)],1)],1),_c(VTabItem,{key:\"3\"},[_c(VContainer,{staticClass:\"mt-4\",attrs:{\"fill-height\":\"\",\"fluid\":\"\"}},[_c(VRow,{attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VTextField,{ref:\"txtTaskFilterName\",attrs:{\"clearable\":\"\",\"filled\":\"\",\"label\":\"Filter By Name\",\"single-line\":\"\"},model:{value:(_vm.taskFilterName),callback:function ($$v) {_vm.taskFilterName=$$v},expression:\"taskFilterName\"}})],1),_c(VRow,{attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VTextField,{attrs:{\"clearable\":\"\",\"filled\":\"\",\"label\":\"Filter By Address\",\"single-line\":\"\"},model:{value:(_vm.taskFilterAddress),callback:function ($$v) {_vm.taskFilterAddress=$$v},expression:\"taskFilterAddress\"}})],1),_c(VRow,{staticStyle:{\"height\":\"56px\"},attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":_vm.onTaskDist}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Distance From Route Start: \")]),_c(VCol,{attrs:{\"align\":\"right\"}},[_c('span',{staticClass:\"pink--text\"},[_vm._v(_vm._s(_vm.taskDistText))]),_c(VIcon,{staticClass:\"ml-2\"},[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticStyle:{\"height\":\"56px\"},attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":_vm.onTaskHash}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Hashtags (from Notes): \")]),_c(VCol,{attrs:{\"align\":\"right\"}},[_vm._v(\"\\\\ \"),_c('span',{staticClass:\"pink--text\"},[_vm._v(_vm._s(_vm.taskHashText))]),_c(VIcon,{staticClass:\"ml-2\"},[_vm._v(\"mdi-chevron-right\")])],1)],1),_c(VRow,{staticStyle:{\"height\":\"56px\"},attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"},on:{\"click\":_vm.onTaskColor}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Color Match: \")]),_c(VCol,{attrs:{\"align\":\"right\"}},[(_vm.taskFilterColor.length > 0)?_c(VIcon,{staticClass:\"ml-2\",attrs:{\"color\":_vm.taskFilterColor}},[_vm._v(\" mdi-clipboard-check \")]):_vm._e(),_c(VIcon,{staticClass:\"ml-2\"},[_vm._v(\"mdi-chevron-right\")])],1)],1)],1)],1),_c(VTabItem,{key:\"4\"},[_c(VContainer,{staticClass:\"mt-4\",attrs:{\"fill-height\":\"\",\"fluid\":\"\"}},[_c(VRow,{attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VTextField,{ref:\"txtDriverFilterName\",attrs:{\"clearable\":\"\",\"filled\":\"\",\"label\":\"Filter By Name\",\"single-line\":\"\"},model:{value:(_vm.driverFilterName),callback:function ($$v) {_vm.driverFilterName=$$v},expression:\"driverFilterName\"}})],1)],1)],1),_c(VTabItem,{key:\"5\"},[_c(VContainer,{staticClass:\"mt-1\",attrs:{\"fill-height\":\"\",\"fluid\":\"\"}},[_c(VRow,{staticClass:\"mb-4\",attrs:{\"justify\":\"space-between\"}},[_c(VCol,{staticClass:\"text-center\"},[_c('span',{staticClass:\"display-3 font-weight-light\"},[_vm._v(\" \"+_vm._s(_vm.distText)+\" \")])])],1),_c(VRow,{staticClass:\"mt-4\",attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VSlider,{attrs:{\"always-dirty\":\"\",\"color\":\"primary\",\"max\":\"100\",\"min\":\"0\",\"track-color\":\"grey\"},scopedSlots:_vm._u([{key:\"prepend\",fn:function(){return [_c(VIcon,{attrs:{\"color\":\"primary\"},on:{\"click\":_vm.onDecrement}},[_vm._v(\" mdi-minus \")])]},proxy:true},{key:\"append\",fn:function(){return [_c(VIcon,{attrs:{\"color\":\"primary\"},on:{\"click\":_vm.onIncrement}},[_vm._v(\" mdi-plus \")])]},proxy:true}]),model:{value:(_vm.dist),callback:function ($$v) {_vm.dist=$$v},expression:\"dist\"}})],1)],1)],1),_c(VTabItem,{key:\"6\"},[_c(VContainer,{staticClass:\"mt-4\",attrs:{\"fill-height\":\"\",\"fluid\":\"\"}},[_c(VRow,{staticClass:\"mt-4\",attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" \"+_vm._s(_vm.hashAll ? 'Match ALL tags' : 'Match ANY tags')+\" \")]),_c('div',{staticStyle:{\"width\":\"40px\"}},[_c(VSwitch,{attrs:{\"dense\":\"\"},model:{value:(_vm.hashAll),callback:function ($$v) {_vm.hashAll=$$v},expression:\"hashAll\"}})],1)]),_c(VRow,{staticClass:\"mt-4\",attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VTextField,{attrs:{\"clearable\":\"\",\"hint\":\"multiple tags can be listed by separating each tag with a space\",\"label\":\"Hashtags\",\"outlined\":\"\",\"placeholder\":\"#tag1 #tag2\"},model:{value:(_vm.hash),callback:function ($$v) {_vm.hash=$$v},expression:\"hash\"}})],1)],1)],1),_c(VTabItem,{key:\"7\"},[_c(VContainer,{staticClass:\"mt-4\",attrs:{\"fill-height\":\"\",\"fluid\":\"\"}},[_c(VRow,{staticClass:\"mt-4\",attrs:{\"align\":\"center\",\"justify\":\"center\",\"no-gutters\":\"\"}},[_c(VColorPicker,{attrs:{\"swatches\":_vm.globals.swatches,\"hide-sliders\":\"\",\"flat\":\"\",\"hide-canvas\":\"\",\"hide-inputs\":\"\",\"show-swatches\":\"\",\"swatches-max-height\":\"200\"},model:{value:(_vm.color),callback:function ($$v) {_vm.color=$$v},expression:\"color\"}})],1)],1)],1),_c(VTabItem,{key:\"8\"},[_c(VContainer,{staticClass:\"mt-4\",attrs:{\"fill-height\":\"\",\"fluid\":\"\"}},[_c(VRow,{staticClass:\"mb-4\",attrs:{\"justify\":\"space-between\"}},[_c(VCol,{staticClass:\"text-center\"},[_c('span',{staticClass:\"display-1 font-weight-light\"},[_vm._v(\" \"+_vm._s(_vm.checkDateText)+\" \")])])],1),_c(VRow,{staticClass:\"mt-4\",attrs:{\"align\":\"center\",\"dense\":\"\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VRangeSlider,{staticClass:\"align-center\",attrs:{\"color\":\"primary\",\"max\":0,\"min\":-100,\"hide-details\":\"\"},model:{value:(_vm.checkRange),callback:function ($$v) {_vm.checkRange=$$v},expression:\"checkRange\"}})],1),_c(VBtn,{staticClass:\"mx-0 px-0 grey--text font-weight-bold\",staticStyle:{\"height\":\"56px\"},attrs:{\"block\":\"\",\"justify\":\"space-between\",\"text\":\"\"},on:{\"click\":_vm.onWithinDayRange}},[_c('div',{staticClass:\"text-left text-capitalize\"},[_vm._v(\" Check-in within day range: \")]),_c(VCol,{staticClass:\"ma-0 pa-0\",attrs:{\"align\":\"right\"}},[_c(VSwitch,{staticClass:\"pt-2 ma-0\",staticStyle:{\"height\":\"32px\",\"width\":\"40px\"},on:{\"click\":_vm.onWithinDayRange},model:{value:(_vm.siteFilterCheckWithin),callback:function ($$v) {_vm.siteFilterCheckWithin=$$v},expression:\"siteFilterCheckWithin\"}})],1)],1)],1)],1)],1)],1),_c(VCardActions,[_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab >= 1 && _vm.idxTab <= 4),expression:\"idxTab >= 1 && idxTab <= 4\"}],attrs:{\"text\":\"\",\"xs6\":\"\"},on:{\"click\":_vm.onBackClick}},[_vm._v(\"Back\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 5),expression:\"idxTab === 5\"}],attrs:{\"text\":\"\",\"xs6\":\"\"},on:{\"click\":_vm.onBackDist}},[_vm._v(\"Back\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 6),expression:\"idxTab === 6\"}],attrs:{\"text\":\"\",\"xs6\":\"\"},on:{\"click\":_vm.onBackHash}},[_vm._v(\"Back\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 7),expression:\"idxTab === 7\"}],attrs:{\"text\":\"\",\"xs6\":\"\"},on:{\"click\":_vm.onBackColor}},[_vm._v(\"Back\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 8),expression:\"idxTab === 8\"}],attrs:{\"text\":\"\",\"xs6\":\"\"},on:{\"click\":_vm.onBackCheck}},[_vm._v(\"Back\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 0 && _vm.isLayerHiddenOrFiltered),expression:\"idxTab === 0 && isLayerHiddenOrFiltered\"}],attrs:{\"text\":\"\"},on:{\"click\":_vm.onClearAll}},[_vm._v(\"Clear All\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 1 && (_vm.isStopFiltered || _vm.gotStopDeltas)),expression:\"idxTab === 1 && (isStopFiltered || gotStopDeltas)\"}],attrs:{\"text\":\"\"},on:{\"click\":_vm.onClearFilter}},[_vm._v(\"Clear Filter \")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 2 && (_vm.isSiteFiltered || _vm.gotSiteDeltas)),expression:\"idxTab === 2 && (isSiteFiltered || gotSiteDeltas)\"}],attrs:{\"text\":\"\"},on:{\"click\":_vm.onClearFilter}},[_vm._v(\"Clear Filter \")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 3 && (_vm.isTaskFiltered || _vm.gotTaskDeltas)),expression:\"idxTab === 3 && (isTaskFiltered || gotTaskDeltas)\"}],attrs:{\"text\":\"\"},on:{\"click\":_vm.onClearFilter}},[_vm._v(\"Clear Filter \")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 4 && (_vm.isDriverFiltered || _vm.gotDriverDeltas)),expression:\"idxTab === 4 && (isDriverFiltered || gotDriverDeltas)\"}],attrs:{\"text\":\"\"},on:{\"click\":_vm.onClearFilter}},[_vm._v(\"Clear Filter \")]),_c(VSpacer),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 1 && _vm.gotStopDeltas),expression:\"idxTab === 1 && gotStopDeltas\"}],attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onApplyFilter}},[_vm._v(\"Apply\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 2 && _vm.gotSiteDeltas),expression:\"idxTab === 2 && gotSiteDeltas\"}],attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onApplyFilter}},[_vm._v(\"Apply\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 3 && _vm.gotTaskDeltas),expression:\"idxTab === 3 && gotTaskDeltas\"}],attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onApplyFilter}},[_vm._v(\"Apply\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 4 && _vm.gotDriverDeltas),expression:\"idxTab === 4 && gotDriverDeltas\"}],attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onApplyFilter}},[_vm._v(\"Apply\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 5),expression:\"idxTab === 5\"}],attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onApplyDist}},[_vm._v(\"Apply\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 6),expression:\"idxTab === 6\"}],attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onApplyHash}},[_vm._v(\"Apply\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 7),expression:\"idxTab === 7\"}],attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onApplyColor}},[_vm._v(\"Apply\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 8),expression:\"idxTab === 8\"}],attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onApplyCheck}},[_vm._v(\"Apply\")]),_c(VBtn,{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.idxTab === 0),expression:\"idxTab === 0\"}],attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onDone}},[_vm._v(\"Done\")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlan, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\"\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport {RwDistUnits, RwStopFilterType} from \"@/app/RwEnums\";\n\n\n@Component\nexport default class RwPlannerLayers extends Vue {\n\n\n  //#region Props\n\n  idxTab = 0;\n  idxTabSrc = 0;\n  dist = 0;\n  hash = \"\";\n  hashAll = false;\n  color = \"\";\n  checkRange = [-100, 0];\n  checkWithin = true;\n\n  stopFilterName = RwPrefUtils.stopFilterName;\n  stopFilterAddress = RwPrefUtils.stopFilterAddress;\n  stopFilterActiveOnly = RwPrefUtils.stopFilterType === RwStopFilterType.ActiveStopsOnly;\n  stopFilterDistance = RwPrefUtils.stopFilterDistance;\n  stopFilterHash = RwPrefUtils.stopFilterHash;\n  stopFilterHashAll = RwPrefUtils.stopFilterHashAll;\n  stopFilterColor = RwPrefUtils.stopFilterColor;\n\n  siteFilterName = RwPrefUtils.siteFilterName;\n  siteFilterAddress = RwPrefUtils.siteFilterAddress;\n  siteFilterDistance = RwPrefUtils.siteFilterDistance;\n  siteFilterHash = RwPrefUtils.siteFilterHash;\n  siteFilterHashAll = RwPrefUtils.siteFilterHashAll;\n  siteFilterColor = RwPrefUtils.siteFilterColor;\n  siteFilterCheckMin = RwPrefUtils.siteFilterCheckMin;\n  siteFilterCheckMax = RwPrefUtils.siteFilterCheckMax;\n  siteFilterCheckWithin = RwPrefUtils.siteFilterCheckWithin;\n\n  taskFilterName = RwPrefUtils.taskFilterName;\n  taskFilterAddress = RwPrefUtils.taskFilterAddress;\n  taskFilterDistance = RwPrefUtils.taskFilterDistance;\n  taskFilterHash = RwPrefUtils.taskFilterHash;\n  taskFilterHashAll = RwPrefUtils.taskFilterHashAll;\n  taskFilterColor = RwPrefUtils.taskFilterColor;\n\n  driverFilterName = RwPrefUtils.driverFilterName;\n\n  recomputeStops = 0;\n  recomputeSites = 0;\n  recomputeTasks = 0;\n  recomputeDrivers = 0;\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlan\n  };\n\n  get title() {\n    let title: string;\n    switch (this.idxTab) {\n        //@formatter:off\n      case 0:\n        title = \"Data Layers\";\n        break;\n      case 1:\n        title = \"Stops Filter\";\n        break;\n      case 2:\n        title = \"Favorites Filter\";\n        break;\n      case 3:\n        title = \"Tasks Filter\";\n        break;\n      case 4:\n        title = \"Drivers Filter\";\n        break;\n      case 5:\n        title = \"Distance Filter\";\n        break;\n      case 6:\n        title = \"Hashtag Filter\";\n        break;\n      case 7:\n        title = \"Color Filter\";\n        break;\n      case 8:\n        title = \"Check-In Filter\";\n        break;\n        //@formatter:on\n    }\n    return title;\n  }\n\n\n  get stopDistText() {\n    return this.displayDistance(this.stopFilterDistance, \"\");\n  }\n\n  get siteDistText() {\n    return this.displayDistance(this.siteFilterDistance, \"\");\n  }\n\n  get taskDistText() {\n    return this.displayDistance(this.taskFilterDistance, \"\");\n  }\n\n  get stopHashText() {\n    return this.displayHash(this.stopFilterHash, this.stopFilterHashAll);\n  }\n\n  get siteHashText() {\n    return this.displayHash(this.siteFilterHash, this.siteFilterHashAll);\n  }\n\n  get taskHashText() {\n    return this.displayHash(this.taskFilterHash, this.taskFilterHashAll);\n  }\n\n  get siteCheckText() {\n    const trigger = this.recomputeSites;\n    let min = Math.abs(RwPrefUtils.siteFilterCheckMin);\n    let max = Math.abs(RwPrefUtils.siteFilterCheckMax);\n    let include = RwPrefUtils.siteFilterCheckWithin;\n    //console.warn(\"siteCheckText min, max\", min, max);\n    let text = this.getCheckText(include, min, max, \"\");\n    return text;\n  }\n\n  private getCheckText(include: boolean, min: number, max: number, anyText: string) {\n    let text = include ? \"include check-ins \" : \"exclude check-ins \";\n    if (min !== 100 || max !== 0) {\n      if (min < 100 && max > 0) {\n        //text = `${min} to ${max} days old`;\n        text = `${max} to ${min} days old`;\n      } else {\n        if (min !== 100 && max === 0) text = `less than ${min} days old`;\n        if (min === 100 && max !== 0) text = `more than ${max} days old`;\n      }\n    } else {\n      text = anyText;\n    }\n    return text;\n  }\n\n  get gotStopDeltas(): boolean {\n    let gotDeltas = false;\n    const trigger = this.recomputeStops;\n    if (this.stopFilterName !== RwPrefUtils.stopFilterName) gotDeltas = true;\n    else if (this.stopFilterAddress !== RwPrefUtils.stopFilterAddress) gotDeltas = true;\n    else if (this.stopFilterActiveOnly != (RwPrefUtils.stopFilterType === RwStopFilterType.ActiveStopsOnly)) gotDeltas = true;\n    else if (this.stopFilterDistance != RwPrefUtils.stopFilterDistance) gotDeltas = true;\n    else if (this.stopFilterHash != RwPrefUtils.stopFilterHash) gotDeltas = true;\n    else if (this.stopFilterHashAll != RwPrefUtils.stopFilterHashAll) gotDeltas = true;\n    else if (this.stopFilterColor != RwPrefUtils.stopFilterColor) gotDeltas = true;\n    return gotDeltas;\n  }\n\n  get gotSiteDeltas(): boolean {\n    let gotDeltas = false;\n    const trigger = this.recomputeSites;\n    let isNameDelta = this.siteFilterName !== RwPrefUtils.siteFilterName;\n    let isAddressDelta = this.siteFilterAddress !== RwPrefUtils.siteFilterAddress;\n    let gotTextDelta = isNameDelta || isAddressDelta;\n    if (gotTextDelta) {\n      gotDeltas = true;\n      //console.warn(\"gotSiteDeltas gotTextDelta: isNameDelta, isAddressDelta\", isNameDelta, isAddressDelta);\n    } else {\n      let isDistDelta = this.siteFilterDistance !== RwPrefUtils.siteFilterDistance;\n      if (isDistDelta) {\n        gotDeltas = true;\n        //console.warn(\"gotSiteDeltas isDistDelta\");\n      } else {\n        let isHashDelta = this.siteFilterHash != RwPrefUtils.siteFilterHash;\n        let isHashAllDelta = this.siteFilterHashAll != RwPrefUtils.siteFilterHashAll;\n        let gotHashDelta = isHashDelta || isHashAllDelta;\n        if (gotHashDelta) {\n          gotDeltas = true;\n          //console.warn(\"gotSiteDeltas gotHashDelta: isHashDelta, isHashAllDelta\", isHashDelta, isHashAllDelta);\n        } else {\n          let isColorDelta = this.siteFilterColor != RwPrefUtils.siteFilterColor;\n          if (isColorDelta) {\n            gotDeltas = true;\n            //console.warn(\"gotSiteDeltas isColorDelta\");\n          } else {\n            let isCheckMinDelta = this.siteFilterCheckMin != RwPrefUtils.siteFilterCheckMin;\n            let isCheckMaxDelta = this.siteFilterCheckMax != RwPrefUtils.siteFilterCheckMax;\n            let isCheckWithinDelta = this.siteFilterCheckWithin != RwPrefUtils.siteFilterCheckWithin;\n            let gotCheckDelta = isCheckMinDelta || isCheckMaxDelta || isCheckWithinDelta;\n            if (gotCheckDelta) {\n              gotDeltas = true;\n              //console.warn(\"gotSiteDeltas gotCheckDelta: isCheckMinDelta, siteFilterCheckMax\", isCheckMinDelta, siteFilterCheckMax);\n            }\n          }\n        }\n      }\n    }\n    return gotDeltas;\n  }\n\n  get gotTaskDeltas(): boolean {\n    let gotDeltas = false;\n    const trigger = this.recomputeTasks;\n    if (this.taskFilterName !== RwPrefUtils.taskFilterName) gotDeltas = true;\n    else if (this.taskFilterAddress !== RwPrefUtils.taskFilterAddress) gotDeltas = true;\n    else if (this.taskFilterDistance !== RwPrefUtils.taskFilterDistance) gotDeltas = true;\n    else if (this.taskFilterHash != RwPrefUtils.taskFilterHash) gotDeltas = true;\n    else if (this.taskFilterHashAll != RwPrefUtils.taskFilterHashAll) gotDeltas = true;\n    else if (this.taskFilterColor != RwPrefUtils.taskFilterColor) gotDeltas = true;\n    return gotDeltas;\n  }\n\n  get gotDriverDeltas(): boolean {\n    let gotDeltas = false;\n    const trigger = this.recomputeDrivers;\n    if (this.driverFilterName !== RwPrefUtils.driverFilterName) {\n      gotDeltas = true;\n    }\n    return gotDeltas;\n  }\n\n  get isLayerHiddenOrFiltered(): boolean {\n    return this.isLayerFiltered || this.space.isLayerHidden;\n  }\n\n  get isLayerFiltered() {\n    let isFiltered = this.isStopFiltered || this.isSiteFiltered || this.isTaskFiltered || this.isDriverFiltered;\n    //console.log(\"isLayersFiltered\", isFiltered, this.isStopFiltered);\n    return isFiltered;\n  }\n\n  get isStopFiltered(): boolean {\n    let gotFilter = false;\n    const trigger = this.recomputeStops;\n    const deltas = this.gotStopDeltas;\n    if (RwPrefUtils.stopFilterName && RwPrefUtils.stopFilterName.length > 0) gotFilter = true;\n    else if (RwPrefUtils.stopFilterAddress && RwPrefUtils.stopFilterAddress.length > 0) gotFilter = true;\n    else if (RwPrefUtils.stopFilterType === RwStopFilterType.ActiveStopsOnly) gotFilter = true;\n    else if (RwPrefUtils.stopFilterDistance > 0 && RwPrefUtils.stopFilterDistance < 100) gotFilter = true;\n    else if (RwPrefUtils.stopFilterHash && RwPrefUtils.stopFilterHash.length > 0) gotFilter = true;\n    else if (RwPrefUtils.stopFilterHashAll) gotFilter = true;\n    else if (RwPrefUtils.stopFilterColor && RwPrefUtils.stopFilterColor.length > 0) gotFilter = true;\n    return gotFilter;\n  }\n\n  get isSiteFiltered(): boolean {\n    //xREF: isSiteFiltered\n    let gotFilter = false;\n    const trigger = this.recomputeSites;\n    const deltas = this.gotSiteDeltas;\n\n    let isNameDelta = RwPrefUtils.siteFilterName && RwPrefUtils.siteFilterName.length > 0;\n    let isAddressDelta = RwPrefUtils.siteFilterAddress && RwPrefUtils.siteFilterAddress.length > 0;\n    //console.log(\"isSiteFiltered\", isAddressDelta, RwPrefUtils.siteFilterAddress);\n    let gotTextDelta = isNameDelta || isAddressDelta;\n    if (gotTextDelta) {\n      gotFilter = true;\n      //console.warn(\"isSiteFiltered gotTextDelta: isNameDelta, isAddressDelta\", isNameDelta, isAddressDelta);\n    } else {\n      let isDistDelta = RwPrefUtils.siteFilterDistance > 0 && RwPrefUtils.siteFilterDistance < 100;\n      if (isDistDelta) {\n        gotFilter = true;\n        //console.warn(\"isSiteFiltered isDistDelta\");\n      } else {\n        let isHashDelta = RwPrefUtils.siteFilterHash && RwPrefUtils.siteFilterHash.length > 0;\n        let isHashAllDelta = RwPrefUtils.siteFilterHashAll;\n        let gotHashDeltas = isHashDelta || isHashAllDelta;\n        if (gotHashDeltas) {\n          gotFilter = true;\n          //console.warn(\"isSiteFiltered gotHashDelta: isHashDelta, isHashAllDelta\", isHashDelta, isHashAllDelta);\n        } else {\n          let isColorDelta = RwPrefUtils.siteFilterColor && RwPrefUtils.siteFilterColor.length > 0;\n          if (isColorDelta) {\n            gotFilter = true;\n            //console.warn(\"isSiteFiltered isColorDelta\");\n          } else {\n            let isCheckMinDelta = RwPrefUtils.siteFilterCheckMin != -100;\n            let isCheckMaxDelta = RwPrefUtils.siteFilterCheckMax != 0;\n            let isCheckIncludeDelta = RwPrefUtils.siteFilterCheckWithin != true;\n            let gotCheckDelta = isCheckMinDelta || isCheckMaxDelta || isCheckIncludeDelta;\n            if (gotCheckDelta) {\n              gotFilter = true;\n              //console.warn(\"isSiteFiltered gotCheckDelta: isCheckMinDelta, isCheckMaxDelta\", isCheckMinDelta, isCheckMaxDelta);\n            }\n\n          }\n        }\n      }\n    }\n    return gotFilter;\n  }\n\n  get isTaskFiltered(): boolean {\n    let gotFilter = false;\n    const trigger = this.recomputeTasks;\n    const deltas = this.gotTaskDeltas;\n    if (RwPrefUtils.taskFilterName && RwPrefUtils.taskFilterName.length > 0) gotFilter = true;\n    else if (RwPrefUtils.taskFilterAddress && RwPrefUtils.taskFilterAddress.length > 0) gotFilter = true;\n    else if (RwPrefUtils.taskFilterDistance > 0 && RwPrefUtils.taskFilterDistance < 100) gotFilter = true;\n    else if (RwPrefUtils.taskFilterHash && RwPrefUtils.taskFilterHash.length > 0) gotFilter = true;\n    else if (RwPrefUtils.taskFilterHashAll) gotFilter = true;\n    else if (RwPrefUtils.taskFilterColor && RwPrefUtils.taskFilterColor.length > 0) gotFilter = true;\n    return gotFilter;\n  }\n\n  get isDriverFiltered(): boolean {\n    let gotFilter = false;\n    const trigger = this.recomputeDrivers;\n    if (this.driverFilterName && this.driverFilterName.length > 0) gotFilter = true;\n    return gotFilter;\n  }\n\n  get isKilometers(): boolean {\n    return RwPrefUtils.distUnits === RwDistUnits.Kilometers;\n  }\n\n  get distText(): string {\n    let text: string;\n    let distText = this.dist;\n    text = this.displayDistance(distText, \"Any distance\");\n    return text;\n  }\n\n  get checkDateText(): string {\n    let text = \"\";\n    let min = Math.abs(this.checkRange[0]);\n    let max = Math.abs(this.checkRange[1]);\n    let within = this.checkWithin;\n    text = this.getCheckText(within, min, max, \"Unfiltered\");\n    return text;\n  }\n\n  private displayHash(hash: string, hashAll: boolean) {\n    //console.log(\"displayHash\", hash, hashAll);\n    let text = \"\";\n    let gotHash = hash && hash.length > 0;\n    if (gotHash) {\n      let isAllText = hashAll ? \"All of: \" : \"Any of: \";\n      text = `${isAllText} ${hash}`;\n    }\n    return text;\n  }\n\n  //#endregion Props\n\n\n  //#region Navigation\n\n  onFilterStopsClick() {\n    const self = this;\n    this.idxTab = 1;\n    setTimeout(() => {\n      self.$nextTick((self.$refs.txtStopFilterName as any).focus);\n    }, 200);\n  }\n\n  onFilterSitesClick() {\n    const self = this;\n    this.idxTab = 2;\n    setTimeout(() => {\n      self.$nextTick((self.$refs.txtSiteFilterName as any).focus);\n    }, 200);\n  }\n\n  onFilterTasksClick() {\n    const self = this;\n    this.idxTab = 3;\n    setTimeout(() => {\n      self.$nextTick((self.$refs.txtTaskFilterName as any).focus);\n    }, 200);\n  }\n\n  onFilterDriversClick() {\n    const self = this;\n    this.idxTab = 4;\n    setTimeout(() => {\n      self.$nextTick((self.$refs.txtDriverFilterName as any).focus);\n    }, 200);\n  }\n\n\n  onBackClick() {\n    //console.log(\"onBackClick\");\n    //Make sure any in-prog work reset back to default\n    this.stopFilterName = RwPrefUtils.stopFilterName;\n    this.stopFilterAddress = RwPrefUtils.stopFilterAddress;\n    this.siteFilterName = RwPrefUtils.siteFilterName;\n    this.siteFilterAddress = RwPrefUtils.siteFilterAddress;\n    this.taskFilterName = RwPrefUtils.taskFilterName;\n    this.taskFilterAddress = RwPrefUtils.taskFilterAddress;\n    this.driverFilterName = RwPrefUtils.driverFilterName;\n    this.idxTab = 0;\n  }\n\n  onBackDist(event: Event) {\n    this.idxTab = this.idxTabSrc;\n    this.idxTabSrc = 0;\n  }\n\n  onBackHash(event: Event) {\n    this.idxTab = this.idxTabSrc;\n    this.idxTabSrc = 0;\n  }\n\n  onBackColor(event: Event) {\n    this.idxTab = this.idxTabSrc;\n    this.idxTabSrc = 0;\n  }\n\n  onBackCheck(event: Event) {\n    this.idxTab = this.idxTabSrc;\n    this.idxTabSrc = 0;\n  }\n\n\n  onStopDist() {\n    this.idxTab = 5;\n    this.idxTabSrc = 1;\n    this.dist = this.stopFilterDistance;\n  }\n\n  onStopHash() {\n    this.idxTab = 6;\n    this.idxTabSrc = 1;\n    this.hash = this.stopFilterHash;\n    this.hashAll = this.stopFilterHashAll;\n  }\n\n  onStopColor() {\n    this.idxTab = 7;\n    this.idxTabSrc = 1;\n    this.color = this.stopFilterColor;\n  }\n\n  onSiteDist() {\n    this.idxTab = 5;\n    this.idxTabSrc = 2;\n    this.dist = this.siteFilterDistance;\n  }\n\n  onSiteHash() {\n    this.idxTab = 6;\n    this.idxTabSrc = 2;\n    this.hash = this.siteFilterHash;\n    this.hashAll = this.siteFilterHashAll;\n  }\n\n  onSiteColor() {\n    this.idxTab = 7;\n    this.idxTabSrc = 2;\n    this.color = this.siteFilterColor;\n  }\n\n  onSiteCheck() {\n    this.idxTab = 8;\n    this.idxTabSrc = 2;\n    this.checkRange = [this.siteFilterCheckMin, this.siteFilterCheckMax];\n    this.checkWithin = this.siteFilterCheckWithin;\n    // console.log(\"onSiteCheck\", this.siteFilterCheckMin, this.siteFilterCheckMax, this.siteFilterCheckWithin);\n  }\n\n  onTaskDist() {\n    this.idxTab = 5;\n    this.idxTabSrc = 3;\n    this.dist = this.taskFilterDistance;\n  }\n\n  onTaskHash() {\n    this.idxTab = 6;\n    this.idxTabSrc = 3;\n    this.hash = this.taskFilterHash;\n    this.hashAll = this.taskFilterHashAll;\n  }\n\n  onTaskColor() {\n    this.idxTab = 7;\n    this.idxTabSrc = 3;\n    this.color = this.taskFilterColor;\n  }\n\n\n  //#endregion Navigation\n\n\n  //#region Apply APIs\n\n  onApplyFilter() {\n    switch (this.idxTab) {\n        //@formatter:off\n      case 1:\n        this.applyStopFilter();\n        break;\n      case 2:\n        this.applySiteFilter();\n        break;\n      case 3:\n        this.applyTaskFilter();\n        break;\n      case 4:\n        this.applyDriverFilter();\n        break;\n        //@formatter:on\n    }\n    this.idxTab = 0;\n  }\n\n  private applyStopFilter() {\n    RwPrefUtils.stopFilterName = this.stopFilterName ? this.stopFilterName : \"\";\n    RwPrefUtils.stopFilterAddress = this.stopFilterAddress ? this.stopFilterAddress : \"\";\n    RwPrefUtils.stopFilterType = this.stopFilterActiveOnly ? RwStopFilterType.ActiveStopsOnly : RwStopFilterType.All;\n    RwPrefUtils.stopFilterDistance = this.stopFilterDistance;\n    RwPrefUtils.stopFilterHash = this.stopFilterHash ? this.stopFilterHash : \"\";\n    RwPrefUtils.stopFilterHashAll = this.stopFilterHashAll;\n    RwPrefUtils.stopFilterColor = this.stopFilterColor;\n    this.recomputeStops = Math.random();\n    this.space.isStopFiltered = this.isStopFiltered;\n    this.globals.commitStops();\n  }\n\n  private applySiteFilter() {\n    // console.log(\"applySiteFilter\", `siteFilterHash: \\\"${newHash}\\\"`);\n    RwPrefUtils.siteFilterName = this.siteFilterName ? this.siteFilterName : \"\";\n    RwPrefUtils.siteFilterAddress = this.siteFilterAddress ? this.siteFilterAddress : \"\";\n    RwPrefUtils.siteFilterDistance = this.siteFilterDistance;\n    RwPrefUtils.siteFilterHash = this.siteFilterHash ? this.siteFilterHash : \"\";\n    RwPrefUtils.siteFilterHashAll = this.siteFilterHashAll;\n    RwPrefUtils.siteFilterColor = this.siteFilterColor;\n    RwPrefUtils.siteFilterCheckMin = this.siteFilterCheckMin;\n    RwPrefUtils.siteFilterCheckMax = this.siteFilterCheckMax;\n    RwPrefUtils.siteFilterCheckWithin = this.siteFilterCheckWithin;\n    this.recomputeSites = Math.random();\n    this.space.isSiteFiltered = this.isSiteFiltered;\n    this.globals.commitSites();\n  }\n\n  private applyTaskFilter() {\n    RwPrefUtils.taskFilterName = this.taskFilterName ? this.taskFilterName : \"\";\n    RwPrefUtils.taskFilterAddress = this.taskFilterAddress ? this.taskFilterAddress : \"\";\n    RwPrefUtils.taskFilterDistance = this.taskFilterDistance;\n    RwPrefUtils.taskFilterHash = this.taskFilterHash ? this.taskFilterHash : \"\";\n    RwPrefUtils.taskFilterHashAll = this.taskFilterHashAll;\n    RwPrefUtils.taskFilterColor = this.taskFilterColor;\n    this.recomputeTasks = Math.random();\n    this.space.isTaskFiltered = this.isTaskFiltered;\n    this.globals.commitTasks();\n  }\n\n  private applyDriverFilter() {\n    RwPrefUtils.driverFilterName = this.driverFilterName;\n    this.recomputeDrivers = Math.random();\n    this.space.isDriverFiltered = this.isDriverFiltered;\n    this.globals.commitDrivers();\n  }\n\n  private onApplyDist() {\n    switch (this.idxTabSrc) {\n      case 1: {\n        this.stopFilterDistance = this.dist;\n        this.applyStopFilter();\n        break;\n      }\n      case 2: {\n        this.siteFilterDistance = this.dist;\n        this.applySiteFilter();\n        break;\n      }\n      case 3: {\n        this.taskFilterDistance = this.dist;\n        this.applyTaskFilter();\n        break;\n      }\n    }\n    this.idxTab = this.idxTabSrc;\n    this.idxTabSrc = 0;\n  }\n\n  private onApplyHash() {\n\n    switch (this.idxTabSrc) {\n      case 1: {\n        this.stopFilterHash = this.hash;\n        this.stopFilterHashAll = this.hashAll;\n        this.applyStopFilter();\n        break;\n      }\n      case 2: {\n        this.siteFilterHash = this.hash;\n        this.siteFilterHashAll = this.hashAll;\n        this.applySiteFilter();\n        break;\n      }\n      case 3: {\n        this.taskFilterHash = this.hash;\n        this.taskFilterHashAll = this.hashAll;\n        this.applyTaskFilter();\n        break;\n      }\n    }\n    this.idxTab = this.idxTabSrc;\n    this.idxTabSrc = 0;\n  }\n\n  private onApplyColor() {\n\n    if (this.color.length === 9 && this.color.endsWith(\"FF\")) {\n      this.color = this.color.substring(0, 7);\n    }\n\n    switch (this.idxTabSrc) {\n      case 1: {\n        this.stopFilterColor = this.color;\n        this.applyStopFilter();\n        break;\n      }\n      case 2: {\n        this.siteFilterColor = this.color;\n        this.applySiteFilter();\n        break;\n      }\n      case 3: {\n        this.taskFilterColor = this.color;\n        this.applyTaskFilter();\n        break;\n      }\n    }\n    this.idxTab = this.idxTabSrc;\n    this.idxTabSrc = 0;\n  }\n\n  private onApplyCheck() {\n    this.siteFilterCheckMin = this.checkRange[0];\n    this.siteFilterCheckMax = this.checkRange[1];\n    this.siteFilterCheckWithin = this.checkWithin;\n    this.applySiteFilter();\n    this.idxTab = this.idxTabSrc;\n    this.idxTabSrc = 0;\n  }\n\n  //#endregion Apply APIs\n\n\n  //#region Clear APIs\n\n\n  onClearAll() {\n    this.clearStopFilter();\n    this.clearSiteFilter();\n    this.clearTaskFilter();\n    //this.clearDriverFilter();\n    this.space.showDataLayerRoute = true;\n    this.space.showDataLayerSites = true;\n    this.space.showDataLayerTasks = true;\n    //this.space.showDataLayerDrivers = true;\n  }\n\n  onClearFilter() {\n    switch (this.idxTab) {\n        //@formatter:off\n      case 1:\n        this.clearStopFilter();\n        break;\n      case 2:\n        this.clearSiteFilter();\n        break;\n      case 3:\n        this.clearTaskFilter();\n        break;\n        // case 4: this.clearDriverFilter(); break;\n        //@formatter:on\n    }\n  }\n\n  private clearStopFilter() {\n    this.stopFilterName = \"\";\n    this.stopFilterAddress = \"\";\n    this.stopFilterActiveOnly = false;\n    this.stopFilterDistance = 0;\n    this.stopFilterHash = \"\";\n    this.stopFilterHashAll = false;\n    this.stopFilterColor = \"\";\n    this.applyStopFilter();\n  }\n\n  private clearSiteFilter() {\n    this.siteFilterName = \"\";\n    this.siteFilterAddress = \"\";\n    this.siteFilterDistance = 0;\n    this.siteFilterHash = \"\";\n    this.siteFilterHashAll = false;\n    this.siteFilterColor = \"\";\n    this.siteFilterCheckMin = -100;\n    this.siteFilterCheckMax = 0;\n    this.siteFilterCheckWithin = true;\n    this.applySiteFilter();\n  }\n\n  private clearTaskFilter() {\n    this.taskFilterName = \"\";\n    this.taskFilterAddress = \"\";\n    this.taskFilterDistance = 0;\n    this.taskFilterHash = \"\";\n    this.taskFilterHashAll = false;\n    this.taskFilterColor = \"\";\n    this.applyTaskFilter();\n  }\n\n  // private clearDriverFilter() {\n  //   this.driverFilterName = \"\";\n  //   this.applyDriverFilter();\n  // }\n\n\n  //#endregion Clear APIs\n\n\n  //#region Distance APIs\n\n  private displayDistance(dispDist: number, anyText: string) {\n    let text: string;\n    if (dispDist === 0 || dispDist === 100) {\n      text = anyText;\n    } else {\n      let unitText = this.isKilometers ? 'km' : 'mi';\n      text = `${dispDist} ${unitText}`;\n    }\n    return text;\n  }\n\n  onDecrement() {\n    this.dist = this.dist > 0 ? (this.dist - 1) : 0;\n  }\n\n  onIncrement() {\n    this.dist = this.dist < 100 ? (this.dist + 1) : 100;\n  }\n\n  //#endregion Distance APIs\n\n\n  //region Exit\n\n  onEscape(event: Event) {\n    event.stopPropagation();\n    this.onCancelClick();\n  }\n\n  onSaveClick() {\n    this.space.showDataLayers = false;\n  }\n\n  onCancelClick() {\n    this.space.showDataLayers = false;\n  }\n\n  onDone(event: Event) {\n    event.stopPropagation();\n    this.onSaveClick();\n  }\n\n  //endregion Exit\n\n\n  onActiveStopsSwitch(event: Event) {\n    event.stopPropagation();\n    this.stopFilterActiveOnly = !this.stopFilterActiveOnly;\n    this.recomputeStops = Math.random();\n  }\n\n  onWithinDayRange(event: Event) {\n    event.stopPropagation();\n    this.siteFilterCheckWithin = !this.siteFilterCheckWithin;\n    this.recomputeSites = Math.random();\n  }\n\n\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerLayers.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerLayers.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerLayers.vue?vue&type=style&index=0&id=2415768f&prod&lang=css&\"","import { render, staticRenderFns } from \"./RwPlannerLayers.vue?vue&type=template&id=2415768f&\"\nimport script from \"./RwPlannerLayers.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPlannerLayers.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwPlannerLayers.vue?vue&type=style&index=0&id=2415768f&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemGroup } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"max-width\":\"600px\",\"persistent\":\"\",\"scrollable\":\"\",\"content-class\":\"dialog-with-scroll\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.onEscape.apply(null, arguments)}},model:{value:(_vm.globals.showClusterPicker),callback:function ($$v) {_vm.$set(_vm.globals, \"showClusterPicker\", $$v)},expression:\"globals.showClusterPicker\"}},[_c(VCard,{staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},attrs:{\"height\":\"100\"}},[_c(VToolbar,{attrs:{\"dense\":\"\",\"color\":_vm.globals.backColorBar}},[_c(VToolbarTitle,[_vm._v(\"Cluster Picker\")]),_c(VSpacer)],1),_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme,staticStyle:{\"height\":\"calc(100% - 102px)\",\"width\":\"100%\",\"overflow-y\":\"auto\"}},[_c(VList,{attrs:{\"flat\":\"\"}},[_c(VListItemGroup,{attrs:{\"color\":\"primary\"},model:{value:(_vm.idxSubPin),callback:function ($$v) {_vm.idxSubPin=$$v},expression:\"idxSubPin\"}},_vm._l((_vm.clusterPin.clusteredPins),function(subPin,i){return _c(VListItem,{key:i,staticClass:\"px-3 py-0\",on:{\"click\":function($event){return _vm.onSubPinPick(subPin)}}},[_c(VListItemIcon,[_c(VAvatar,{attrs:{\"size\":\"48\"}},[_c(VImg,{attrs:{\"width\":\"48\",\"height\":\"48\",\"contain\":\"\",\"src\":subPin.dataUrl ? subPin.dataUrl : ''}})],1)],1),_c(VListItemContent,[_c(VListItemTitle,{staticClass:\"text-left\",domProps:{\"textContent\":_vm._s(subPin.title)}})],1)],1)}),1)],1)],1),_c(VDivider),_c(VCardActions,{class:_vm.backColor},[_c(VSpacer),_c(VBtn,{attrs:{\"xs6\":\"\",\"text\":\"\"},on:{\"click\":_vm.onCancel}},[_vm._v(\" Cancel \")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport {RwPin} from \"@/app/dem/RwPin\";\n\n\n@Component\nexport default class RwClusterPicker extends Vue {\n\n  //#region Props\n\n  idxSubPin: number = -1;\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get clusterPin(): RwPin {\n    const self = this;\n    //console.warn(\"get clusterPin\", this.globals.selectedClusterPin.clusteredPins.length);\n\n    let cluster = this.globals.selectedClusterPin;\n    if (cluster && cluster.clusteredPins && cluster.clusteredPins.length > 0) {\n      let idx = cluster.clusteredPins.findIndex(p => self.space.isSelected(p))\n      if (idx >= 0) {\n        this.idxSubPin = idx;\n      }\n    }\n\n    return this.globals.selectedClusterPin;\n  }\n\n  get backColor() {\n    return this.globals.isDarkMode ? \"rwBackDark\" : \"rwBackLight\";\n  }\n\n  get loading(): boolean {\n    return this.globals.isLoading;\n  }\n\n  get isDarkMode(): boolean {\n    return this.globals.isDarkMode;\n  }\n\n\n  //#endregion Props\n\n\n  //#region User Events\n\n\n  onEscape(event: Event) {\n    event.stopPropagation();\n    this.close();\n  }\n\n\n  onSubPinPick(subPin: RwPin) {\n    //console.log(\"onStopPick name, idxStop\", subPin ? subPin.title : \"no pin\", this.idxSubPin);\n    this.close(subPin);\n  }\n\n  onCancel() {\n    this.close();\n  }\n\n\n  close(pick?: RwPin) {\n    if (pick) {\n      this.$emit(\"onClusterPick\", pick);\n    }\n    this.globals.showClusterPicker = false;\n  }\n\n\n  // dataUrl(pin:RwPin){\n  //   // console.log(\"RwClusterPicker.dataUrl pin.title, pin.seq\", pin.title, pin.seq)\n  //   // if(pin.stop) {\n  //   //   let stop = pin.stop;\n  //   //   console.log(\"RwClusterPicker.dataUrl stop.name, stop.seq\", stop.name, stop.seq)\n  //   // }\n  //   //pin.invalidatePinImage();\n  //   let url = pin.dataUrl;\n  //   //console.log(\"RwClusterPicker.dataUrl url\", url)\n  //   return url && url.length > 0 ? url : \"\";\n  // }\n\n\n  //#endregion UI Nav\n\n\n  // getStopUrl(pin:RwPin){\n  //   return RwImgUtils.calcPinUrl({ typ: RwPinTypes.Stop });\n  // }\n\n\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwClusterPicker.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwClusterPicker.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwClusterPicker.vue?vue&type=style&index=0&id=275a8560&prod&scoped=true&lang=scss&\"","import { render, staticRenderFns } from \"./RwClusterPicker.vue?vue&type=template&id=275a8560&scoped=true&\"\nimport script from \"./RwClusterPicker.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwClusterPicker.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwClusterPicker.vue?vue&type=style&index=0&id=275a8560&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"275a8560\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"max-width\":\"480px\",\"overlay-opacity\":\"0.65\",\"overlay-color\":_vm.globals.isDarkMode ? '#000' : '#000'},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.onEscClick.apply(null, arguments)}},model:{value:(_vm.space.showMapOptions),callback:function ($$v) {_vm.$set(_vm.space, \"showMapOptions\", $$v)},expression:\"space.showMapOptions\"}},[_c(VCard,{staticClass:\"dialog-card mx-auto\"},[_c(VCardTitle,{staticStyle:{\"text-align\":\"center\"}},[_c('span',{staticClass:\"headline\"},[_vm._v(\"Map Options\")])]),_c(VCardText,{staticClass:\"dialog-content pb-0\",class:_vm.globals.theme},[_c(VContainer,[_c(VRow,{staticStyle:{\"text-align\":\"left\"},attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\",\"align\":\"center\"}},[_c(VCol,[_c('span',[_vm._v(\"Map Style\")])]),_c(VSpacer),_c(VCol,[_c(VSelect,{attrs:{\"items\":_vm.mapLayerStyles,\"required\":\"\",\"dense\":\"\"},model:{value:(_vm.mapLayerSelected),callback:function ($$v) {_vm.mapLayerSelected=$$v},expression:\"mapLayerSelected\"}})],1)],1),_c(VRow,{attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\",\"align\":\"center\"}},[_c('span',{staticClass:\"option-title\"},[_vm._v(\"Show Traffic Flow\")]),_c(VSwitch,{attrs:{\"dense\":\"\"},model:{value:(_vm.showMapTraffic),callback:function ($$v) {_vm.showMapTraffic=$$v},expression:\"showMapTraffic\"}})],1)],1)],1),_c(VCardActions,[_c(VSpacer),_c(VBtn,{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onEnterClick}},[_vm._v(\"Done\")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlan, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\"\n\n\n@Component\nexport default class RwPlannerMapOptions extends Vue {\n\n  mapLayerStyles = [\"Street View\", \"Satellite View\"];\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlan\n  };\n\n\n  get showMapTraffic(): boolean {\n    return this.space.mapShowTraffic;\n  }\n\n  set showMapTraffic(val: boolean) {\n    //console.log(\"PlanMapOptions mapShowTraffic\", val)\n    this.space.mapShowTraffic = val;\n  }\n\n\n  get showMapIncidents(): boolean {\n    return this.space.mapShowIncidents;\n  }\n\n  set showMapIncidents(val: boolean) {\n    //console.log(\"PlanMapOptions mapShowTraffic\", val)\n    this.space.mapShowIncidents = val;\n  }\n\n  get mapLayerSelected(): string {\n    return this.space.mapShowSatellite ? \"Satellite View\" : \"Street View\";\n  }\n\n  set mapLayerSelected(val: string) {\n    this.space.mapShowSatellite = val == \"Satellite View\";\n  }\n\n\n  onEnterClick(event: Event) {\n    event.stopPropagation();\n    this.onSaveClick();\n  }\n\n  onEscClick(event: Event) {\n    event.stopPropagation();\n    this.onCancelClick();\n  }\n\n  onSaveClick() {\n    this.space.showMapOptions = false;\n  }\n\n  onCancelClick() {\n    this.space.showMapOptions = false;\n  }\n\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerMapOptions.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerMapOptions.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerMapOptions.vue?vue&type=style&index=0&id=5582a4e6&prod&lang=css&\"","import { render, staticRenderFns } from \"./RwPlannerMapOptions.vue?vue&type=template&id=5582a4e6&\"\nimport script from \"./RwPlannerMapOptions.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPlannerMapOptions.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwPlannerMapOptions.vue?vue&type=style&index=0&id=5582a4e6&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemGroup } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"max-width\":\"600px\",\"persistent\":\"\",\"scrollable\":\"\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\",\"content-class\":\"dialog-with-scroll\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.onEscape.apply(null, arguments)}},model:{value:(_vm.globals.m_showRoutePicker),callback:function ($$v) {_vm.$set(_vm.globals, \"m_showRoutePicker\", $$v)},expression:\"globals.m_showRoutePicker\"}},[_c(VCard,[_c(VCardTitle,{class:_vm.globals.backColorBar},[_vm._v(\" \"+_vm._s(_vm.title)+\" \"),_c(VSpacer)],1),_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme},[_c(VTabsItems,{attrs:{\"grow\":\"\",\"solo-inverted\":\"\"},model:{value:(_vm.idxTab),callback:function ($$v) {_vm.idxTab=$$v},expression:\"idxTab\"}},[_c(VTabItem,{key:\"0\"},[_c(VContainer,{staticClass:\"py-0\",staticStyle:{\"height\":\"calc(100vh - 225px)\"},attrs:{\"fill-height\":\"\"}},[_c(VRow,{attrs:{\"align\":\"center\"}},[_c(VCol,[_c(VRow,{staticClass:\"ma-4\"},[_c(VBtn,{staticClass:\"text-capitalize px-8\",attrs:{\"x-large\":\"\",\"block\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.onCopyStops}},[_c(VIcon,{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-content-copy\")]),_vm._v(\" Copy stops to another route \")],1)],1),_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\"}},[_c(VBtn,{staticClass:\"text-capitalize\",attrs:{\"x-large\":\"\",\"color\":\"primary\",\"block\":\"\"},on:{\"click\":_vm.onMoveStops}},[_c(VIcon,{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-arrow-right\")]),_vm._v(\" Move stops to another route \")],1)],1),(_vm.globals.isDisp)?_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\"}},[_c(VBtn,{staticClass:\"text-capitalize\",attrs:{\"x-large\":\"\",\"color\":\"primary\",\"block\":\"\"},on:{\"click\":_vm.onCopyToTasks}},[_c(VIcon,{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-content-copy\")]),_vm._v(\" Copy to tasks \")],1)],1):_vm._e(),(_vm.globals.isDisp)?_c(VRow,{staticClass:\"ma-4\",attrs:{\"align\":\"center\"}},[_c(VBtn,{staticClass:\"text-capitalize\",attrs:{\"x-large\":\"\",\"color\":\"primary\",\"block\":\"\"},on:{\"click\":_vm.onMoveToTasks}},[_c(VIcon,{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-arrow-right\")]),_vm._v(\" Move to tasks \")],1)],1):_vm._e()],1)],1)],1)],1),_c(VTabItem,{key:\"1\",staticStyle:{\"height\":\"100%\"}},[_c(VList,{staticClass:\"py-0\",attrs:{\"flat\":\"\"}},[_c(VListItemGroup,{attrs:{\"color\":\"primary\"},model:{value:(_vm.idxRoute),callback:function ($$v) {_vm.idxRoute=$$v},expression:\"idxRoute\"}},[_c(VTextField,{ref:\"search\",attrs:{\"prepend-inner-icon\":\"search\",\"placeholder\":\"Search\"},model:{value:(_vm.searchFilter),callback:function ($$v) {_vm.searchFilter=$$v},expression:\"searchFilter\"}}),_c(VListItem,{staticClass:\"px-3 py-0\",on:{\"click\":_vm.newRoute}},[_c(VListItemIcon,[_c(VIcon,{staticStyle:{\"padding\":\"12px\"}},[_vm._v(\"mdi-plus-thick\")])],1),_c(VListItemContent,[_c(VListItemTitle,{staticClass:\"text-left\"},[_vm._v(\"New Route\")])],1)],1),_vm._l((_vm.targetRoutes),function(route,i){return _c(VListItem,{key:i,staticClass:\"px-3 py-0\",on:{\"click\":function($event){return _vm.onRoutePick(route)}}},[_c(VListItemIcon,[_c(VAvatar,{attrs:{\"size\":\"48\"}},[_c(VImg,{attrs:{\"src\":route.routeIcon}})],1)],1),_c(VListItemContent,[_c(VListItemTitle,{staticClass:\"text-left\",domProps:{\"textContent\":_vm._s(route.name)}})],1)],1)})],2)],1)],1)],1)],1),_c(VCardActions,[(_vm.idxTab !== 0)?_c(VBtn,{attrs:{\"xs6\":\"\",\"text\":\"\"},on:{\"click\":_vm.onBackClick}},[_vm._v(\" Back \")]):_vm._e(),_c(VSpacer),_c(VBtn,{attrs:{\"xs6\":\"\",\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.onEscape}},[_vm._v(\" Cancel \")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Prop, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport {RwRoute, RwRoutePick} from \"@/app/dem/RwRoute\";\nimport {RwLog} from \"@/app/dal/RwLog\";\n\n\n@Component\nexport default class RwRoutePicker extends Vue {\n  @Prop(Number) readonly initTab: number | undefined;\n  @Prop(String) readonly initSrcId: string;\n\n\n  //#region Props\n\n  idxTab = 0;\n  idxRoute = -1;\n  isMoveStopOp = false;\n  searchFilter = \"\"\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get title(): string {\n    let title = \"New Route\";\n    switch (this.idxTab) {\n        //@formatter:off\n      case 0:\n        title = 'Copy Stops';\n        break;\n      case 1:\n        title = `Pick Target Route`;\n        break;\n        //@formatter:on\n    }\n    return title;\n  }\n\n  get targetRoutes(): RwRoute[] {\n    let routes: RwRoute[] = [];\n    let srcId = this.initSrcId;\n    routes = this.globals.routes;\n    if (srcId && srcId.length > 0) {\n      routes = routes.filter(r => r.routeId != srcId);\n      routes = routes.sort((r1, r2) => r2.startTime.getTime() > r1.startTime.getTime() ? -1 : 1);\n    } else {\n      routes = this.globals.routes;\n    }\n\n    if (this.searchFilter) {\n      const srch = this.searchFilter.toLowerCase().trim();\n      routes = routes.filter(rt => rt.name?.toLowerCase()?.indexOf(srch) !== -1);\n    }\n\n    return routes;\n  }\n\n  //#endregion\n\n\n  //#region Navigation\n\n  onCopyStops() {\n    this.isMoveStopOp = false;\n    this.idxTab = 1;\n  }\n\n  onMoveStops() {\n    this.isMoveStopOp = true;\n    this.idxTab = 1;\n  }\n\n  onBackClick() {\n    //console.log(\"onBackClick\");\n    this.idxTab = 0;\n  }\n\n  onEscape(event: Event) {\n    event.stopPropagation();\n    this.close();\n  }\n\n  //#endregion Navigation\n\n\n  onRoutePick(route: RwRoute, isNew: boolean = false) {\n    //console.log(\"onRoutePick pick\", route.name);\n    //this.openRoute(route);\n    let pick = new RwRoutePick();\n    pick.isMoveOp = this.isMoveStopOp;\n    pick.tarRouteId = route.routeId;\n    pick.isNew = isNew;\n    this.$emit(\"onRoutePick\", pick);\n    this.close();\n  }\n\n\n  close() {\n    this.globals.m_showRoutePicker = false;\n  }\n\n  mounted() {\n    //console.log(\"mounted initSrcId\", this.initSrcId, this.globals.m_routePickerSrcId);\n    if (!!this.initTab || this.initTab >= 0) {\n      this.idxTab = this.initTab;\n    }\n  }\n\n  newRoute() {\n    const SOURCE = \"RwRoutePicker.newRoute\";\n    let route = RwRoute.blankRoute();\n    this.globals.addRouteDB(route, [SOURCE], false)\n        .then(routeNew => {\n          this.globals.addRoute(route);\n          this.onRoutePick(routeNew, true);\n        })\n        .catch(err => {\n          let errDesc = err && err.description ? err.description : \"no description\";\n          if (err && (err.status === 504 || err.status === 403)) {\n            RwLog.warn(SOURCE, `Network error: ${JSON.stringify(err)}`);\n          } else {\n            this.globals.showSnack(`Route Creation Failed: ${errDesc}`, \"error\");\n            RwLog.error(SOURCE, `Unhandled: ${JSON.stringify(err)}`);\n          }\n        });\n  }\n\n  onCopyToTasks() {\n    this.$emit(\"onTasks\", false);\n    this.close();\n  }\n\n  onMoveToTasks() {\n    this.$emit(\"onTasks\", true);\n    this.close();\n  }\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRoutePicker.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRoutePicker.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwRoutePicker.vue?vue&type=template&id=3d6f0144&\"\nimport script from \"./RwRoutePicker.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwRoutePicker.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"content-class\":\"dialog-with-scroll\",\"max-width\":\"480px\",\"overlay-opacity\":\"0.65\",\"overlay-color\":_vm.globals.isDarkMode ? '#000' : '#000'},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.onEscape.apply(null, arguments)}},model:{value:(_vm.space.showSearchOptions),callback:function ($$v) {_vm.$set(_vm.space, \"showSearchOptions\", $$v)},expression:\"space.showSearchOptions\"}},[_c(VCard,{staticClass:\"dialog-card mx-auto\",staticStyle:{\"overflow-y\":\"auto\",\"height\":\"calc(100% - 48px)\"}},[_c(VCardTitle,{staticStyle:{\"text-align\":\"center\"}},[_c('span',{staticClass:\"headline\"},[_vm._v(\"Search Options\")])]),_c(VCardText,{staticClass:\"dialog-content pb-0\",class:_vm.globals.theme,staticStyle:{\"overflow-y\":\"auto\"}},[_c(VContainer,[_c(VRow,{attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\",\"align\":\"center\"}},[_c('span',[_vm._v(\"Search Web\")]),_c(VSwitch,{attrs:{\"dense\":\"\"},model:{value:(_vm.searchWeb),callback:function ($$v) {_vm.searchWeb=$$v},expression:\"searchWeb\"}})],1),_c(VRow,{attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\",\"align\":\"center\"}},[_c('span',[_vm._v(\"Search Favorites\")]),_c(VSwitch,{attrs:{\"dense\":\"\"},model:{value:(_vm.searchSites),callback:function ($$v) {_vm.searchSites=$$v},expression:\"searchSites\"}})],1),_c(VRow,{attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\",\"align\":\"center\"}},[_c('span',[_vm._v(\"Search Tasks\")]),_c(VSwitch,{attrs:{\"dense\":\"\"},model:{value:(_vm.searchTasks),callback:function ($$v) {_vm.searchTasks=$$v},expression:\"searchTasks\"}})],1),_c(VDivider),_c(VRow,{attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\",\"align\":\"center\"}},[_c('span',[_vm._v(\"Set Sequence\")]),_c(VSwitch,{attrs:{\"dense\":\"\"},model:{value:(_vm.setSeq),callback:function ($$v) {_vm.setSeq=$$v},expression:\"setSeq\"}})],1),_c(VRow,{attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\",\"align\":\"center\"}},[_c('span',[_vm._v(\"Edit New Location\")]),_c(VSwitch,{attrs:{\"dense\":\"\"},model:{value:(_vm.editNew),callback:function ($$v) {_vm.editNew=$$v},expression:\"editNew\"}})],1)],1)],1),_c(VCardActions,[_c(VSpacer),_c(VBtn,{attrs:{\"xs6\":\"\",\"text\":\"\"},on:{\"click\":function($event){return _vm.close()}}},[_vm._v(\" Cancel \")]),_c(VBtn,{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onCommit}},[_vm._v(\"Save\")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlan, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\"\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\n\n\n@Component\nexport default class RwSearchOptions extends Vue {\n\n  searchWeb = RwPrefUtils.searchWeb;\n  searchSites = RwPrefUtils.searchSites;\n  searchTasks = RwPrefUtils.searchTasks;\n  setSeq = RwPrefUtils.searchSetSeq;\n  editNew = RwPrefUtils.editAfterAdd;\n\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlan\n  };\n\n\n  onCommit(event: Event) {\n    event.stopPropagation();\n\n    RwPrefUtils.searchWeb = this.searchWeb;\n    RwPrefUtils.searchSites = this.searchSites;\n    RwPrefUtils.searchTasks = this.searchTasks;\n    RwPrefUtils.searchSetSeq = this.setSeq;\n    RwPrefUtils.editAfterAdd = this.editNew;\n\n    this.close();\n  }\n\n  onEscape(event: Event) {\n    event.stopPropagation();\n    this.close();\n  }\n\n  onCancelClick() {\n    this.close();\n  }\n\n  close() {\n    this.space.showSearchOptions = false;\n  }\n\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwSearchOptions.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwSearchOptions.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwSearchOptions.vue?vue&type=template&id=cc33d89a&scoped=true&\"\nimport script from \"./RwSearchOptions.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwSearchOptions.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"cc33d89a\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemGroup } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{staticStyle:{\"overflow-x\":\"hidden\"},attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"max-width\":\"600px\",\"content-class\":\"dialog-with-scroll\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.onEnter.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.onEscape.apply(null, arguments)}]},model:{value:(_vm.space.showRouteOrder),callback:function ($$v) {_vm.$set(_vm.space, \"showRouteOrder\", $$v)},expression:\"space.showRouteOrder\"}},[_c(VCard,{staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},attrs:{\"height\":\"100\"}},[_c(VToolbar,{attrs:{\"dense\":\"\"}},[_c(VToolbarTitle,[_vm._v(\" \"+_vm._s(_vm.dialogTitle))]),_c(VSpacer),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"disabled\":_vm.isManual,\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.onManOrder.apply(null, arguments)}}},on),[_c(VIcon,[_vm._v(\"mdi-drag-horizontal\")])],1)]}}])},[_c('span',[_vm._v(\"Set Order Manually\")])])],1),_c(VCardText,{class:_vm.globals.theme,staticStyle:{\"height\":\"calc(100% - 102px)\",\"width\":\"100%\",\"overflow-y\":\"auto\"}},[(_vm.updateStartPref!=0 && _vm.isStartOutOfDate && _vm.space.activeRoute.isHardStart)?_c(VRow,{staticClass:\"mt-2\"},[_c(VCol,{staticClass:\"text-center; mx-6\"},[(_vm.updateStartPref==1)?_c('span',{staticStyle:{\"font-size\":\"small\",\"color\":\"orangered\"}},[_vm._v(\" The Route Start (\"+_vm._s(_vm.routeStartText)+\") is more than 24 hours out of date. The date will be changed to \"),_c('b',[_vm._v(\"today\")]),_vm._v(\", per your preferences. \")]):_vm._e(),(_vm.updateStartPref==2)?_c('span',{staticStyle:{\"font-size\":\"small\",\"color\":\"orangered\"}},[_vm._v(\" The Route Start (\"+_vm._s(_vm.routeStartText)+\") is more than 24 hours out of date. The date will be changed to \"),_c('b',[_vm._v(\"tomorrow\")]),_vm._v(\", per your preferences. \")]):_vm._e(),(_vm.updateStartPref==3)?_c('span',{staticStyle:{\"font-size\":\"small\",\"color\":\"orangered\"}},[_vm._v(\" The Route Start (\"+_vm._s(_vm.routeStartText)+\") is more than 24 hours out of date. The date will be changed to \"),_c('b',[_vm._v(\"the time of Optimization\")]),_vm._v(\", per your preferences. \")]):_vm._e(),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({attrs:{\"color\":\"grey\",\"size\":\"small\"}},on),[_vm._v(\"mdi-help-circle-outline\")])]}}],null,false,3113564318)},[_c('span',{staticStyle:{\"font-size\":\"small\",\"color\":\"grey\"}},[_vm._v(\" Change this behavior at any time from the settings tab. \")])])],1)],1):_vm._e(),_c(VList,{attrs:{\"flat\":\"\"}},[_c(VListItemGroup,{attrs:{\"color\":\"primary\"},model:{value:(_vm.idxStop),callback:function ($$v) {_vm.idxStop=$$v},expression:\"idxStop\"}},[_c('draggable',{staticClass:\"v-list-item__content\",attrs:{\"handle\":\".handle\",\"force-fallback\":true,\"fallback-class\":`${_vm.globals.isMobileView ? 'handle' : ''}`,\"move\":_vm.checkMove},on:{\"change\":_vm.onDragChange,\"start\":_vm.onStart,\"end\":_vm.onEnd},model:{value:(_vm.stopPins),callback:function ($$v) {_vm.stopPins=$$v},expression:\"stopPins\"}},_vm._l((_vm.stopPins),function(stopPin,index){return _c(VListItem,{key:index,class:`${_vm.globals.isMobileView ? 'handle' : ''}`,staticStyle:{\"width\":\"100%\"},attrs:{\"index\":index,\"pin\":stopPin},on:{\"click\":() => { if(!_vm.globals.isMobileView) { _vm.onStopPick(stopPin); } }}},[_c(VListItemAvatar,[_c(VImg,{attrs:{\"height\":\"32\",\"width\":\"32\",\"contain\":\"\",\"src\":stopPin ? stopPin.dataUrl ? stopPin.dataUrl : '' : ''}})],1),_c(VRow,{staticStyle:{\"max-width\":\"100%\",\"overflow\":\"hidden\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [_c(VListItemTitle,_vm._g({staticClass:\"text-left\"},on),[_vm._v(_vm._s(stopPin.title))])]}}],null,true)},[_c('span',[_vm._v(_vm._s(stopPin.title))])]),_c(VTooltip,{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [_c(VListItemSubtitle,_vm._g({staticClass:\"text-left\"},on),[_vm._v(_vm._s(stopPin.address))])]}}],null,true)},[_c('span',[_vm._v(_vm._s(stopPin.address))])])],1),_c(VListItemIcon,[_c(VIcon,{class:`${_vm.globals.isMobileView ? '' :'handle'}`},[_vm._v(\"mdi-drag-horizontal\")])],1)],1)}),1)],1)],1)],1),_c(VDivider),_c(VCardActions,[_c(VSpacer),_c(VBtn,{attrs:{\"xs6\":\"\",\"text\":\"\"},on:{\"click\":_vm.onCancel}},[_vm._v(\" Cancel \")]),_c(VBtn,{attrs:{\"xs6\":\"\",\"color\":_vm.isManual ? 'normal' : 'primary',\"text\":\"\"},on:{\"click\":_vm.onOptimize}},[_vm._v(\" Optimize \")]),(_vm.isManual)?_c(VBtn,{attrs:{\"xs6\":\"\",\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onCalculate}},[_vm._v(\" Calculate \")]):_vm._e()],1)],1)],1),_c(VDialog,{attrs:{\"max-width\":\"290\"},model:{value:(_vm.showConfirmPopup),callback:function ($$v) {_vm.showConfirmPopup=$$v},expression:\"showConfirmPopup\"}},[_c(VCard,[_c(VCardTitle,{staticClass:\"headline justify-center\"},[_vm._v(\"Confirm Optimize\")]),_c(VCardText,{class:_vm.globals.theme},[_vm._v(\" This route is currently manually ordered. Do you want to continue with optimize? \")]),_c(VCardActions,{staticClass:\"justify-center\"},[_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.showConfirmPopup = false}}},[_vm._v(\" Cancel \")]),_c(VBtn,{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onOptimizeConfirmed}},[_vm._v(\" Optimize \")])],1)],1)],1),_c(VDialog,{attrs:{\"persistent\":\"\",\"max-width\":\"450\"},model:{value:(_vm.showOptBusy),callback:function ($$v) {_vm.showOptBusy=$$v},expression:\"showOptBusy\"}},[_c(VCard,[_c(VCardTitle,[_vm._v(\"Optimizing Route\")]),_c(VCardText,{staticStyle:{\"overflow\":\"hidden\"}},[_c(VProgressLinear,{attrs:{\"value\":_vm.optBusyProgress,\"color\":_vm.constants.DefaultStopColor}}),_c('span',{staticClass:\"text-left d-block mb-5\"},[_vm._v(\"May take up to 3 minutes...\")]),_c('img',{attrs:{\"id\":\"optimizing-spinner\",\"alt\":\"Optimizing\",\"src\":\"/images/icons/TruckSpinner.png\"}})],1)],1)],1),_c(VDialog,{attrs:{\"persistent\":\"\",\"max-width\":\"600\",\"retain-focus\":false},model:{value:(_vm.showUnassignedDriver),callback:function ($$v) {_vm.showUnassignedDriver=$$v},expression:\"showUnassignedDriver\"}},[_c(VCard,[_c(VToolbar,[_c(VToolbarTitle,[_vm._v(\"Select Driver\")])],1),_c(VCardText,{staticClass:\"py-8\"},[_vm._v(\" A driver must be assigned before ordering a GPS based start point route. \")]),_c(VCardActions,[_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":_vm.close}},[_vm._v(\"Cancel\")]),_c(VSpacer),_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":_vm.setDefaultStartPoint}},[_vm._v(\"Use Default Start Point\")]),_c(VBtn,{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){return _vm.onContinue()}}},[_vm._v(\"Continue\")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport {RwConstants} from \"@/app/RwConstants\";\nimport {RwPin} from \"@/app/dem/RwPin\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport draggable from 'vuedraggable';\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport {RwRoute, RwRouteAssignCodes} from \"@/app/dem/RwRoute\";\nimport {RwStop} from \"@/app/dem/RwStop\";\nimport moment from \"moment\";\n\n\n@Component({components: {draggable}})\nexport default class RwRouteOrder extends Vue {\n\n  //#region Props\n\n  showConfirmPopup = false;\n  showOptBusy = false;\n  idxStop = -1;\n  dragging: false;\n  selectId = \"\";\n  m_pinsSorted: RwPin[] = [];\n  optBusyProgress = 0;\n  optBusyProgressInterval = null;\n  showUnassignedDriver = false;\n\n  m_startDate = null;\n  m_finishDate = null;\n  skipWarn = false;\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get constants(): RwConstants {\n    return RwConstants;\n  }\n\n  get dialogTitle(): string {\n    let title = this.space.activeRoute ? `Order Stops: ${this.space.activeRoute.name}` : \"\";\n    return title;\n  }\n\n  get routeStartText(): string {\n    let name = this.formatDateTime(this.space.activeRoute.startTime);\n    return name;\n  }\n\n  get stopPins(): RwPin[] {\n    //console.warn(\"GET RwRouteOrder.stopPins\");\n    if (!this.m_pinsSorted || this.m_pinsSorted.length === 0) {\n      let pins = this.space.stopPins.filter(p => p.isActive);\n      if (pins) {\n\n        pins.sort((p1, p2) => {\n          if (p1.isActive === p2.isActive) {\n            return p1.seq - p2.seq\n          } else {\n            if (!p1.isActive && !p2.isActive) {\n              return 1;\n            } else {\n              return (p1.isActive) ? -1 : 1;\n            }\n          }\n        });\n\n      }\n      this.m_pinsSorted = pins;\n      //console.log(\"GET stopPins lazy init; default sort\");\n    } else {\n      //console.log(\"GET stopPins return cached\");\n    }\n    return this.m_pinsSorted;\n  }\n\n  set stopPins(val: RwPin[]) {\n    let clone = [...val];\n    this.m_pinsSorted = clone;\n  }\n\n  get isManual() {\n    let isManual = false;\n    let route = this.space.activeRoute;\n    if (route && route.isManOrder) {\n      isManual = true;\n    }\n    return isManual;\n  }\n\n  get todaysDate(): Date {\n    let date = new Date();\n    // console.warn('todays date is: ', date );\n    return date;\n  }\n\n  get tomorrowsDate(): Date {\n    let date = new Date();\n    date.setDate(date.getDate() + 1);\n    // console.warn('tomorrows date is: ', date );\n    return date;\n  }\n\n\n  get isStartOutOfDate(): Boolean {\n    var isOutOfDate = false;\n    let route = this.space.activeRoute;\n    if (route != null && route.startTime != null) {\n      let todayTime = this.todaysDate.getTime();\n      let startTime = this.space.activeRoute.startTime.getTime();\n      if (todayTime - startTime > 86400000) {\n        isOutOfDate = true;\n      }\n    }\n    return isOutOfDate;\n  }\n\n  // get isStartOutOfDate(): Boolean{\n  //   let startTime = this.space.activeRoute.startTime.getTime();\n  //   let todayTime = this.todaysDate.getTime();\n  //   if (todayTime-startTime>86400000){\n  //     // console.warn(\"is Start Out of Date = true\");\n  //     return true;\n  //   }else{\n  //     // console.warn(\"is Start Out of Date = false\");\n  //     return false;\n  //   }\n  // }\n\n  get startDate(): Date {\n    // console.warn('start date is: ', this.m_startDate);\n    return this.m_startDate;\n  }\n\n  set startDate(val: Date) {\n    this.m_startDate = val;\n    let route = this.space.activeRoute;\n    if (route.isHardStop) {\n      //REVIEW: m_finishDate was not being set for HardStop routes: so value was null;\n      this.m_finishDate = route.finishTime;\n    } else {\n      this.m_finishDate = moment(this.startDate).add(RwPrefUtils.routeSpan, \"minutes\").toDate();\n    }\n  }\n\n  get startEpoc(): number {\n    return this.startDate.getTime();\n  }\n\n  get startTimeISO(): string {\n    let timeText = this.momentToTime(moment(this.startDate));\n    //console.log(\"GET startTime\", timeText);\n    // console.warn('start time ISO is: ', timeText);\n    return timeText;\n  }\n\n  set startTimeISO(val: string) {\n    let day = moment(this.startDate).startOf('day');\n    let mins = this.minsFromTime(val);\n    this.startDate = day.add(mins, \"minutes\").toDate();\n    //console.log(\"SET startTimeISO\", val, this.startDate);\n  }\n\n  get startDateISO(): string {\n    let mo = moment(this.startEpoc);\n    let text = mo.format(\"YYYY-MM-DD\");\n    return text;\n  }\n\n  set startDateISO(val: string) {\n    let mo = moment(val, \"YYYY-MM-DD\");\n    this.startDate = mo.toDate();\n  }\n\n  get updateStartPref(): number {\n    let val = RwPrefUtils.updateStartPref;\n    // console.warn(\"updateStartPref got: \", val);\n    return val;\n  }\n\n  formatDateTime(date: Date): string {\n    let nowMoment = moment();\n    let newMoment = moment(date);\n    let isToday = nowMoment.isSame(newMoment, \"day\");\n    let dateText = isToday ? newMoment.format(\"LT\") : newMoment.format(\"L LT\");\n    return dateText;\n  }\n\n  //#endregion Props\n\n  //#region User Events\n\n  onStopPick(stopPin: RwPin) {\n    //console.log(\"onStopPick\", stopPin.title);\n    this.idxStop = this.m_pinsSorted.findIndex(s => s.eid === stopPin.eid);\n  }\n\n\n  onEnter(event: Event) {\n    event.stopPropagation();\n    this.close();\n  }\n\n\n  onEscape(event: Event) {\n    event.stopPropagation();\n    this.close();\n  }\n\n\n  onManOrder() {\n    //console.log(\"onManOrder\");\n    let route = this.space.activeRoute;\n    if (route && !route.isManOrder) {\n      route.isManOrder = true;\n    }\n  }\n\n\n  onCancel() {\n    //console.log(\"onCancel\");\n    this.space.showRouteOrder = false;\n  }\n\n\n  close() {\n    this.space.showRouteOrder = false;\n  }\n\n\n  onDragChange(evt, originalEvent) {\n    //console.log(\"onDragChange\", evt, originalEvent);\n  }\n\n\n  checkMove(evt, originalEvent) {\n    //console.log(\"checkMove\");\n    let route = this.space.activeRoute;\n    if (route && !route.isManOrder) {\n      route.isManOrder = true;\n    }\n  }\n\n\n  onStart(evt, originalEvent) {\n    //console.log(\"onStart\", evt.oldIndex);\n    this.idxStop = evt.oldIndex;\n  }\n\n\n  onEnd(evt, originalEvent) {\n    //console.log(\"onEnd\", evt.newIndex, this.selectId);\n    this.idxStop = evt.newIndex;\n  }\n\n  //#endregion UI Nav\n\n\n  //#region Optimize APIs\n\n  onOptimize() {\n    //console.log(\"onOptimize\");\n    let route = this.space.activeRoute;\n    const stops = route.getActiveStops();\n\n    let gotValidStart = this.gotValidStart(route, stops);\n    if (gotValidStart) {\n\n      if (route.isManOrder) {\n        this.showConfirmPopup = true;\n      } else {\n        this.optimize();\n      }\n    } else {\n      this.globals.showSnack(`Please add more Stops or a Start Point to Optimize your Route`, \"error\");\n    }\n  }\n\n\n  onCalculate() {\n    //console.log(\"onCalculate\");\n    let route = this.space.activeRoute;\n\n    if ((route.firstStopId && route.firstStopId !== \"\") || (route.finalStopId && route.finalStopId !== \"\")) {\n      this.globals.showConfirmDialog(\"Confirm Calculate\", \"Manually ordering this Route will ignore Stop settings, and Calculate the Route in the order shown. Continue?\", \"Yes\", \"Back\")\n          .then(onConfirm => {\n            if (onConfirm) {\n              route.firstStopId = \"\";\n              route.finalStopId = \"\";\n              this.calculate();\n\n              // } else {\n              //\n            }\n          })\n    } else {\n      this.calculate();\n    }\n\n\n  }\n\n  calculate() {\n    let route = this.space.activeRoute;\n    const stops = route.getActiveStops();\n    switch (this.updateStartPref) {\n      case 0:\n        break;\n      case 1:\n        this.updateStartTime(0);\n        break;\n      case 2:\n        this.updateStartTime(1);\n        break;\n      case 3:\n        this.updateStartTime(2);\n        break;\n    }\n\n    let seq = 1;\n    const _stops: RwStop[] = []\n    this.m_pinsSorted.forEach(p => {\n      let stop = p.stop;\n      stop.seq = seq;\n      seq++;\n      _stops.push(stop);\n    });\n\n    let gotValidStart = this.gotValidStart(route, stops);\n    if (gotValidStart) {\n      this.space.onOptimize(_stops)\n          .then(res => this.space.showRouteSummary = true)\n          .catch(err => RwLog.consoleError(\"WTF: onCalculate FAILED\", err.toString()))\n      this.space.showRouteOrder = false;\n    } else {\n      this.globals.showSnack(`Please add more Stops or a Start Point to Optimize your Route`, \"error\");\n    }\n  }\n\n\n  gotValidStart(route: RwRoute, stops: RwStop[]): boolean {\n\n    let isValid = false;\n    let gotCoords = ((route.lat && route.lat != 0) || (route.lng && route.lng != 0))\n    if (gotCoords) {\n      isValid = true;\n    } else {\n      let gotPrefCoords = ((RwPrefUtils.startLat && RwPrefUtils.startLat != 0) || (RwPrefUtils.startLng && RwPrefUtils.startLng != 0))\n      if (gotPrefCoords) {\n        route.lat = RwPrefUtils.startLat;\n        route.lng = RwPrefUtils.startLng;\n        isValid = true;\n      } else {\n        let gotLastCoords = ((RwPrefUtils.lastFixedStartLat && RwPrefUtils.lastFixedStartLat != 0) || (RwPrefUtils.lastFixedStartLng && RwPrefUtils.lastFixedStartLng != 0))\n        if (gotLastCoords) {\n          route.lat = RwPrefUtils.lastFixedStartLat;\n          route.lng = RwPrefUtils.lastFixedStartLng;\n          isValid = true;\n        } else {\n          if (route.stops.length > 1) {\n            let latSum: number = 0;\n            let lngSum: number = 0;\n            stops.forEach(stop => {\n              latSum += stop.lat;\n              lngSum += stop.lng;\n            })\n            route.lat = (latSum / stops.length);\n            route.lng = (lngSum / stops.length);\n            isValid = true;\n          }\n        }\n      }\n    }\n    return isValid;\n  }\n\n\n  onOptimizeConfirmed() {\n    this.globals.activeRoute.isManOrder = false;\n    this.showConfirmPopup = false;\n    this.optimize();\n  }\n\n\n  onContinue() {\n    //console.log(\"RwRouteOrder.onContinue\")\n    this.globals.showAssignPicker(this.globals.activeRoute);\n    this.close()\n  }\n\n\n  optimize() {\n    switch (this.updateStartPref) {\n      case 0:\n        break;\n      case 1:\n        this.updateStartTime(0);\n        break;\n      case 2:\n        this.updateStartTime(1);\n        break;\n      case 3:\n        this.updateStartTime(2);\n        break;\n    }\n    this.showOptBusy = true;\n    this.runOptProgress();\n    this.space.onOptimize()\n        .then(() => {\n          this.optBusyProgress = 100;\n          setTimeout(() => {\n            this.space.showRouteOrder = false;\n            this.space.showRouteSummary = true;\n          }, 1000);\n        })\n        .then(() => this.space.showStopsViolations = this.space.showStopsViolations.filter(id => id != this.globals.activeRoute.routeId))\n        .catch(err => {\n          RwLog.consoleError(\"WTF: onOptimize FAILED\", err.toString());\n        })\n        .finally(() => {\n          clearInterval(this.optBusyProgressInterval);\n          setTimeout(() => {\n            this.showOptBusy = false;\n            this.optBusyProgress = 0;\n          }, 1500);\n        });\n  }\n\n  runOptProgress() {\n\n    const maxStops = 200;\n    const stopsRatio = this.space.activeRoute.stopCountActive / maxStops;\n    const newStopsTime = this.space.activeRoute.stops.reduce((acc, stop) => stop.timeToDrive === 0 ? 2 : acc, 0); // Time added for stops that are not yet optimized\n    const baseTime = 1 + newStopsTime;\n    const stopTime = 120 * stopsRatio; //needs updating after increased limit\n    const countRules = this.stopPins.filter(s => s.hasDrop).length;\n    const countWindows = this.stopPins.filter(s => s.isSked).length;\n    const ruleCount = countRules + countWindows;\n    const ruleTime = ruleCount * Math.pow(120, stopsRatio) * (10 * stopsRatio + 1);\n\n    const expectedTime = Math.min(180, baseTime + stopTime + ruleTime) * 1000; // Get expected time in ms\n    let increment = (100 / expectedTime) * 200; // Get expected increase per ms and multiply it per timeout\n\n    // let expectSeconds = RwTextUtils.round(expectedTime / 1000, 2);\n    // console.log(`runOptProgress \\n\\tExpected:${expectSeconds}, \\n\\tBaseTime:${baseTime}, \\n\\tActiveCount:${this.space.activeRoute.stopCountActive}, \\n\\tStopsRatio:${stopsRatio}, \\n\\tRuleCount:${ruleCount}, \\n\\tRuleTime:${ruleTime}, \\n\\tStopTime:${stopTime}, \\n\\tIncrement:${increment}`);\n\n    this.optBusyProgressInterval = setInterval(() => {\n      this.optBusyProgress += increment;\n      if (increment > 0 && this.optBusyProgress >= 95) increment = 0;\n    }, 200);\n\n  }\n\n  //#endregion Optimize APIs\n\n  mounted() {\n\n    let route = this.globals.activeRoute;\n    if (route && route.driverId) {\n      let isSelfy = route.driverId === this.globals.userId;\n      let gotDrivers = this.globals.drivers.length > 1;\n      let isDynamic = route.isDynLoc;\n      let isPending = route.assignCode === RwRouteAssignCodes.pending;\n      if (isSelfy && isDynamic && isPending && gotDrivers) {\n        this.showUnassignedDriver = true;\n      }\n    }\n\n    this.m_startDate = this.space.activeRoute.startTime;\n    this.startDate = this.space.activeRoute.startTime;\n\n  }\n\n\n  updateStartTime(val: number) {\n    switch (val) {\n        //today's date, same time\n      case 0:\n        let oldStartTime = this.startTimeISO;\n        let newStartDate = moment(this.todaysDate.getTime()).format(\"YYYY-MM-DD\")\n        this.startDateISO = newStartDate;\n        this.startTimeISO = oldStartTime;\n        break;\n        //tomorrow's date, same time\n      case 1:\n        let oldStartTime2 = this.startTimeISO;\n        let newStartDate2 = moment(this.tomorrowsDate.getTime()).format(\"YYYY-MM-DD\")\n        this.startDateISO = newStartDate2;\n        this.startTimeISO = oldStartTime2;\n        break;\n        //set to Dynamic Start\n      case 2:\n        this.space.activeRoute.isHardStart = false;\n        break;\n    }\n    this.space.activeRoute.startTime = this.startDate;\n\n    //REVIEW: SABINA: this value was m_finishDate == null, for HardStop routes\n    this.space.activeRoute.finishTime = this.m_finishDate;\n    // this.space.activeRoute.setFinishDate(\"updateStartTime\", this.m_finishDate);\n\n  }\n\n  setDefaultStartPoint() {\n    const SOURCE = \"RwRouteOrder.setDefaultStartPoint\";\n    const route = Object.assign(Object.create(Object.getPrototypeOf(this.space.activeRoute)), this.space.activeRoute);\n    route.lat = RwPrefUtils.startLat;\n    route.lng = RwPrefUtils.startLng;\n    route.isDynLoc = false;\n\n    this.globals\n        .updateRouteDB(route, false)\n        .then(isCommitted => {\n          if (isCommitted) {\n            this.globals.activeRoute.lat = route.lat;\n            this.globals.activeRoute.lng = route.lng;\n            this.globals.activeRoute.isDynLoc = route.isDynLoc;\n            this.showUnassignedDriver = false;\n          }\n        })\n        .catch(err => RwLog.error(SOURCE, \"Unhandled: \" + err ? err.toString() : \"\"));\n  }\n\n\n  private minsFromTime(val: string): number {\n    let startOfDay = moment().startOf('day');\n    let time = moment(val, 'HH:mm');\n    let mins = time.diff(startOfDay, \"minutes\");\n    return mins\n  }\n\n  private momentToTime(mo: moment.Moment) {\n    let timeText = mo.format(\"HH:mm\");\n    return timeText;\n  }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRouteOrder.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRouteOrder.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRouteOrder.vue?vue&type=style&index=0&id=17aac4c8&prod&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./RwRouteOrder.vue?vue&type=template&id=17aac4c8&scoped=true&\"\nimport script from \"./RwRouteOrder.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwRouteOrder.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwRouteOrder.vue?vue&type=style&index=0&id=17aac4c8&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"17aac4c8\",\n  null\n  \n)\n\nexport default component.exports","import { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VDialog,{attrs:{\"max-width\":\"550\"},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c(VCard,{staticClass:\"pa-5\"},[_c(VCardTitle,{staticClass:\"d-flex justify-space-between\"},[_vm._v(\" Route Summary \"),_c(VBtn,{attrs:{\"dense\":\"\",\"text\":\"\"},on:{\"click\":_vm.close}},[_c(VIcon,[_vm._v(\"close\")])],1)],1),_c(VRow,{staticClass:\"ma-0\"},[_c(VCol,{attrs:{\"cols\":\"4\"}},[_c('h4',{staticClass:\"summary-value\"},[_vm._v(_vm._s(_vm.space.travelTimeText))]),_c('span',{staticClass:\"v-card__subtitle\"},[_vm._v(\"Travel Time\")])]),_c(VCol,{attrs:{\"cols\":\"4\"}},[_c('h4',{staticClass:\"summary-value\"},[_vm._v(_vm._s(_vm.space.totalTimeText))]),_c('span',{staticClass:\"v-card__subtitle\"},[_vm._v(\"Total Time\")])]),_c(VCol,{attrs:{\"cols\":\"4\"}},[_c('h4',{staticClass:\"summary-value\"},[_vm._v(_vm._s(_vm.space.totalDistText))]),_c('span',{staticClass:\"v-card__subtitle\"},[_vm._v(\"Travel Distance\")])])],1),(_vm.showTimeSaved)?_c(VRow,[_c(VCol,[_c(VAlert,{attrs:{\"prominent\":\"\",\"text\":\"\",\"color\":\"primary\",\"type\":\"success\"}},[_vm._v(_vm._s(_vm.TimeSavedText)+\" \")])],1)],1):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Vue} from \"vue-property-decorator\";\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport theGlobals from \"@/app/RwGlobals\";\n\n@Component({})\nexport default class RwRouteSummary extends Vue {\n\n  closeTimeout: any;\n\n  get show() {\n    return this.space.showRouteSummary;\n  }\n\n  set show(val: boolean) {\n    this.space.showRouteSummary = val;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get showTimeSaved() {\n    let actRoute = this.space.activeRoute;\n    return actRoute && actRoute.stopCountActive > 4 && theGlobals.greedyTime != 0 && theGlobals.greedyTime > actRoute.timeDrive;\n  }\n\n  get TimeSavedText() {\n    let timeSavedStr = \"\";\n    let actRoute = this.space.activeRoute;\n    if (this.showTimeSaved) {\n      const greedyTimeSecs = theGlobals.greedyTime;\n      const timeSavedPercent = (Math.round((100 * (greedyTimeSecs - actRoute.timeDrive) / actRoute.timeDrive) * 10) / 10).toFixed(1);\n\n      let minutes = Math.round(((greedyTimeSecs - actRoute.timeDrive) / 60.0));\n      if (minutes < 60) {\n        timeSavedStr = `You saved ${minutes} minutes (${timeSavedPercent}% improvement!)`;\n      } else {\n\n        let hoursStr = (Math.round(minutes / 60.0 * 10) / 10).toFixed(1)\n        let hours = minutes / 60.0;\n        timeSavedStr = `You saved ${hoursStr} hour${hours > 0 ? 's' : ''} (${timeSavedPercent}% improvement!)`;\n      }\n    }\n\n    return timeSavedStr;\n  }\n\n  close() {\n    this.space.showRouteSummary = false;\n  }\n\n  setClose() {\n    this.closeTimeout = setTimeout(() => this.close(), 10000);\n  }\n\n  created() {\n    document.addEventListener('visibilitychange', () => {\n      if (document.visibilityState == \"hidden\") {\n        clearTimeout(this.closeTimeout);\n      } else {\n        this.setClose();\n      }\n    });\n    this.setClose();\n  }\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRouteSummary.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRouteSummary.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRouteSummary.vue?vue&type=style&index=0&id=1479f992&prod&lang=css&\"","import { render, staticRenderFns } from \"./RwRouteSummary.vue?vue&type=template&id=1479f992&\"\nimport script from \"./RwRouteSummary.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwRouteSummary.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwRouteSummary.vue?vue&type=style&index=0&id=1479f992&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VDialog,{class:_vm.globals.theme,attrs:{\"persistent\":\"\",\"max-width\":\"600px\",\"height\":\"300px\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\",\"scrollable\":\"\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.close.apply(null, arguments)}},model:{value:(_vm.space.showDropSelect),callback:function ($$v) {_vm.$set(_vm.space, \"showDropSelect\", $$v)},expression:\"space.showDropSelect\"}},[_c(VCard,[_c(VCardTitle,[_vm._v(\" Select a Drop Stop \")]),_c(VCardText,{class:_vm.globals.theme},[_c(VList,_vm._l((_vm.availableStops),function(st){return _c(VListItem,{key:st.stopId,on:{\"click\":function($event){return _vm.addDropStop(st.stopId)}}},[_vm._v(\" \"+_vm._s(st.name)+\" \"),_c(VSpacer),_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-chevron-right\")])],1)],1)}),1)],1),_c(VCardActions,[_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":_vm.close}},[_vm._v(\"Close\")])],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport {RwStop} from \"@/app/dem/RwStop\";\nimport {RwRoute} from \"@/app/dem/RwRoute\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\n\n@Component({})\nexport default class RwPlannerDropSelect extends Vue {\n\n  get space(): RwPlannerSpace {\n    return theSpace;\n  }\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get activeRoute(): RwRoute {\n    return theSpace.activeRoute;\n  }\n\n  get stop(): RwStop {\n    return this.space.stopDropOrigin;\n  }\n\n  get availableStops(): RwStop[] {\n    return this.activeRoute.stops.filter(st => {\n      const currentDropDrops = st.getDropIds();\n      if (currentDropDrops && !!currentDropDrops.find(drop => drop === this.stop.stopId)) return false;\n\n      const dropIds = this.stop.getDropIds() || [];\n      return st.stopId !== this.stop.stopId && !dropIds.find(dropId => dropId === st.stopId);\n    });\n  }\n\n  addDropStop(stopId: string) {\n    this.stop.addDrop(stopId);\n    this.close();\n  }\n\n  close() {\n    this.space.stopDropOrigin = null;\n    this.space.showDropSelect = false;\n    this.$emit(\"close\");\n  }\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerDropSelect.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerDropSelect.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwPlannerDropSelect.vue?vue&type=template&id=0ef392a4&scoped=true&\"\nimport script from \"./RwPlannerDropSelect.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPlannerDropSelect.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0ef392a4\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VDialog,{attrs:{\"max-width\":\"600px\",\"height\":\"300px\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.close.apply(null, arguments)}},model:{value:(_vm.space.showDropRemove),callback:function ($$v) {_vm.$set(_vm.space, \"showDropRemove\", $$v)},expression:\"space.showDropRemove\"}},[_c(VToolbar,[_c(VToolbarTitle,[_vm._v(\"Select a Drop Stop to Remove\")])],1),_c(VCard,[_c(VCardText,[_c(VList,_vm._l((_vm.stop.getDrops()),function(st){return _c(VListItem,{key:st.stopId,on:{\"click\":function($event){return _vm.removeDropStop(st.stopId)}}},[_vm._v(\" \"+_vm._s(st.name)+\" \"),_c(VSpacer),_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-minus-circle-outline\")])],1)],1)}),1)],1),_c(VCardActions,[_c(VBtn,{attrs:{\"text\":\"\"},on:{\"click\":_vm.close}},[_vm._v(\"Close\")])],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport {RwStop} from \"@/app/dem/RwStop\";\nimport {RwRoute} from \"@/app/dem/RwRoute\";\n\n@Component({})\nexport default class RwPlannerDropRemove extends Vue {\n\n  get space(): RwPlannerSpace {\n    return theSpace;\n  }\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get activeRoute(): RwRoute {\n    return theSpace.activeRoute;\n  }\n\n  get stop(): RwStop {\n    return this.space.stopDropOrigin;\n  }\n\n  removeDropStop(stopId: string) {\n    this.globals.showConfirmDialog(\"Remove Drop Stop\", \"Are you sure you want to remove the drop stop?\", \"Confirm\", \"Cancel\")\n        .then(confirm => {\n          if (confirm) {\n            this.stop.removeDrop(stopId);\n            this.close()\n          }\n        });\n  }\n\n  close() {\n    this.space.stopDropOrigin = null;\n    this.space.showDropRemove = false;\n  }\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerDropRemove.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlannerDropRemove.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwPlannerDropRemove.vue?vue&type=template&id=331fb7ec&scoped=true&\"\nimport script from \"./RwPlannerDropRemove.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPlannerDropRemove.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"331fb7ec\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(\"div\")\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"../../RwGlobals\";\n\n@Component\nexport default class RwProBetaPrimer extends Vue {\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  onEscape() {\n    this.globals.showProBetaPrimer = false;\n    this.globals.hasProBetaPrimed = true;\n  }\n\n  onEnter() {\n    this.globals.showProBetaPrimer = false;\n    this.globals.showProToTeam = true;\n  }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwProBetaPrimer.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwProBetaPrimer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwProBetaPrimer.vue?vue&type=template&id=432ec8c0&scoped=true&\"\nimport script from \"./RwProBetaPrimer.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwProBetaPrimer.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"432ec8c0\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"overlay-color\":_vm.globals.isDarkMode ? '#000' : '#000',\"content-class\":\"dialog-with-scroll\",\"max-width\":\"600px\",\"overlay-opacity\":\"0.65\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.onEscape.apply(null, arguments)}},model:{value:(_vm.showDialog),callback:function ($$v) {_vm.showDialog=$$v},expression:\"showDialog\"}},[_c(VCard,{staticClass:\"dialog-card mx-auto\",staticStyle:{\"max-height\":\"650px\"}},[_c(VToolbar,{attrs:{\"color\":_vm.globals.backColorBar,\"dense\":\"\"}},[_c(VToolbarTitle,[_vm._v(_vm._s(_vm.title))])],1),_c(VCardText,{class:_vm.globals.theme,staticStyle:{\"height\":\"100%\",\"width\":\"100%\",\"overflow-y\":\"auto\"}},[_c('div',{ref:\"map\",staticStyle:{\"width\":\"100%\",\"height\":\"400px\"}},[_c('div',{staticClass:\"pa-3\",staticStyle:{\"top\":\"60px\",\"left\":\"35px\",\"text-align\":\"left\",\"position\":\"absolute\",\"z-index\":\"10000\",\"pointer-events\":\"none\",\"background\":\"#00000088\"}},[_c('div',{staticClass:\"mb-3\"},[_c('img',{staticClass:\"pr-3\",staticStyle:{\"width\":\"25px\",\"vertical-align\":\"middle\"},attrs:{\"src\":_vm.currentPin,\"alt\":\"current loc\"}}),_vm._v(\" Current Location \")]),_c('div',[_c('img',{staticClass:\"pr-3\",staticStyle:{\"width\":\"25px\",\"vertical-align\":\"middle\"},attrs:{\"src\":_vm.correctedPin,\"alt\":\"corrected loc\"}}),_vm._v(\" Corrected Location \")])])]),_c('div',{staticClass:\"pt-3\"},[_vm._v(\" The address at your corrected location is \"),_c('b',{staticClass:\"primary--text\"},[_vm._v(_vm._s(_vm.revGeoAddress))]),_vm._v(\". Please double check that you have the correct location before submitting. \")])]),_c(VCardActions,{class:_vm.backColor},[_c(VSpacer),_c(VBtn,{attrs:{\"xs6\":\"\",\"text\":\"\"},on:{\"click\":_vm.onCancelClick}},[_vm._v(\" Cancel \")]),_c(VBtn,{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onConfirmClick}},[_vm._v(\" Confirm \")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Vue, Watch} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport {RwPin} from \"@/app/dem/RwPin\";\nimport {RwPinTypes} from \"@/app/RwEnums\";\nimport {RwConstants} from \"@/app/RwConstants\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport {RwTaskSearch} from \"@/app/dal/RwTaskSearch\";\nimport {RwStop} from \"@/app/dem/RwStop\";\nimport {RwViewUtils} from \"@/app/utils/RwViewUtils\";\nimport {RwTaskReporting} from \"@/app/dal/RwTaskReporting\";\n\n@Component\nexport default class RwAddCorrectDialog extends Vue {\n\n  centerLat = 0;\n  centerLng = 0;\n  map: H.Map;\n  mapui: H.ui.UI;\n  platform: H.service.Platform;\n  mapBehaviors: H.mapevents.Behavior;\n  defaultLayers: H.service.Platform.MapTypes31;\n  currentPin = \"\";\n  correctedPin = \"\";\n\n  revGeoAddress = \"\";\n\n  @Watch(\"currentReportStep\")\n  onStepChange() {\n    const SOURCE = \"RwAddReportDialog.onStepChange\";\n    if (this.globals.addReport?.step === 1) {\n\n      Vue.nextTick(() => {\n        this.mapInit();\n        const correctedPin = new RwPin();\n        correctedPin.type = RwPinTypes.Stop;\n        correctedPin.stop = new RwStop();\n        correctedPin.baseColor = \"darkGreen\";\n        correctedPin.dataUrlAsync().then(dataUrl => {\n          let iconSize = this.globals.getIconSize(correctedPin.type);\n          let anchor = this.globals.getAnchorPoint(correctedPin.type);\n          let iconOpts = {} as H.map.Icon.Options;\n          if (anchor) iconOpts.anchor = anchor;\n          if (iconSize) iconOpts.size = iconSize;\n          let icon = new H.map.Icon(dataUrl, iconOpts);\n          const marker = new H.map.Marker({lat: this.globals.addReport.latDelta, lng: this.globals.addReport.lngDelta});\n          marker.setIcon(icon);\n          this.map.addObject(marker);\n          this.correctedPin = dataUrl;\n        });\n\n        const oldPin = new RwPin();\n        oldPin.type = RwPinTypes.Stop;\n        oldPin.stop = new RwStop();\n        oldPin.baseColor = \"#E2004F\";\n        oldPin.dataUrlAsync().then(dataUrl => {\n          let iconSize = this.globals.getIconSize(oldPin.type);\n          let anchor = this.globals.getAnchorPoint(oldPin.type);\n          let iconOpts = {} as H.map.Icon.Options;\n          if (anchor) iconOpts.anchor = anchor;\n          if (iconSize) iconOpts.size = iconSize;\n          let icon = new H.map.Icon(dataUrl, iconOpts);\n          const marker = new H.map.Marker({lat: this.globals.addReport.lat, lng: this.globals.addReport.lng});\n          marker.setIcon(icon);\n          this.map.addObject(marker);\n          this.currentPin = dataUrl;\n        });\n\n        let group = new H.map.Group();\n        group.addObjects([new H.map.Marker({lat: this.globals.addReport.lat, lng: this.globals.addReport.lng}),\n          new H.map.Marker({lat: this.globals.addReport.latDelta, lng: this.globals.addReport.lngDelta})]);\n\n        let boundingBox = group.getBoundingBox();\n        const latMargin = Math.abs(boundingBox.getRight() - boundingBox.getLeft()) * 0.05;\n        const lonMargin = Math.abs(boundingBox.getTop() - boundingBox.getBottom()) * 0.05;\n\n        boundingBox = new H.geo.Rect(boundingBox.getTop() + lonMargin, boundingBox.getLeft() - latMargin,\n            boundingBox.getBottom() - lonMargin, boundingBox.getRight() + latMargin);\n        RwViewUtils.mapSetViewBounds(this.map, boundingBox, false);\n\n        RwTaskSearch.geocodeV2(`${this.globals.addReport.latDelta},${this.globals.addReport.lngDelta}`, true)\n            .then(results => {\n\n              if (results && results.length > 0) {\n                this.revGeoAddress = results[0].address;\n              } else {\n                this.revGeoAddress = \"No address found at this location.\";\n              }\n            })\n            .catch(err => {\n              RwLog.warn(SOURCE, `Error reverse geocoding delta coords err:${JSON.stringify(err)} \\n\\n\n          coords: ${this.globals.addReport.latDelta},${this.globals.addReport.lngDelta}`);\n            });\n      });\n\n\n    }\n  }\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get isDarkMode(): boolean {\n    return this.globals.isDarkMode;\n  }\n\n  get title(): string {\n    if (this.report) {\n      return `Report issue for ${this.report.address}`;\n    }\n    return \"Report correction\";\n  }\n\n  get report() {\n    return theGlobals.addReport;\n  }\n\n  get showDialog() {\n    return this.globals.showAddReport && this.report && this.report.step !== 0;\n  }\n\n  get backColor() {\n    return this.globals.isDarkMode ? \"rwBackDark\" : \"rwBackLight\";\n  }\n\n  get currentReportStep() {\n    if (this.globals.addReport) {\n      return this.globals.addReport.step;\n    }\n    return -1;\n  }\n\n  onEscape(event: Event) {\n    event.stopPropagation();\n    this.onCancelClick();\n  }\n\n  onConfirmClick() {\n    const SOURCE = \"RwAddReportDialog.onConfirmClick\";\n    this.globals.isLoading = true;\n    if (this.report.lng.toFixed(6) !== this.report.lngDelta.toFixed(6) || this.report.lat.toFixed(6) !== this.report.latDelta.toFixed(6)) {\n      RwTaskReporting.postAddReport(this.report)\n          .then(result => {\n            if (result) {\n              this.globals.showSnack(\"Your correction has been sent successfully!\", \"success\");\n              this.globals.showAddReport = false;\n              this.globals.addReport = null;\n            } else {\n              this.globals.showSnack(\"Sorry, we had an issue reporting that address, please refresh and try again.\", \"error\");\n            }\n\n          })\n          .catch(err => {\n            this.globals.showSnack(\"Sorry, we had an issue reporting that address, please refresh and try again.\", \"error\");\n            RwLog.error(SOURCE, `Error adding report, report:${JSON.stringify(this.report)}, \\n\\n err: ${JSON.stringify(err)}`);\n          }).finally(() => {\n        this.globals.isLoading = false;\n      })\n    } else {\n      this.globals.showSnack(\"Please go back and select a different GPS location for this address.\");\n    }\n\n  }\n\n  onCancelClick() {\n    this.globals.showAddReport = false;\n    this.globals.m_reloPickerAddReport = false;\n    this.globals.addReport = null;\n  }\n\n  private mapInit() {\n    const SOURCE = \"RwAddReportDialog.mapInit\";\n    let self = this;\n    let apiKey = RwConstants.hereApiKey;\n    this.platform = new H.service.Platform({'apikey': apiKey});\n    this.defaultLayers = this.platform.createDefaultLayers({\n      tileSize: 512, // Use 512 for high-resolution tiles\n      engineType: H.Map.EngineType['HARP'],\n    });\n    let layer = self.defaultLayers.vector.normal.map;\n\n    let options: H.Map.Options = {\n      zoom: RwPrefUtils.viewZoom,\n      center: {\n        lat: this.globals.addReport.latDelta,\n        lng: this.globals.addReport.lngDelta\n      },\n      engineType: H.Map.EngineType['HARP'],\n      pixelRatio: window.devicePixelRatio || 1\n    };\n\n    let mapContainer = this.$refs.map as Element;\n    this.map = new H.Map(mapContainer, layer, options);\n    let events = new H.mapevents.MapEvents(this.map);\n    this.mapBehaviors = new H.mapevents.Behavior(events);\n    this.mapui = H.ui.UI.createDefault(this.map, self.defaultLayers);\n\n    this.configMapControls();\n    this.configMapEvents();\n    this.setMapStyle();\n  }\n\n  private configMapControls() {\n\n    this.mapui.getControl(\"mapsettings\").setVisibility(false);\n    let zoom = this.mapui.getControl('zoom');\n    zoom.setAlignment(H.ui.LayoutAlignment.RIGHT_MIDDLE);\n    let imprint = this.map.getImprint();\n    if (imprint) {\n      if (this.globals.isDarkMode) {\n        imprint.setOptions({invert: true});\n      } else {\n        imprint.setOptions({invert: false});\n      }\n    }\n\n  }\n\n  configMapEvents() {\n    this.map.addEventListener(\"mapviewchangeend\", () => {\n      let centroid = this.map.getCenter();\n      if (centroid) {\n        this.centerLat = centroid.lat;\n        this.centerLng = centroid.lng;\n      }\n    });\n\n  }\n\n  private setMapStyle() {\n    if (this.map) {\n      const baseLayer =  this.isDarkMode ? this.defaultLayers.vector.normal.mapnight : this.defaultLayers.vector.normal.map;\n      this.map.setBaseLayer(baseLayer);\n\n      this.resizeMapViewDelayed(1000);\n    }\n  }\n\n  resizeMapViewDelayed(delay: number) {\n    let self = this;\n    setTimeout(function () {\n      self.resizeMapView(\"resizeMapViewDelayed\");\n    }, delay);\n  }\n\n  resizeMapView(src: string) {\n    if (this.map) {\n      this.map.getViewPort().resize();\n    }\n  }\n\n\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwAddReportDialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwAddReportDialog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwAddReportDialog.vue?vue&type=template&id=68810f69&\"\nimport script from \"./RwAddReportDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwAddReportDialog.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import { VAutocomplete } from 'vuetify/lib/components/VAutocomplete';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VTextarea } from 'vuetify/lib/components/VTextarea';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"overlay-color\":_vm.globals.isDarkMode ? '#000' : '#000',\"content-class\":\"dialog-with-scroll\",\"max-width\":\"600px\",\"overlay-opacity\":\"0.65\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.onEscape.apply(null, arguments)}},model:{value:(_vm.showDialog),callback:function ($$v) {_vm.showDialog=$$v},expression:\"showDialog\"}},[_c(VCard,{staticClass:\"dialog-card mx-auto\",staticStyle:{\"max-height\":\"750px\"}},[_c(VToolbar,{attrs:{\"color\":_vm.globals.backColorBar,\"dense\":\"\"}},[_c(VToolbarTitle,[_vm._v(_vm._s(_vm.title))])],1),_c(VCardText,{class:_vm.globals.theme,staticStyle:{\"height\":\"100%\",\"width\":\"100%\",\"overflow-y\":\"auto\"}},[_c('div',{staticClass:\"pt-3\"},[_vm._v(\" Please fill out \"),_c('b',[_vm._v(\"all\")]),_vm._v(\" fields about the missing address. \")]),_c(VForm,{ref:\"addressForm\",attrs:{\"lazy-validation\":\"\"}},[_c(VRow,{attrs:{\"justify\":\"center\",\"align\":\"center\"}},[_c(VCol,{staticClass:\"pa-0\"},[_c(VTextField,{attrs:{\"filled\":\"\",\"label\":\"Location Name\",\"clearable\":\"\",\"required\":\"\",\"rules\":_vm.requiredRules},model:{value:(_vm.name),callback:function ($$v) {_vm.name=$$v},expression:\"name\"}})],1)],1),_c(VRow,{attrs:{\"justify\":\"center\",\"align\":\"center\"}},[_c(VCol,{staticClass:\"pa-0\"},[_c(VTextField,{attrs:{\"filled\":\"\",\"label\":\"House Number\",\"clearable\":\"\",\"required\":\"\",\"rules\":_vm.requiredRules},model:{value:(_vm.houseNum),callback:function ($$v) {_vm.houseNum=$$v},expression:\"houseNum\"}})],1),_c(VCol,{staticClass:\"pa-0\"},[_c(VTextField,{attrs:{\"filled\":\"\",\"label\":\"Street\",\"clearable\":\"\",\"rules\":_vm.requiredRules,\"required\":\"\"},model:{value:(_vm.street),callback:function ($$v) {_vm.street=$$v},expression:\"street\"}})],1)],1),_c(VRow,{attrs:{\"justify\":\"center\",\"align\":\"center\"}},[_c(VCol,{staticClass:\"pa-0\"},[_c(VTextField,{attrs:{\"filled\":\"\",\"label\":\"City\",\"clearable\":\"\",\"rules\":_vm.requiredRules,\"required\":\"\"},model:{value:(_vm.city),callback:function ($$v) {_vm.city=$$v},expression:\"city\"}})],1)],1),_c(VRow,{attrs:{\"justify\":\"center\",\"align\":\"center\"}},[_c(VCol,{staticClass:\"pa-0\"},[_c(VTextField,{attrs:{\"filled\":\"\",\"label\":\"State/Region\",\"clearable\":\"\",\"rules\":_vm.requiredRules,\"required\":\"\"},model:{value:(_vm.stateRegion),callback:function ($$v) {_vm.stateRegion=$$v},expression:\"stateRegion\"}})],1),_c(VCol,{staticClass:\"pa-0\"},[_c(VTextField,{attrs:{\"filled\":\"\",\"label\":\"Postal Code\",\"clearable\":\"\",\"rules\":_vm.requiredRules,\"required\":\"\"},model:{value:(_vm.postalCode),callback:function ($$v) {_vm.postalCode=$$v},expression:\"postalCode\"}})],1)],1),_c(VRow,{attrs:{\"justify\":\"center\",\"align\":\"center\"}},[_c(VCol,{staticClass:\"pa-0\"},[_c(VAutocomplete,{attrs:{\"filled\":\"\",\"required\":\"\",\"rules\":_vm.requiredRules,\"items\":_vm.countryList,\"label\":\"Country\"},model:{value:(_vm.country),callback:function ($$v) {_vm.country=$$v},expression:\"country\"}})],1)],1),_c(VRow,{staticStyle:{\"height\":\"96px\"},attrs:{\"justify\":\"center\",\"align\":\"center\"}},[_c(VCol,{staticClass:\"pa-0\"},[_c(VTextarea,{attrs:{\"filled\":\"\",\"required\":\"\",\"rules\":_vm.requiredRules,\"label\":\"Notes\"},model:{value:(_vm.note),callback:function ($$v) {_vm.note=$$v},expression:\"note\"}})],1)],1)],1)],1),_c(VCardActions,{class:_vm.backColor},[_c(VSpacer),_c(VBtn,{attrs:{\"xs6\":\"\",\"text\":\"\"},on:{\"click\":_vm.onCancelClick}},[_vm._v(\" Cancel \")]),_c(VBtn,{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onConfirmClick}},[_vm._v(\" Next \")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","const countryList =\n    [\n        \"United States\",\n        \"United Kingdom\",\n        \"Australia\",\n        \"Canada\",\n        \"Denmark\",\n        \"Finland\",\n        \"France\",\n        \"Iceland\",\n        \"Italy\",\n        \"Ireland\",\n        \"Netherlands\",\n        \"New Zealand\",\n        \"Norway\",\n        \"South Africa\",\n        \"Sweden\",\n    ];\n\nexport default countryList;","\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport countryList from \"@/utils/countries\";\nimport RwRegex from '@/app/consts/RwRegex';\n\n@Component\nexport default class RwAddCorrectDialog extends Vue {\n\n  note = \"\";\n  name = \"\";\n  houseNum = \"\";\n  street = \"\";\n  city = \"\";\n  stateRegion = \"\";\n  postalCode = \"\";\n  country = \"\";\n\n  get requiredRules() {\n    return RwRegex.RequiredRules;\n  }\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get isDarkMode(): boolean {\n    return this.globals.isDarkMode;\n  }\n\n  get title(): string {\n    return \"Report Missing Location\";\n  }\n\n  get report() {\n    return theGlobals.addReport;\n  }\n\n  get showDialog() {\n    return this.globals.showAddMissingReport && this.report && this.report.step === 1;\n  }\n\n  get backColor() {\n    return this.globals.isDarkMode ? \"rwBackDark\" : \"rwBackLight\";\n  }\n\n  get currentReportStep() {\n    if (this.globals.addReport) {\n      return this.globals.addReport.step;\n    }\n    return -1;\n  }\n\n  get countryList() {\n    return countryList\n  }\n\n  onEscape(event: Event) {\n    event.stopPropagation();\n    this.onCancelClick();\n  }\n\n  onCancelClick() {\n    this.globals.showAddMissingReport = false;\n    this.globals.m_reloPickerAddReport = false;\n    this.globals.addReport = null;\n  }\n\n  onConfirmClick() {\n\n    if ((<any>this.$refs.addressForm).validate()) {\n      this.globals.addReport.name = this.name;\n      this.globals.addReport.message = \"Missing Location Report - \" + this.note;\n      this.globals.addReport.address = `${this.houseNum} ${this.street}, ${this.city}, ${this.stateRegion} ${this.postalCode}, ${this.country}\"`;\n      this.globals.addReport.step = 2;\n    } else {\n      theGlobals.showSnack(\"Please fill out all address fields\", \"error\");\n    }\n  }\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwAddMissingReportDialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwAddMissingReportDialog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwAddMissingReportDialog.vue?vue&type=template&id=ba8318fe&scoped=true&\"\nimport script from \"./RwAddMissingReportDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwAddMissingReportDialog.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"ba8318fe\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"overlay-color\":_vm.globals.isDarkMode ? '#000' : '#000',\"content-class\":\"dialog-with-scroll\",\"max-width\":\"600px\",\"overlay-opacity\":\"0.65\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.onEscape.apply(null, arguments)}},model:{value:(_vm.showDialog),callback:function ($$v) {_vm.showDialog=$$v},expression:\"showDialog\"}},[_c(VCard,{staticClass:\"dialog-card mx-auto\",staticStyle:{\"max-height\":\"650px\"}},[_c(VToolbar,{attrs:{\"color\":_vm.globals.backColorBar,\"dense\":\"\"}},[_c(VToolbarTitle,[_vm._v(_vm._s(_vm.title))])],1),_c(VCardText,{class:_vm.globals.theme,staticStyle:{\"height\":\"100%\",\"width\":\"100%\",\"overflow-y\":\"auto\"}},[_c('div',{ref:\"map\",staticStyle:{\"width\":\"100%\",\"height\":\"400px\"}},[_c('div',{staticClass:\"pa-3\",staticStyle:{\"top\":\"60px\",\"left\":\"35px\",\"text-align\":\"left\",\"position\":\"absolute\",\"z-index\":\"10000\",\"pointer-events\":\"none\",\"background\":\"#00000088\"}},[_c('div',[_c('img',{staticClass:\"pr-3\",staticStyle:{\"width\":\"25px\",\"vertical-align\":\"middle\"},attrs:{\"src\":_vm.correctedPin,\"alt\":\"missing loc\"}}),_vm._v(\" Missing Location \")])])]),_c('div',{staticClass:\"pt-3\"},[_vm._v(\" The address at your selected location is \"),_c('b',{staticClass:\"primary--text\"},[_vm._v(_vm._s(_vm.revGeoAddress))]),_vm._v(\". Please double check that you have the correct location before submitting. \")])]),_c(VCardActions,{class:_vm.backColor},[_c(VSpacer),_c(VBtn,{attrs:{\"xs6\":\"\",\"text\":\"\"},on:{\"click\":_vm.onCancelClick}},[_vm._v(\" Cancel \")]),_c(VBtn,{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.onConfirmClick}},[_vm._v(\" Confirm \")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Vue, Watch} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport {RwPin} from \"@/app/dem/RwPin\";\nimport {RwPinTypes} from \"@/app/RwEnums\";\nimport {RwConstants} from \"@/app/RwConstants\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport {RwTaskSearch} from \"@/app/dal/RwTaskSearch\";\nimport {RwStop} from \"@/app/dem/RwStop\";\nimport {RwTaskReporting} from \"@/app/dal/RwTaskReporting\";\n\n@Component\nexport default class RwAddMissingFinalizeDialog extends Vue {\n\n  centerLat = 0;\n  centerLng = 0;\n  map: H.Map;\n  mapui: H.ui.UI;\n  platform: H.service.Platform;\n  mapBehaviors: H.mapevents.Behavior;\n  defaultLayers: H.service.Platform.MapTypes31;\n  currentPin = \"\";\n  correctedPin = \"\";\n\n  revGeoAddress = \"\";\n\n  @Watch(\"currentReportStep\")\n  onStepChange() {\n    const SOURCE = \"RwAddMissingFinalizeDialog.onStepChange\";\n    if (this.globals.addReport?.step === 2) {\n\n      Vue.nextTick(() => {\n        this.mapInit();\n        const correctedPin = new RwPin();\n        correctedPin.type = RwPinTypes.Stop;\n        correctedPin.stop = new RwStop();\n        correctedPin.baseColor = \"darkGreen\";\n        correctedPin.dataUrlAsync().then(dataUrl => {\n          let iconSize = this.globals.getIconSize(correctedPin.type);\n          let anchor = this.globals.getAnchorPoint(correctedPin.type);\n          let iconOpts = {} as H.map.Icon.Options;\n          if (anchor) iconOpts.anchor = anchor;\n          if (iconSize) iconOpts.size = iconSize;\n          let icon = new H.map.Icon(dataUrl, iconOpts);\n          const marker = new H.map.Marker({lat: this.globals.addReport.latDelta, lng: this.globals.addReport.lngDelta});\n          marker.setIcon(icon);\n          this.map.addObject(marker);\n          this.correctedPin = dataUrl;\n        });\n\n        this.map.setCenter(new H.geo.Point(this.globals.addReport.latDelta, this.globals.addReport.lngDelta))\n        this.map.setZoom(13);\n\n        RwTaskSearch.geocodeV2(`${this.globals.addReport.latDelta},${this.globals.addReport.lngDelta}`, true)\n            .then(results => {\n\n              if (results && results.length > 0) {\n                this.revGeoAddress = results[0].address;\n              } else {\n                this.revGeoAddress = \"No address found at this location.\";\n              }\n            })\n            .catch(err => {\n              RwLog.warn(SOURCE, `Error reverse geocoding delta coords err:${JSON.stringify(err)} \\n\\n\n          coords: ${this.globals.addReport.latDelta},${this.globals.addReport.lngDelta}`);\n            });\n      });\n\n\n    }\n  }\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get isDarkMode(): boolean {\n    return this.globals.isDarkMode;\n  }\n\n  get title(): string {\n    if (this.report) {\n      return `Report missing location for ${this.report.name}`;\n    }\n    return \"Report missing location\";\n  }\n\n  get report() {\n    return theGlobals.addReport;\n  }\n\n  get showDialog() {\n    return this.globals.showAddMissingReport && this.report && this.report.step === 2;\n  }\n\n  get backColor() {\n    return this.globals.isDarkMode ? \"rwBackDark\" : \"rwBackLight\";\n  }\n\n  get currentReportStep() {\n    if (this.globals.addReport) {\n      return this.globals.addReport.step;\n    }\n    return -1;\n  }\n\n  onEscape(event: Event) {\n    event.stopPropagation();\n    this.onCancelClick();\n  }\n\n  onConfirmClick() {\n    const SOURCE = \"RwAddMissingFinalizeDialog.onConfirmClick\";\n    this.globals.isLoading = true;\n    if (this.report.lngDelta !== 0 || this.report.latDelta !== 0) {\n      RwTaskReporting.postAddReport(this.report)\n          .then(result => {\n            if (result) {\n              this.globals.showSnack(\"Your missing address has been sent successfully!\", \"success\");\n              this.globals.showAddMissingReport = false;\n              this.globals.addReport = null;\n            } else {\n              this.globals.showSnack(\"Sorry, we had an issue reporting that address, please refresh and try again.\", \"error\");\n            }\n\n          })\n          .catch(err => {\n            this.globals.showSnack(\"Sorry, we had an issue reporting that address, please refresh and try again.\", \"error\");\n            RwLog.error(SOURCE, `Error adding report, report:${JSON.stringify(this.report)}, \\n\\n err: ${JSON.stringify(err)}`);\n          }).finally(() => {\n        this.globals.isLoading = false;\n      })\n    } else {\n      this.globals.showSnack(\"Please go back and select a different GPS location for this address.\");\n    }\n\n  }\n\n  onCancelClick() {\n    this.globals.showAddMissingReport = false;\n    this.globals.m_reloPickerAddReport = false;\n    this.globals.addReport = null;\n  }\n\n  private mapInit() {\n    const SOURCE = \"RwAddReportDialog.mapInit\";\n    let self = this;\n    let apiKey = RwConstants.hereApiKey;\n    this.platform = new H.service.Platform({'apikey': apiKey});\n    this.defaultLayers = this.platform.createDefaultLayers({\n      tileSize: 512, // Use 512 for high-resolution tiles\n      engineType: H.Map.EngineType['HARP'],\n    });\n    let layer = self.defaultLayers.vector.normal.map;\n\n    let options: H.Map.Options = {\n      zoom: RwPrefUtils.viewZoom,\n      center: {\n        lat: this.globals.addReport.latDelta,\n        lng: this.globals.addReport.lngDelta\n      },\n      engineType: H.Map.EngineType['HARP'],\n      pixelRatio: window.devicePixelRatio || 1\n    };\n\n    let mapContainer = this.$refs.map as Element;\n    this.map = new H.Map(mapContainer, layer, options);\n    let events = new H.mapevents.MapEvents(this.map);\n    this.mapBehaviors = new H.mapevents.Behavior(events);\n    this.mapui = H.ui.UI.createDefault(this.map, self.defaultLayers);\n\n    this.configMapControls();\n    this.configMapEvents();\n    this.setMapStyle();\n  }\n\n  private configMapControls() {\n\n    this.mapui.getControl(\"mapsettings\").setVisibility(false);\n    let zoom = this.mapui.getControl('zoom');\n    zoom.setAlignment(H.ui.LayoutAlignment.RIGHT_MIDDLE);\n    let imprint = this.map.getImprint();\n    if (imprint) {\n      if (this.globals.isDarkMode) {\n        imprint.setOptions({invert: true});\n      } else {\n        imprint.setOptions({invert: false});\n      }\n    }\n\n  }\n\n  configMapEvents() {\n    this.map.addEventListener(\"mapviewchangeend\", () => {\n      let centroid = this.map.getCenter();\n      if (centroid) {\n        this.centerLat = centroid.lat;\n        this.centerLng = centroid.lng;\n      }\n    });\n\n  }\n\n  private setMapStyle() {\n    if (this.map) {\n      const baseLayer =  this.isDarkMode ? this.defaultLayers.vector.normal.mapnight : this.defaultLayers.vector.normal.map;\n      this.map.setBaseLayer(baseLayer);\n\n      this.resizeMapViewDelayed(1000);\n    }\n  }\n\n  resizeMapViewDelayed(delay: number) {\n    let self = this;\n    setTimeout(function () {\n      self.resizeMapView(\"resizeMapViewDelayed\");\n    }, delay);\n  }\n\n  resizeMapView(src: string) {\n    if (this.map) {\n      this.map.getViewPort().resize();\n    }\n  }\n\n\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwAddMissingFinalizeDialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwAddMissingFinalizeDialog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RwAddMissingFinalizeDialog.vue?vue&type=template&id=603beec4&\"\nimport script from \"./RwAddMissingFinalizeDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwAddMissingFinalizeDialog.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","\n\nimport moment from \"moment\";\nimport {Component, Vue, Watch} from \"vue-property-decorator\";\nimport {RwRoute, RwRouteAssignCodes, RwRoutePick} from \"@/app/dem/RwRoute\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport theStore from \"@/store\";\nimport theGlobals, {RwGlobals} from '@/app/RwGlobals';\nimport thePlanSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport RwPlannerMap from \"@/app/views//planner/RwPlannerMap.vue\";\nimport RwPlannerList from \"@/app/views//planner/RwPlannerList.vue\";\nimport RwPlannerStatus from \"@/app/views//planner/RwPlannerStatus.vue\";\nimport RwPinPanel from \"@/app/views//planner/RwPinPanel.vue\";\nimport {RwEntityTypes, RwMultiMode, RwMutiModeTool, RwPinTypes} from \"@/app/RwEnums\";\nimport RwPinPopup from \"@/app/views/planner/RwPinPopup.vue\";\nimport RwPlannerLayers from \"@/app/views/planner/RwPlannerLayers.vue\";\nimport RwOnboardSettings from \"@/app/views/account/RwOnboardSettings.vue\";\nimport {RwStop} from \"@/app/dem/RwStop\";\nimport RwClusterPicker from \"@/app/views/pickers/RwClusterPicker.vue\";\nimport {RwPin} from \"@/app/dem/RwPin\";\nimport RwTaskPop from \"@/app/views/tasks/RwTaskPop.vue\";\nimport RwPlannerMapOptions from \"@/app/views/planner/RwPlannerMapOptions.vue\";\nimport RwLimitPopup from \"@/app/views/planner/RwLimitPopup.vue\"\nimport RwRoutePicker from \"@/app/views/pickers/RwRoutePicker.vue\";\nimport RwSearchOptions from \"@/app/views/planner/RwSearchOptions.vue\";\nimport RwRouteOrder from \"@/app/views/planner/RwRouteOrder.vue\";\nimport RwRouteSummary from \"@/app/views/planner/RwRouteSummary.vue\";\nimport RwSearchPanel from \"@/app/views/planner/RwSearchPanel.vue\";\nimport RwPlannerDropSelect from \"@/app/views/planner/RwPlannerDropSelect.vue\";\nimport RwPlannerDropRemove from \"@/app/views/planner/RwPlannerDropRemove.vue\";\nimport RwProBetaPrimer from \"@/app/views/account/RwProBetaPrimer.vue\";\nimport RwProToTeam from \"@/app/views/account/RwProToTeam.vue\";\nimport {RwDateUtils} from \"@/app/utils/RwDateUtils\";\nimport RwCCExpirePopup from \"@/app/views/account/RwCCExpirePopup.vue\";\nimport RwAddCorrectDialog from \"@/app/views/planner/RwAddReportDialog.vue\";\nimport RwAddMissingReportDialog from \"@/app/views/planner/RwAddMissingReportDialog.vue\";\nimport RwAddMissingFinalizeDialog from \"@/app/views/planner/RwAddMissingFinalizeDialog.vue\";\nimport RwEventBus from \"@/utils/RwEventBus\";\nimport RwEvents from \"@/app/consts/RwEvents\";\nimport {PODDefaultSettings} from \"@/app/dem/ProofOfDelivery/ProofOfDeliveryEnums\";\nimport {RwStopAddOns} from \"@/app/dem/RwStopAddOns\";\nimport Moment = moment.Moment;\n\nenum PlanSteps { none, search, order, assign, update, next }\n\n@Component({\n  components: {\n    RwAddMissingFinalizeDialog,\n    RwProToTeam,\n    RwProBetaPrimer,\n    RwPlannerDropRemove,\n    RwPlannerDropSelect,\n    RwOnboardSettings,\n    RwCCExpirePopup,\n    RwRouteOrder,\n    RwSearchOptions, RwRoutePicker,\n    RwTaskPop, RwClusterPicker, RwPinPopup,\n    RwPlannerMap, RwPlannerList, RwPinPanel,\n    RwPlannerStatus, RwPlannerLayers, RwPlannerMapOptions,\n    RwRouteSummary, RwSearchPanel, RwLimitPopup, RwAddCorrectDialog,\n    RwAddMissingReportDialog\n  }\n})\n\nexport default class RwPlanner extends Vue {\n\n\n  //#region Props\n\n  idxTab = 0;\n  holdTab = 0;\n  search: string = \"\";\n  showSearch: boolean = false;\n  showPanelMenu = false;\n  showMultiToolSelector = false;\n  showMultiModeSelector = false;\n  contextMenuX = 0;\n  contextMenuY = 0;\n  contextIdx: number;\n  contextRoute: RwRoute;\n  contextUrl: string = \"\";\n  showingTabMenu = false;\n  routeClicked: RwRoute;\n  timeOfLastRouteClick: Moment;\n  lastPushId: string;\n  lastPushTS: number = 0;\n  windowHeight = \"\";\n  windowHeightPx = 0;\n  mobileTabsIdx = 0;\n  showMobileActions = false;\n  mobileActionsTabsIdx = 0;\n  showMobileMultiMode = false;\n  mobileMultiModeIdx = 0;\n  mobilePanelTabsIdx = 1;\n  showTabletFilters = false;\n\n  ///panelsSearchStatus: { panelList: boolean, pinPanel: boolean, panelStatus: boolean };\n\n  get globals(): RwGlobals {\n    return theGlobals\n  }\n\n  get plannerSpace(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get space(): RwPlannerSpace {\n    return thePlanSpace;\n  }\n\n  get isSearchMode(): boolean {\n    return this.globals.showSearchPanel;\n  }\n\n  get canShowPinPanel(): boolean {\n    return !this.isSearchMode && !this.isMultiMode && this.globals.showPinPanel && this.openRoutes.length > 0\n  }\n\n  get canShowListPanel(): boolean {\n    return !this.isSearchMode && this.space.showPanelList && this.openRoutes.length > 0\n  }\n\n  get canShowStatusPanel(): boolean {\n    return !this.isSearchMode && !this.isMultiMode && this.globals.isDisp && this.space.showPanelStatus && this.windowHeightPx > 600;\n  }\n\n  get canShowPlannerBody(): boolean {\n    return this.globals.showSearchPanel || this.space.showPanelMap || this.space.showPanelList || this.openRoutes.length === 0;\n  }\n\n  get canShowMapPanel(): boolean {\n    let canShow = this.globals.showSearchPanel || this.space.showPanelMap && this.openRoutes.length > 0\n    //console.log(\"canShowMapPanel\", canShow)\n    return canShow\n  }\n\n\n  get panelsHeight(): string {\n    return `height: calc(100%  - ${this.canShowPushStep || this.space.showInvalidPinBanner ? \"73px\" : \"0px\"})`;\n  }\n\n  get mobilePanelsHeight(): string {\n    const base = 202;\n    const height = window.innerHeight - base - (this.space.showInvalidPinBanner ? 73 : 0) - (this.showStopsViolationsBanner ? 73 : 0);\n    return `height: ${height}px`;\n  }\n\n  get isPushPending(): boolean {\n    let isPushPending = false;\n    if (this.globals.activeRoute) {\n      let route = this.globals.activeRoute;\n      if (!this.lastPushId || route.routeId === this.lastPushId) {\n        isPushPending = this.lastPushTS > 0 && this.lastPushTS > this.globals.driverLastSyncMS;\n      }\n    }\n    //console.log(\"isPushPending\", isPushPending)\n\n    return isPushPending;\n  }\n\n  get isRouteDirty(): boolean {\n    //console.log(\"lastDelta vs driverLastSync\", this.globals.lastStatusMS, this.globals.driverLastSyncMS)\n    return this.globals.isRouteDirty;\n  }\n\n  get isDispatcher() {\n    return this.globals.isDisp;\n  }\n\n  get canShowPushStep(): boolean {\n    let canPush = false;\n    if (this.activeRoute) {\n      let isDriverAssigned = !this.isSelfAssigned;\n      canPush = this.isDispatcher && isDriverAssigned && this.isRouteDirty && this.isRouteAccepted && !this.globals.selectedRoute.isDynLoc;\n    }\n    return canPush;\n  }\n\n  get isSelfAssigned(): boolean {\n    let isSelfy = true;\n    let route = this.space.activeRoute;\n    if (route && route.driverId) {\n      isSelfy = route.driverId === this.globals.userId;\n    }\n    return isSelfy;\n  }\n\n\n  get isRouteAccepted(): boolean {\n    let isAccepted = false;\n    let route = this.space.activeRoute;\n    if (route) {\n      isAccepted = route.assignCode === RwRouteAssignCodes.assigned;\n    }\n    return isAccepted;\n  }\n\n\n  get isStepSearch(): boolean {\n    return this.stepFocus == PlanSteps.search;\n  }\n\n  get stepFocusManual() {\n    return theStore.getters.highLightManual;\n  }\n\n  set stepFocusManual(val) {\n    theStore.dispatch(\"highLightManual\", val).catch();\n  }\n\n\n  _stepFocus = PlanSteps.none;\n\n  get stepFocus(): number {\n    let focus = PlanSteps.none;\n    let route = this.space.activeRoute;\n    if (route) {\n      focus = PlanSteps.search;\n      let activeStops = route.getActiveStops();\n      let gotStops = activeStops && activeStops.length > 0;\n      if (gotStops) {\n        let gotUnordered = activeStops.find(s => s.seq == 0);\n        let fullyOrdered = !gotUnordered;\n        if (fullyOrdered) {\n          focus = PlanSteps.none;\n        } else {\n          focus = PlanSteps.order;\n        }\n\n      }\n    }\n\n    //console.log(\"stepFocus\", stepFocus);\n    this._stepFocus = focus;\n    return this._stepFocus;\n\n  }\n\n  set stepFocus(val: number) {\n    this.stepFocusManual = val;\n    this._stepFocus = val;\n  }\n\n  get isAssigned() {\n    let isAssigned = true;\n    if (this.globals.isDisp && this.isSelfAssigned) {\n      isAssigned = false;\n    }\n    return isAssigned;\n  }\n\n\n  get selectModeIcon() {\n    let iconName = \"\";\n    switch (this.multiMode) {\n      case RwMultiMode.stops:\n        iconName = \"mdi-map-marker\";\n        break;\n      case RwMultiMode.sites:\n        iconName = \"mdi-star-circle\";\n        break;\n      case RwMultiMode.tasks:\n        iconName = \"mdi-clipboard-check\";\n        break;\n    }\n    return iconName;\n  }\n\n  get panelCols(): number {\n    let cols: number;\n    let panelCount = 0;\n    if (this.openRoutes.length > 0) {\n\n      if (this.isMultiMode) {\n        if (this.space.showPanelMap) panelCount++;\n        if (this.space.showPanelList) panelCount++;\n      } else if (this.globals.showSearchPanel) {\n        panelCount = 2;\n      } else {\n        if (this.space.showPanelMap) panelCount++;\n        if (this.space.showPanelList) panelCount++;\n        if (this.globals.showPinPanel) panelCount++;\n      }\n\n      if (panelCount > 0) {\n        cols = 12 / panelCount;\n      }\n    }\n    //console.warn(\"panelCols complete\", cols);\n    return cols;\n  }\n\n  get selectedPins(): RwPin[] {\n    //console.log(\"GET selectedPins\", theStore.getters.selectedPins.length);\n    return this.space.selectedPins;\n  }\n\n  get upperBodyStyle(): string {\n    if (this.isMobile) return '';\n    let offset = this.isMultiMode ? 48 : 96;\n    let showingToolbar = this.space.showPlannerToolbar && !this.globals.showSearchPanel\n    offset = (showingToolbar) ? offset : 0;\n    offset += 64;\n\n    let showingStatusPanel = this.globals.isDisp && this.space.showPanelStatus && this.canShowStatusPanel && !this.globals.showSearchPanel\n    if (showingStatusPanel) {\n      offset += this.space.timeHeight;\n    }\n\n    let heightStyle = `height:calc(${this.windowHeight} - ${offset}px${this.showStopsViolationsBanner ? ' - 73px' : ''})`;\n    //console.log(\"upperBodyStyle\", heightStyle);\n    return heightStyle;\n  }\n\n  get timelineStyle(): string {\n    let heightStyle = '';\n    if (this.space.showPanelStatus && !this.space.showPanelMap && !this.space.showPanelList) {\n      heightStyle = \"height:calc(100% - 96px)\";\n    } else {\n      heightStyle = `height:${this.space.timeHeight}px`;\n    }\n    //console.warn(heightStyle);\n    return heightStyle;\n  }\n\n  get multiModeTool(): RwMutiModeTool {\n    //console.warn(\"GET multiModeTool\", this.space.multiModeTool);\n    return this.space.multiModeTool;\n  }\n\n  set multiModeTool(val: RwMutiModeTool) {\n    //console.warn(\"SET multiModeTool\", val);\n    this.space.multiModeTool = val;\n  }\n\n  get selectedPinCount(): number {\n    let realCount = 0;\n    let selPins = this.selectedPins;\n    if (selPins.length > 0) {\n      //console.log(\"selectedPinCount\", selPins.length);\n      selPins.forEach(p => {\n        if (p) {\n          realCount++;\n        }\n      })\n    }\n    return realCount;\n  }\n\n\n  get isEmptyState() {\n    let isEmptyState = this.globals.isDataLoaded && this.openRoutes.length === 0;\n    return isEmptyState;\n  }\n\n\n  get displayEmptyState() {\n    let displayEmptyState = this.globals.isDataLoaded && this.openRoutes.length === 0;\n    //console.log(\"displayEmptyState\", displayEmptyState, this.globals.isDataLoaded, this.openRoutes.length === 0);\n    //console.log(\"RwPlanner.displayEmptyState\", `overrideEmptyState: ${this.globals.overrideEmptyState}`)\n\n    if (displayEmptyState) {\n\n      if (!this.globals.overrideEmptyState) {\n\n        const self = this;\n        this.globals\n            .showRouteNew(true, null)\n            .then(pick => {\n              //console.log(\"onRouteAddClick callback\", pick);\n              if (pick) {\n                self.space.openRoute(pick);\n                if (RwPrefUtils.editAfterAdd) {\n                  self.globals.showRouteEdit(pick)\n                }\n              }\n            })\n            .catch(err => {\n              //console.error(\"onRouteAddClick\", err.toString());\n            });\n      } else {\n        //Just skip once\n        this.globals.overrideEmptyState = false;\n      }\n    }\n\n\n    return displayEmptyState;\n  }\n\n  get isMultiModeStops(): boolean {\n    //console.log(\"GET isMultiModeStops\", this.multiMode, this.multiMode === RwMultiMode.stops, this.multiMode == RwMultiMode.stops)\n    let isStopMode = this.multiMode === RwMultiMode.stops;\n    //console.log(\"GET isMultiModeStops\", isStopMode)\n    return isStopMode;\n  }\n\n  get isMultiModeSites(): boolean {\n    return this.multiMode === RwMultiMode.sites;\n  }\n\n  get isMultiModeTasks(): boolean {\n    return this.multiMode === RwMultiMode.tasks;\n  }\n\n  get multiMode(): RwMultiMode {\n    //console.log(\"GET multiMode\", this.space.multiMode);\n    return this.space.multiMode;\n  }\n\n  set multiMode(val: RwMultiMode) {\n    this.space.clearPinSelections();\n    //console.log(\"SET multiMode\", val);\n    this.space.multiMode = val;\n  }\n\n  get isMultiMode(): boolean {\n    return this.multiMode != RwMultiMode.none;\n  }\n\n  get backColor(): string {\n    return this.globals.isDarkMode ? \"backDark\" : \"backLight\";\n  }\n\n  get isDarkMode(): boolean {\n    return this.globals.isDarkMode;\n  }\n\n  get routes(): RwRoute[] {\n    return this.globals.routes;\n  }\n\n  get openRoutes(): RwRoute[] {\n    // console.warn(\"OpenRoutes: \", this.space.openRoutes);\n    return this.space.openRoutes ? this.space.openRoutes : [];\n  }\n\n  get activeRoute(): RwRoute {\n    return this.space.activeRoute;\n  }\n\n  get colorMultiButton(): string {\n    return this.isMultiMode ? \"primary\" : undefined;\n  }\n\n  get stepperStyle() {\n    return this.globals.isDisp ? `${this.isMobile ? 'width: 100%;' : 'width:35%;'}background-color: transparent;height:60px` : `${this.isMobile ? 'width:100%;' : 'width:30%;'}background-color: transparent;height:60px`;\n  }\n\n  get invalidPinCount(): number {\n    return this.activeRoute.stops.reduce((acc, stop): number => stop.lng === 0 && stop.lat === 0 ? acc + 1 : acc, 0);\n  }\n\n  get invalidPinMessage() {\n    switch (this.space.invalidPinError) {\n      case \"Route\":\n        return \"Invalid route start location. Please set the start location.\";\n      case \"Stop\":\n        return `There are ${this.invalidPinCount} pins with invalid locations.`;\n      default:\n        return \"\";\n    }\n  }\n\n\n  showStopsViolationsList = false;\n\n  get stopsWithViolations(): RwStop[] {\n    if (!this.activeRoute || !this.activeRoute.stops) return [];\n    return this.activeRoute.stops.filter(stop => stop.violations);\n  }\n\n  get showStopsViolationsBanner(): boolean {\n    if (this.activeRoute && (!this.space.showStopsViolations.find(item => this.activeRoute.routeId == item) && this.stopsWithViolations.length > 0)) return true;\n    return false;\n  }\n\n  dismissViolationWarning() {\n    this.space.showStopsViolations = [...this.space.showStopsViolations, String(this.activeRoute.routeId)];\n    this.onWindowHeight();\n  }\n\n  onClickViolation(stop: RwStop) {\n    this.globals.showPinPanel = false;\n    this.globals.showPinPopup = true;\n    this.space.selectedPin = new RwPin();\n    this.space.selectedPin.stop = stop;\n    this.showStopsViolationsList = false;\n  }\n\n\n  get hasActiveFilters() {\n    return (!this.space.showDataLayerRoute) ||\n        (!this.space.showDataLayerSites) ||\n        (this.globals.isDisp && !this.space.showDataLayerTasks) ||\n        (this.space.showDataLayerRoute && this.space.isStopFiltered) ||\n        (this.space.showDataLayerSites && this.space.isSiteFiltered) ||\n        (this.globals.isDisp && this.space.showDataLayerTasks && this.space.isTaskFiltered);\n  }\n\n  //#endregion Props\n\n\n  //#region Watch APIs\n\n\n  @Watch(\"space.showPanelMap\")\n  watchShowPanelMap(val: boolean) {\n    this.space.sizeDelta++;\n  }\n\n  @Watch(\"space.showPanelList\")\n  watchShowPanelList(val: boolean) {\n    this.space.sizeDelta++;\n  }\n\n  @Watch(\"space.showPanelStatus\")\n  watchShowPanelStatus(val: boolean) {\n    this.space.sizeDelta++;\n  }\n\n  @Watch(\"globals.showPinPanel\")\n  watchShowPanelPreview(val: boolean) {\n    this.space.sizeDelta++;\n  }\n\n  @Watch(\"globals.showSearchPanel\")\n  watchShowSearchPanel(isSearchMode: boolean) {\n    setTimeout(() => this.space.sizeDelta++, 0)\n  }\n\n  @Watch(\"isMultiMode\")\n  watchIsMultiMode(val) {\n    this.space.showPlannerToolbar = (val === false);\n  }\n\n  @Watch(\"space.activeRoute\")\n  watchActiveRoute(val: RwRoute) {\n    // Hide banner\n    this.space.showInvalidPinBanner = false;\n  }\n\n  ///endregion Watch APIs\n\n\n  //#region Filter\n\n  onCloseFilterHideStops() {\n    this.space.showDataLayerRoute = true;\n  }\n\n  onCloseFilterHideSites() {\n    this.space.showDataLayerSites = true;\n  }\n\n  onCloseFilterHideTasks() {\n    this.space.showDataLayerTasks = true;\n  }\n\n  // onCloseFilterHideDrivers() {\n  //   this.space.showDataLayerDrivers = true;\n  // }\n\n  onCloseFilterStops() {\n    this.clearStopFilter();\n  }\n\n  onCloseFilterSites() {\n    this.clearSiteFilter();\n  }\n\n  onCloseFilterTasks() {\n    this.clearTaskFilter();\n  }\n\n  onCloseFilterDrivers() {\n    this.clearDriverFilter();\n  }\n\n\n  private clearSiteFilter() {\n    RwPrefUtils.siteFilterName = \"\";\n    RwPrefUtils.siteFilterAddress = \"\";\n    RwPrefUtils.siteFilterDistance = 0;\n    RwPrefUtils.siteFilterHash = \"\";\n    RwPrefUtils.siteFilterHashAll = false;\n    RwPrefUtils.siteFilterColor = \"\";\n    RwPrefUtils.siteFilterCheckMin = -100;\n    RwPrefUtils.siteFilterCheckMax = 0;\n    this.space.isSiteFiltered = false;\n    this.globals.commitSites();\n  }\n\n  private clearTaskFilter() {\n    RwPrefUtils.taskFilterName = \"\";\n    RwPrefUtils.taskFilterAddress = \"\";\n    RwPrefUtils.taskFilterDistance = 0;\n    RwPrefUtils.taskFilterHash = \"\";\n    RwPrefUtils.taskFilterHashAll = false;\n    RwPrefUtils.taskFilterColor = \"\";\n    this.space.isTaskFiltered = false;\n    this.globals.commitTasks();\n  }\n\n  private clearDriverFilter() {\n    RwPrefUtils.driverFilterName = \"\";\n    this.space.isDriverFiltered = false;\n    this.globals.commitDrivers();\n  }\n\n  private clearStopFilter() {\n    RwPrefUtils.stopFilterName = \"\";\n    RwPrefUtils.stopFilterAddress = \"\";\n    RwPrefUtils.stopFilterType = 0;\n    RwPrefUtils.stopFilterDistance = 0;\n    RwPrefUtils.stopFilterHash = \"\";\n    RwPrefUtils.stopFilterHashAll = false;\n    RwPrefUtils.stopFilterColor = \"\";\n    this.space.isStopFiltered = false;\n    this.globals.commitStops();\n  }\n\n\n  //#endregion Filter\n\n\n  //#region Multi-Mode\n\n\n  onMultiEnter() {\n    //console.warn(\"onMultiEnter\");\n    this.space.clearPinSelections();\n    // if (!this.space.showPanelList && !this.space.showPanelMap){\n    //   this.space.showPanelMap=true;\n    // }\n    let mode = RwPrefUtils.planMultiModeDefault;\n    if (mode == 0) {\n      mode = 1;\n      RwPrefUtils.planMultiModeDefault = 1;\n    }\n    //console.warn(\"onMultiEnter set selectMode\", mode);\n    this.multiMode = mode;\n  }\n\n  onMultiExit() {\n    //this.space.clearPinSelections();\n    //console.warn(\"onMultiExit set selectMode\", RwMultiMode.none);\n    this.space.multiMode = RwMultiMode.none;\n\n    setTimeout(() => {\n      if (this.space.startPin) {\n        this.space.setPinSelection(this.space.startPin, true);\n      }\n    }, 100)\n  }\n\n  onMultiDelete() {\n    const self = this;\n    const SOURCE = \"RwPlanner.onMultiDelete\";\n\n    //Need to check mode; then delete selected types for selected mode\n    let pins = this.selectedPins;\n    let count = pins.length;\n    //console.log(SOURCE, count);\n    if (count > 0) {\n\n      switch (this.space.multiMode) {\n\n        case RwMultiMode.stops: {\n          let stops = pins.map(p => p.stop);\n          self.globals\n              .confirmAndDeleteStops(stops, [SOURCE])\n              .then(() => self.onMultiExit());\n          break;\n        }\n\n        case RwMultiMode.sites: {\n          let ids = pins.map(p => p.site.siteId);\n          self.globals\n              .confirmAndDeleteSites(ids)\n              .then(() => self.onMultiExit());\n          break;\n        }\n\n        case RwMultiMode.tasks: {\n          let ids = pins.map(p => p.task.stopId);\n\n          self.globals\n              .confirmAndDeleteTasks(ids)\n              .then(() => self.onMultiExit());\n          break;\n        }\n      }\n\n    } else {\n      RwLog.consoleError(SOURCE, \"WTF: count <= 0\");\n    }\n  }\n\n  addSitesToRoute(pins: RwPin[], route: RwRoute, count: number) {\n    const SOURCE = \"RwPlanner.addSitesToRoute\";\n\n    const sites = pins.map(p => p.site);\n    const sitesWithNoAddress = sites.filter(p => !p.address);\n    const podDefaults = RwPrefUtils.proofOfDelivery;\n\n    if (sitesWithNoAddress.length === 0) {\n      let nextSeq = route.nextSeq;\n      const stops: RwStop[] = [];\n      sites.forEach(site => {\n        let stop = route.createStopFromSite(site);\n        if (nextSeq) {\n          stop.seq = nextSeq;\n          nextSeq++;\n        }\n\n        if (this.globals.showProofOfDelivery && podDefaults > PODDefaultSettings.None) {\n          stop.addOns = new RwStopAddOns();\n          stop.addOns.stopId = stop.stopId;\n          stop.addOns.podPhoto = podDefaults === PODDefaultSettings.Photo || podDefaults === PODDefaultSettings.PhotoAndSignature;\n          stop.addOns.podSig = podDefaults === PODDefaultSettings.Signature || podDefaults === PODDefaultSettings.PhotoAndSignature;\n        }\n\n        stops.push(stop);\n      });\n\n      count = stops.length;\n      this.globals\n          .addStopsToRoute(stops, route)\n          .then(isCommitted => {\n            if (isCommitted) {\n              let stopsPlural = count == 1 ? 'stop' : 'stops';\n              this.globals.showSnack(`${count} ${stopsPlural} added to route`, \"success\");\n              this.onMultiExit();\n            } else {\n              this.globals.showSnack(`Not all stops could be added due to conflict.`, \"warning\");\n            }\n          })\n          .catch(err => {\n            RwLog.error(SOURCE, `Unhandled: ${err}`);\n            this.globals.showSnack(`Multi-Add to Route Failed. Please try again later`, \"error\");\n          });\n    } else {\n      RwLog.warn(SOURCE, `Trying to add site(s) with no address: ${JSON.stringify(sitesWithNoAddress.map(s => s.toJSON()))}`);\n      this.globals.showSnack(`One or more favorites has no address including ${sitesWithNoAddress[0].name}.\n          Please set an address before adding as a stop.`, \"error\");\n    }\n  }\n\n  onMultiAddToRoute() {\n    const self = this;\n    const SOURCE = \"RwPlanner.onMultiAddToRoute\";\n\n    let pins = this.selectedPins;\n    let count = pins.length;\n    if (count > 0) {\n      let route = this.activeRoute;\n\n      switch (self.space.multiMode) {\n        case RwMultiMode.sites:\n          const isChecked = RwPrefUtils.showConfirmMultiSiteToStop.find(routeId => route.routeId === routeId);\n          const exists = route.stops.find(stop => {\n            for (let pin of pins) {\n              if (pin.lat === stop.lat && pin.lng === stop.lng) return true;\n            }\n            return false;\n          });\n          if (exists && !isChecked) {\n            this.globals.showConfirmDialog(\n                'Add Stop?',\n                'Some addresses already exists on route. Do you want to add them anyway?',\n                'Confirm',\n                'Cancel',\n                true,\n                () => RwPrefUtils.showConfirmMultiSiteToStop = [...RwPrefUtils.showConfirmMultiSiteToStop, route.routeId]\n            )\n                .then(res => {\n                  if (res) this.addSitesToRoute(pins, route, count)\n                })\n          } else {\n            this.addSitesToRoute(pins, route, count)\n          }\n          break;\n        case RwMultiMode.tasks: {\n          let tasks = pins.map(p => p.task)\n              .filter(t => t !== null && t !== undefined);\n\n          let nextSeq = route.nextSeq;\n\n          self.globals\n              .addTasksToRoute(tasks, route, nextSeq)\n              .then(isCommitted => {\n                if (isCommitted) {\n\n                  let stopsPlural = count == 1 ? 'stop' : 'stops';\n                  self.globals.showSnack(`${count} ${stopsPlural} added to route`, \"success\");\n                  self.onMultiExit();\n                } else {\n                  self.globals.showSnack(`Not all stops could be added due to conflict.`, \"warning\");\n                }\n              })\n              .catch(err => {\n                if (this.globals.checkNotHandled(err)) RwLog.error(SOURCE, `Unhandled: ${err}`);\n                self.globals.showSnack(`Multi-Add to Route Failed. Please try again later`, \"error\");\n              });\n          break;\n        }\n      }\n\n    }\n  }\n\n  resolveSelectedMultiMode(pins: RwPin[]): boolean {\n    const SOURCE = \"RwPlannerList.resolveSelectedMultiMode\";\n    if (this.multiMode === RwMultiMode.none) {\n      // If somehow we have selected pins without multi mode type, try to check selected pins for type\n      const firstPinType = pins[0].type;\n      if (pins.filter(p => p.type === firstPinType).length === pins.length) {\n        switch (firstPinType) {\n            //@formatter:off\n          case RwPinTypes.Stop:\n            this.multiMode = RwMultiMode.stops;\n            break;\n          case RwPinTypes.Site:\n            this.multiMode = RwMultiMode.sites;\n            break;\n          case RwPinTypes.Task:\n            this.multiMode = RwMultiMode.tasks;\n            break;\n            //@formatter:on\n          default:\n            RwLog.error(SOURCE, `Multi mode none, mixed pin types selected:${JSON.stringify(pins)}`);\n            return false;\n        }\n        return true;\n      } else {\n        return false;\n      }\n    } else {\n      return true;\n    }\n  }\n\n  onMultiColor() {\n    const self = this;\n    //console.log(\"onMultiColor\");\n    let SOURCE = 'RwPlanner.onMultiColor';\n\n    let pins = this.selectedPins;\n    if (pins && pins.length > 0) {\n      const validSelectedMode = this.resolveSelectedMultiMode(pins)\n\n      if (validSelectedMode) {\n        self.globals\n            .showColorPicker(null)\n            .then(colorPick => {\n              //console.log(\"colorPick callback: \", colorPick);\n\n              if (colorPick && colorPick.length > 0) {\n\n                colorPick = colorPick.length > 7 ? colorPick.substr(0, 7) : colorPick;\n                let ntt: RwEntityTypes;\n                switch (this.multiMode) {\n                    //@formatter:off\n                  case RwMultiMode.stops:\n                    ntt = RwEntityTypes.Stop;\n                    break;\n                  case RwMultiMode.sites:\n                    ntt = RwEntityTypes.Site;\n                    break;\n                  case RwMultiMode.tasks:\n                    ntt = RwEntityTypes.Task;\n                    break;\n                    //@formatter:on\n                  default:\n                    RwLog.error(SOURCE, `Invalid multi mode selected:${this.multiMode}, pins: ${JSON.stringify(pins)}`);\n                    theGlobals.showSnack(\"Sorry, we had an error with your selected pins. Please select a pin type and try again.\");\n                    return;\n                }\n\n                let ids = pins.map(p => p.eid);\n                this.globals\n                    .multiColor(ntt, ids, colorPick.substring(0, 7))\n                    .then(isCommitted => {\n                      if (isCommitted) {\n                        //self.globals.showSnack(\"Color Updated\", \"success\");\n                        pins.forEach(pin => {\n                          pin.baseColor = colorPick;\n                          pin.invalidatePinImage();\n                          //console.log(\"colorPick callback: \", colorPick);\n                        });\n                        self.onMultiExit();\n\n                        setTimeout(() => self.globals.commitStops(), 100)\n                      } else {\n                        self.globals.showSnack(\"Color Update Failed\", \"error\");\n                      }\n                    })\n                    .then(() => this.globals.syncDelta())\n                    .catch(err => {\n                      self.globals.showSnack(\"Color Update Failed\", \"error\");\n                    });\n\n              }\n            });\n      } else {\n        theGlobals.showSnack(\"Sorry, we had an error with your selected pins. Please select a pin type and try again.\");\n        self.onMultiExit();\n      }\n    }\n  }\n\n  onMultiVisit() {\n    const self = this;\n    //console.log(\"onMultiVisit\");\n\n    let pins = this.selectedPins;\n    if (pins && pins.length > 0) {\n\n      self.globals\n          .showVisitPicker(1)\n          .then(visitPick => {\n            //console.log(\"showVisitPicker callback: \", visitPick);\n\n            let ntt: RwEntityTypes;\n            switch (this.multiMode) {\n                //@formatter:off\n              case RwMultiMode.stops:\n                ntt = RwEntityTypes.Stop;\n                break;\n              case RwMultiMode.sites:\n                ntt = RwEntityTypes.Site;\n                break;\n              case RwMultiMode.tasks:\n                ntt = RwEntityTypes.Task;\n                break;\n                //@formatter:on\n            }\n\n            let ids = pins.map(p => p.eid);\n            this.globals\n                .multiVisit(ntt, ids, visitPick)\n                .then(isCommitted => {\n                  if (isCommitted) {\n                    self.globals.showSnack(\"Visit Time Updated\", \"success\");\n                    pins.forEach(pin => {\n                      pin.visitTime = visitPick;\n                      pin.invalidatePinImage();\n                    });\n                    self.onMultiExit();\n                    self.globals.commitRoute();\n\n                    setTimeout(() => self.globals.commitStops(), 100)\n                  } else {\n                    self.globals.showSnack(\"Visit Time Update Failed\", \"error\");\n                  }\n                })\n                .catch(err => {\n                  self.globals.showSnack(\"Visit Time Update Failed\", \"error\");\n                });\n\n          });\n\n    }\n  }\n\n\n  onMultiSked() {\n    //console.log(\"onMultiSked\");\n    const self = this;\n\n    let pins = this.selectedPins;\n    if (pins && pins.length > 0) {\n\n      let stops = pins.map(p => p.stop);\n      let isTasks = this.multiMode === RwMultiMode.tasks;\n\n      self.globals\n          .multiSked(isTasks, stops)\n          .then(() => {\n            //This may be too brute force\n            pins.forEach(p => p.invalidatePinImage())\n            //self.globals.commitRoute();\n            self.onMultiExit()\n\n            setTimeout(() => self.globals.commitStops(), 100)\n          });\n\n    }\n  }\n\n  onMultiCopy() {\n    //console.log(\"onMultiCopy\");\n    const self = this;\n\n    let pins = this.selectedPins;\n    if (pins && pins.length > 0) {\n\n      let route = this.activeRoute;\n      let stops = pins.map(p => p.stop);\n\n      self.globals\n          .multiCopy(route, stops)\n          .then(() => {\n            self.onMultiExit()\n          });\n\n    }\n  }\n\n  //#endregion\n\n\n  //#region Tabs\n\n  onRouteView(route: RwRoute) {\n    //console.log(\"RwPlanner.onRouteView\");\n    this.space.setPinSelection(this.space.startPin, true, false);\n    this.space.onRouteView(this.activeRoute);\n    this.showingTabMenu = false;\n  }\n\n  onRouteEdit(route: RwRoute) {\n    this.space.onRouteEdit(route);\n    this.showingTabMenu = false;\n  }\n\n  tabClick(route: RwRoute, idx: number) {\n    RwPrefUtils.lastRouteId = route.routeId;\n    // console.warn(`tabClick: ${route.name}, ${route.plannerUrl}`);\n    let pin = this.space.startPin;\n    let isRouteSwitch = this.activeRoute.routeId !== route.routeId\n    //console.log(\"isRouteSwitch\", isRouteSwitch, this.activeRoute.routeId, route.routeId)\n\n    if (isRouteSwitch) {\n      if (this.space.isSelected(pin)) {\n        this.space.setPinSelection(pin, false);\n      }\n      this.space.activeRoute = route;\n      this.globals.targetFocusId = route.routeId;\n    } else {\n      this.space.setPinSelection(pin, true);\n      if (this.isDoubleClickTab(route)) {\n        this.space.forceShowDataView();\n      }\n    }\n\n  }\n\n  tabCloseClick(route: RwRoute) {\n    //console.log(`tabCloseClick: ${route.name}, ${route.plannerUrl}`);\n    this.closeTab(route);\n  }\n\n  isDoubleClickTab(route: RwRoute): boolean {\n    let isDoubleClick = false;\n\n    if (route && route === this.routeClicked) {\n      let timePassed = 0;\n      if (this.timeOfLastRouteClick) {\n        timePassed = moment().diff(this.timeOfLastRouteClick);\n        if (timePassed < 500) {\n          isDoubleClick = true;\n          //console.log(\"isDoubleClickTab timePassed < 500\");\n        }\n\n        // let elapsed = RwTextUtils.round4(timePassed);\n        // console.log(\"elapsed time: \", elapsed, this.timeOfLastPinClick);\n      }\n    } else {\n      //console.warn(\"isDoubleClickTab route != this.routeClicker\");\n    }\n\n    this.routeClicked = route;\n    this.timeOfLastRouteClick = moment();\n\n    return isDoubleClick;\n  }\n\n  closeTab(route: RwRoute) {\n    this.space.closeRoute(route);\n  }\n\n  closeAllTabs() {\n    //console.warn(\"closeAllTabs\")\n    let self = this;\n    if (self.openRoutes) {\n      this.space.multiCloseRoutes(self.openRoutes, true);\n    }\n  }\n\n  closeOtherTabs(routeKeep: RwRoute) {\n    let self = this;\n    self.$route.params.routeId = routeKeep.routeId;\n    //console.warn(\"closeOtherTabs routeKeep\", routeKeep.name);\n    if (self.openRoutes) {\n\n      //First just get the ids\n      let routesToClose: RwRoute[] = [];\n      self.openRoutes.forEach(route => {\n        if (route.routeId != routeKeep.routeId) {\n          routesToClose.push(route);\n        }\n      });\n\n      if (routesToClose.length > 0) {\n        this.space.multiCloseRoutes(routesToClose);\n        if (routeKeep != this.space.activeRoute) {\n          this.space.activeRoute = routeKeep;\n        }\n      }\n    }\n  }\n\n  showTabContextMenu(e, idxRoute: number, route: RwRoute) {\n    //console.log(\"showTabContextMenu called\");\n    let self = this;\n    self.contextRoute = route;\n    self.contextIdx = idxRoute;\n    self.contextUrl = route.plannerUrl;\n\n    e.preventDefault();\n    this.showingTabMenu = false;\n    this.contextMenuX = e.clientX;\n    this.contextMenuY = e.clientY;\n    this.$nextTick(() => {\n      self.showingTabMenu = true\n    })\n  }\n\n  tabMenuClick(idxClick: number) {\n    //console.warn(\"contextMenuClick() \", idxClick, this.contextIdx, this.contextRoute);\n\n    let route = this.contextRoute;\n    let idxTab = this.contextIdx;\n    if (this.contextRoute) {\n      switch (idxClick) {\n        case 0: { //close this\n          this.showingTabMenu = false;\n          this.closeTab(route);\n          break;\n        }\n        case 1: { //close others\n          this.showingTabMenu = false;\n          this.closeOtherTabs(route);\n          break;\n        }\n        case 2: { //close all\n          this.showingTabMenu = false;\n          this.closeAllTabs();\n          setTimeout(() => this.space.closeRoute(route), 100);\n          break;\n        }\n        case 3: { //view route\n          this.showingTabMenu = false;\n          // this.space.activeRoute=this.contextRoute;\n          this.tabClick(route, idxTab);\n          setTimeout(() => this.onRouteView(this.activeRoute), 100);\n          break;\n        }\n        case 4: { //edit route\n          this.showingTabMenu = false;\n          // this.space.activeRoute=this.contextRoute;\n          this.tabClick(route, idxTab);\n          setTimeout(() => this.onRouteEdit(this.activeRoute), 100);\n          break;\n        }\n\n      }\n    }\n\n    this.space.sizeDelta++;\n  }\n\n\n  //#endregion\n\n\n  //#region Search\n\n  onSearchClick() {\n    //console.log(\"onSearchClick\")\n    if (this.activeRoute) {\n      if (this.isMobile) return this.mobilePanelTabsIdx = 0;\n      this.globals.showSearchPanel = true;\n    } else {\n      this.globals.showSnack(\"No Active Route\", \"error\");\n    }\n  }\n\n  toggleSearch() {\n    this.showSearch = !this.showSearch;\n    this.search = \"\";\n    if (this.showSearch) {\n      let txtSearchAny = this.$refs.txtSearch as any;\n      this.$nextTick(() => txtSearchAny.focus());\n    }\n  }\n\n\n  //#endregion\n\n\n  //#region General User Events\n\n  onMultiToolClick(idx) {\n    //console.warn('onMultiToolClick', idx);\n    this.multiModeTool = idx;\n    this.showMultiToolSelector = false;\n  }\n\n  onMultiModeClick(idx) {\n    //console.warn('onMultiModeClick', idx);\n    this.multiMode = idx;\n    this.showMultiModeSelector = false;\n  }\n\n  onOrderClick() {\n    //console.log(\"onOrderClick\", this.space.showRouteOrder);\n    const self = this;\n    if (self.activeRoute) {\n      const route = self.activeRoute;\n      const stops = route.getActiveStops();\n      if (route.finishTime == null) {\n        let newFinishTime = RwDateUtils.addMinutesToDate(route.startTime, RwPrefUtils.routeSpan);\n        route.finishTime = newFinishTime;\n        //route.setFinishDate(\"onOrderClick\", newFinishTime)\n      }\n      let stopsCount = stops ? stops.length : 0;\n      if (stopsCount > 0) {\n        if (stopsCount <= self.space.maxRouteSize) {\n          this.space.showRouteOrder = true;\n          //console.log(\"onOrderClick showRouteOrder\", this.space.showRouteOrder);\n        } else {\n          self.globals.showSnack(\"Over Route Size limit\", \"error\");\n        }\n      } else {\n        self.globals.showSnack(\"No Active Stops\", \"error\");\n      }\n    } else {\n      self.globals.showSnack(\"No Active Route\", \"error\");\n    }\n  }\n\n\n  onRouteAddPicker() {\n    this.globals\n        .showRouteNew(false, null)\n        .then(pick => {\n          //console.log(\"onRouteAddClick callback\", pick);\n          if (pick) {\n            this.space.openRouteInPlanner(pick);\n            if (this.globals.editAfterAdd) this.globals.showRouteEdit(pick);\n          }\n        });\n  }\n\n  onDataLayers() {\n    this.space.showDataLayers = true;\n  }\n\n  onClusterPick(pin: RwPin) {\n    //console.log(\"onClusterPick subPin\", pin ? pin.title : \"no pin\");\n    //pin.isSelected = true;\n    this.space.setPinSelection(pin, true, false);\n\n    if (!this.globals.showPinPanel) {\n      this.globals.showPinPopup = true;\n    }\n  }\n\n\n  onRoutePick(pick: RwRoutePick) {\n    //console.log('RwPlanner.onRoutePick');\n    this.globals.onRoutePick(pick)\n  }\n\n  onAssignClick() {\n    if (this.globals.isDisp) {\n      if (this.activeRoute) {\n        this.globals.assignRoute(this.activeRoute);\n      } else {\n        this.globals.showSnack(\"No Active Route\", \"error\");\n      }\n    }\n  }\n\n  onPushDismiss() {\n    if (this.globals.isDisp) {\n      if (this.activeRoute) {\n        this.globals.lastRouteDeltaMS = 0;\n        //this.lastPushTS = Date.now();\n        this.lastPushId = this.activeRoute.routeId;\n        RwEventBus.$emit(RwEvents.MapReRender);\n      }\n    }\n  }\n\n  onPushClick() {\n    if (this.globals.isDisp) {\n      if (this.activeRoute) {\n        this.globals.lastRouteDeltaMS = 0;\n        this.lastPushTS = Date.now();\n        this.lastPushId = this.activeRoute.routeId;\n        this.globals\n            .pushUpdateToDriver(this.activeRoute);\n\n        RwEventBus.$emit(RwEvents.MapReRender);\n      } else {\n        this.globals.showSnack(\"No Active Route\", \"error\");\n      }\n    }\n  }\n\n  onWindowHeight() {\n    this.windowHeight = document.documentElement.clientHeight + \"px\";\n    this.windowHeightPx = document.documentElement.clientHeight;\n  }\n\n  resetInvalidPinBanner() {\n    this.space.showInvalidPinBanner = false;\n    this.space.invalidPinError = \"\";\n    this.space.invalidPinIcon = \"\";\n  }\n\n  checkCCValid() {\n    let CCValid: number = 0;\n    if (this.space.cardExpiryYearNum != 0) {\n      if (this.space.currentYearNum === this.space.cardExpiryYearNum) {\n        if (this.space.currentMonthNum === this.space.cardExpiryMonthNum) {\n          //card expires end of this month\n          CCValid = 1;\n        } else if (this.space.cardExpiryMonthNum - this.space.currentMonthNum === 1) {\n          //card expires end of next month\n          CCValid = 2;\n        } else if (this.space.currentMonthNum - this.space.cardExpiryMonthNum > 0) {\n          //card is past expiration\n          CCValid = 3;\n        } else {\n          //card not expiring soon\n          CCValid = 4;\n        }\n        //card expires next year:\n      } else if (this.space.cardExpiryYearNum - this.space.currentYearNum === 1) {\n        if (this.space.cardExpiryMonthNum === 1) {\n          if (this.space.currentMonthNum == 12) {\n            //card expires end of next month - Jan Expiration\n            CCValid = 2;\n          }\n        } else {\n          //card not expiring soon\n          CCValid = 4;\n        }\n        //card expired last year:\n      } else if (this.space.currentYearNum - this.space.cardExpiryYearNum > 0) {\n        //card past expiration\n        CCValid = 3;\n      } else {\n        //card not expiring soon\n        CCValid = 4;\n      }\n    }\n    this.promptCCPopUp(CCValid);\n  }\n\n  promptCCPopUp(val: number) {\n    let SOURCE = 'RwPlanner.promptCCPopup'\n    let day = new Date().getDate().toString();\n    switch (val) {\n      case 0:\n        RwLog.warn(SOURCE, \"CCValid not set\");\n        break;\n      case 1:\n        // console.warn(\"case 1 reached -- Card Expires at end of current month\");\n        if (!this.globals.hideCCPopup) {\n          // console.warn(\"popupWarned vals:\", this.globals.warnedCCPopup);\n          if ((!this.globals.warnedCCPopup.includes(day)) && this.isOdd(day)) {\n            this.globals.valCCPopup = val;\n            let dateArray = this.globals.warnedCCPopup;\n            dateArray.push(day);\n            this.globals.warnedCCPopup = dateArray;\n            this.globals.showCCExpire = true;\n          }\n          // else{\n          //   console.warn(\"array already contains date OR date is even, popup trigger skipped\");\n          // }\n        }\n        break;\n      case 2:\n        // console.warn(\"case 2 reached -- Card Expires at end of next month\");\n        // INTENTIONAL comment out for now -- only going to warn user during month of expiration at the moment\n        // if(!this.globals.hideCCPopup){\n        //   this.globals.showCCExpire=true;\n        //   this.globals.valCCPopup=val;\n        // }\n        break;\n      case 3:\n        // console.warn(\"case 3 reached -- Card is past expiration\");\n        if (this.globals.warnedCCPopup.length > 1) {\n          this.globals.warnedCCPopup = [];\n          // console.warn(\"this.globals.warnedCCPopup reset to []\")\n        }\n        if (!this.globals.hideCCPopup) {\n          if (!this.globals.warnedCCPopupOverdue.includes(day)) {\n            this.globals.valCCPopup = val;\n            let dateArray = this.globals.warnedCCPopupOverdue;\n            dateArray.push(day);\n            this.globals.warnedCCPopupOverdue = dateArray;\n            this.globals.showCCExpire = true;\n            // console.warn(\"popupOverdue vals:\", this.globals.warnedCCPopupOverdue);\n          }\n          // else{\n          //   console.warn(\"array already contains date, popup trigger skipped\");\n          // }\n        }\n        break;\n      case 4:\n        // console.warn(\"case 4 reached -- Card will not expire soon\");\n        if (this.globals.warnedCCPopup.length > 0) {\n          this.globals.warnedCCPopup = [];\n        }\n        if (this.globals.warnedCCPopupOverdue.length > 0) {\n          this.globals.warnedCCPopupOverdue = [];\n        }\n        if (this.globals.hideCCPopup) {\n          this.globals.hideCCPopup = false;\n        }\n        break;\n    }\n  }\n\n  isOdd(val: string) {\n    let n = Number(val);\n    return Math.abs(n % 2) == 1;\n  }\n\n\n  //#endregion General User Events\n\n\n  //#region LifeCycle\n\n  get isMobile() {\n    return this.globals.isMobileView;\n  }\n\n  mounted() {\n    this.space.getBillingInfos()\n    let routeId = this.$route.params.routeId;\n    let route = this.activeRoute;\n\n    //Monitor Planner Loading Multiple Times\n    //console.log(`RwPlanner.mounted`, routeId);\n\n    if (routeId && this.routes) {\n      //console.log(`RwPlanner.setActiveRouteById`, routeId);\n      this.space.setActiveRouteById(routeId);\n      // this.globals.commitRoute();\n      // this.globals.commitStops();\n    }\n    this.$nextTick(function () {\n      window.addEventListener('resize', this.onWindowHeight);\n    });\n    this.onWindowHeight();\n    if (this.globals.isFlexOwner && this.globals.isAutoRenewing) {\n      setTimeout(this.checkCCValid, 5000);\n    }\n  }\n\n  // activated() {\n  //   let routeId = this.$route.params.routeId;\n  //   let route = this.activeRoute;\n  //   //console.log(`RwPlanner.activated`, routeId, route ? route.name : \"null\");\n  // }\n\n  //#endregion LifeCycle\n\n  onCopyMoveTasks(move) {\n    let pins = [...this.selectedPins];\n    if (pins && pins.length > 0) {\n      const promises = pins.map(pin => new Promise((resolve, reject) => this.space.addTaskFromPin(pin, resolve, reject)));\n      if (move) {\n        Promise.all(promises)\n            .then(() => {\n              let stops = pins.map(pin => pin.stop).filter(s => s !== undefined && s !== null);\n              this.globals.deleteStops(stops, [\"RwPlanner.onCopyMoveTasks\"]);\n            })\n      }\n    }\n    this.onMultiExit();\n  }\n\n  forceDropUpdateFlag = false;\n\n  forceDropUpdate() {\n    /*(this.$refs.plannerList as any).forceDropUpdate.bind(this.$refs.plannerList);\n    (this.$refs.plannerList as any).forceDropUpdate();*/\n    this.forceDropUpdateFlag = !this.forceDropUpdateFlag;\n  }\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlanner.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlanner.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlanner.vue?vue&type=style&index=0&id=1fbe2c65&prod&lang=scss&scoped=true&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwPlanner.vue?vue&type=style&index=1&id=1fbe2c65&prod&lang=css&\"","import { render, staticRenderFns } from \"./RwPlanner.vue?vue&type=template&id=1fbe2c65&scoped=true&\"\nimport script from \"./RwPlanner.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwPlanner.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwPlanner.vue?vue&type=style&index=0&id=1fbe2c65&prod&lang=scss&scoped=true&\"\nimport style1 from \"./RwPlanner.vue?vue&type=style&index=1&id=1fbe2c65&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1fbe2c65\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFabTransition } from 'vuetify/lib/components/transitions';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VCard,{ref:\"cardStopView\",staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},attrs:{\"height\":\"100\"}},[_c(VToolbar,{attrs:{\"max-height\":\"48px\",\"dense\":\"\",\"color\":_vm.globals.backColorBar}},[(_vm.stop)?_c(VImg,{attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.stop ? _vm.stop.dataUrl ? _vm.stop.dataUrl : '' : '',\"max-width\":\"32\"}}):_vm._e(),_c(VToolbarTitle,{staticClass:\"ml-2\"},[_vm._v(\" \"+_vm._s(_vm.stop ? _vm.stop.name : \"Select Task\"))]),_c(VSpacer),(_vm.stop)?_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [(_vm.stop)?_c(VBtn,{attrs:{\"icon\":\"\"},on:{\"click\":_vm.onClickEdit}},[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1):_vm._e()]}}],null,false,3094908607)},[_c('span',{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Edit\")])]):_vm._e(),(_vm.stop)?_c(VMenu,{scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"}},on),[_c(VIcon,[_vm._v(\"mdi-dots-vertical\")])],1)]}}],null,false,2097855828)},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[(!_vm.stop.isTask)?_c(VSubheader,[_vm._v(\"Stop Actions\")]):_vm._e(),(_vm.stop.isTask)?_c(VSubheader,[_vm._v(\"Task Actions\")]):_vm._e(),_c(VDivider),_c(VListItem,{on:{\"click\":function($event){return _vm.onClickEdit()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1),_c(VListItemTitle,[_vm._v(\"Edit\")])],1),(_vm.globals.isActionAvailable(_vm.globals.Actions.deleteStops))?_c(VListItem,{on:{\"click\":function($event){return _vm.onDeleteClick()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,[_vm._v(\"Delete\")])],1):_vm._e(),(!_vm.plan.isStopCompleted(_vm.plan.selectedPin) && !_vm.stop.isTask)?_c(VListItem,{on:{\"click\":function($event){return _vm.plan.onStopCheckIn(_vm.plan.selectedPin, true, _vm.onClickViewCheckIn)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check-circle\")])],1),_c(VListItemTitle,[_vm._v(\"Check-In\")])],1):(!_vm.stop.isTask)?_c(VListItem,{on:{\"click\":function($event){return _vm.plan.onStopRestore(_vm.plan.selectedPin)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-checkbox-blank-circle\")])],1),_c(VListItemTitle,[_vm._v(\"Restore\")])],1):_vm._e(),(!_vm.stop.isTask && _vm.plan.isStopCompleted(_vm.plan.selectedPin))?_c(VListItem,{on:{\"click\":_vm.onClickViewCheckIn}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"View Check-In\")])],1):_vm._e(),_c(VDivider),(_vm.plan.canStopAddSite(_vm.plan.selectedPin))?_c(VListItem,{on:{\"click\":function($event){return _vm.plan.onStopAddSite(_vm.plan.selectedPin)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-star\")])],1),_c(VListItemTitle,[_vm._v(\"Add Favorite\")])],1):_vm._e(),(_vm.plan.canShowSkeds(_vm.plan.selectedPin) && !_vm.plan.isStopScheduled(_vm.plan.selectedPin))?_c(VListItem,{on:{\"click\":function($event){return _vm.onStopAddSked(_vm.plan.selectedPin)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-calendar-clock\")])],1),_c(VListItemTitle,[_vm._v(\"Add Schedule\")])],1):_vm._e(),(_vm.plan.canShowSkeds(_vm.plan.selectedPin) &&\n                    _vm.plan.isStopScheduled(_vm.plan.selectedPin) &&\n                    _vm.globals.isActionAvailable(_vm.globals.Actions.deleteSked))?_c(VListItem,{on:{\"click\":function($event){return _vm.plan.onStopRemoveSked(_vm.plan.selectedPin)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-calendar-clock\")])],1),_c(VListItemTitle,[_vm._v(\"Remove Schedule: \"+_vm._s(_vm.plan.stopSkedText(_vm.plan.selectedPin))+\" \")])],1):_vm._e(),(_vm.plan.canShowMarkFirst(_vm.plan.selectedPin))?_c(VListItem,{on:{\"click\":function($event){return _vm.plan.onStopMarkFirst(_vm.plan.selectedPin)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-first\")])],1),_c(VListItemTitle,[_vm._v(\"Mark First\")])],1):_vm._e(),(_vm.plan.canShowUnmarkFirst(_vm.plan.selectedPin))?_c(VListItem,{on:{\"click\":function($event){return _vm.plan.onStopUnmarkFirst(_vm.plan.selectedPin)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-first\")])],1),_c(VListItemTitle,[_vm._v(\"Unmark First\")])],1):_vm._e(),(_vm.plan.canShowMarkFinal(_vm.plan.selectedPin))?_c(VListItem,{on:{\"click\":function($event){return _vm.plan.onStopMarkFinal(_vm.plan.selectedPin)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-last\")])],1),_c(VListItemTitle,[_vm._v(\"Mark Final\")])],1):_vm._e(),(_vm.plan.canShowUnmarkFinal(_vm.plan.selectedPin))?_c(VListItem,{on:{\"click\":function($event){return _vm.plan.onStopUnmarkFinal(_vm.plan.selectedPin)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-page-last\")])],1),_c(VListItemTitle,[_vm._v(\"Unmark Final\")])],1):_vm._e(),(_vm.stop.isTask)?_c(VListItem,{on:{\"click\":function($event){return _vm.addTaskToRoute(_vm.stop)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-arrow-right\")])],1),_c(VListItemTitle,[_vm._v(\"Move to Route\")])],1):_vm._e(),_c(VDivider),(_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onPop()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-window-restore\")])],1),_c(VListItemTitle,[_vm._v(\"Float Panel\")])],1):_vm._e(),(_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onCloseDock()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close-box\")])],1),_c(VListItemTitle,[_vm._v(\"Close Panel\")])],1):_vm._e(),(!_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onDock()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-dock-right\")])],1),_c(VListItemTitle,[_vm._v(\"Dock Window\")])],1):_vm._e(),(!_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onClosePop()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close-box\")])],1),_c(VListItemTitle,[_vm._v(\"Close Window\")])],1):_vm._e()],1)],1):_vm._e()],1),(_vm.stop)?_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme,staticStyle:{\"height\":\"calc(100% - 98px)\",\"width\":\"100%\",\"overflow-y\":\"auto\"}},[(_vm.stop.violations)?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Violations: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.stop.violationText)+\". Please review the stop. \")]),_c(VIcon,{attrs:{\"color\":\"warning\"}},[_vm._v(\"warning\")])],1):_vm._e(),_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Name: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.stop.name)+\" \")])]),_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Address: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.stop.address)+\" \")])]),(_vm.stop.phone)?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Phone: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.stop.phone)+\" \")])]):_vm._e(),(_vm.stop.email)?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Email: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.stop.email)+\" \")])]):_vm._e(),_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Visit Time: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.stop.visitTimeText)+\" \")])]),(_vm.stop.isScheduled)?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Scheduled: \")]),_c('div',{staticClass:\"ellipseStateText\",class:_vm.stop.isActive ? '': 'red',style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.stop.skedText)+\" \")])]):_vm._e(),(_vm.stop.hasDrops())?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Drop Stop: \")]),_c('div',{staticClass:\"ellipseStateText drop-hover\",style:(_vm.finalLength),on:{\"click\":_vm.goToDropStop}},[_vm._v(\" \"+_vm._s(_vm.dropStopName)+\" \")])]):_vm._e(),_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Display Color: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_c(VIcon,{attrs:{\"color\":_vm.stop.baseColor}},[_vm._v(_vm._s(_vm.stop.isTask ? 'mdi-clipboard-check' : 'mdi-map-marker')+\" \")])],1)]),(_vm.stop.isSited)?_c(VRow,{staticClass:\"px-3 favorite-row\",attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"},on:{\"click\":_vm.openSite}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Favorite: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.site.name === _vm.stop.name ? '' : _vm.site.name)+\" \"),_c(VImg,{staticClass:\"favorite-icon-separator\",attrs:{\"src\":_vm.site.dataUrl}}),_c(VIcon,[_vm._v(\"chevron_right\")])],1)]):_vm._e(),(_vm.stop.note)?_c(VRow,{staticClass:\"px-3 d-flex mt-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"start\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Instructions: \")]),_c('div',[(_vm.showTooltip(_vm.stop.note))?_c(VIcon,{staticStyle:{\"float\":\"right\"},on:{\"click\":_vm.toggleNoteVisibility}},[_vm._v(\" \"+_vm._s(_vm.noteVisibility ? 'visibility_off' : 'visibility')+\" \")]):_vm._e(),_c('pre',{class:`${_vm.noteVisibility ? 'noteText' : 'ellipseStateText'}`,style:(_vm.finalLength)},[_vm._v(\"      \"+_vm._s(_vm.stop.note)+\"\\n    \")])],1)]):_vm._e(),(_vm.globals.showProofOfDelivery)?_c(VRow,{staticClass:\"px-3 flex-column text-left\",attrs:{\"no-gutters\":\"\"}},[(!!_vm.stop.addOns.itemToDeliver?.trim())?_c(VRow,{staticClass:\"d-flex\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\",\"align\":\"center\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Item: \")]),_c('div',{staticStyle:{\"font-size\":\"small\",\"font-weight\":\"bold\"}},[_vm._v(\" \"+_vm._s(_vm.stop.addOns.itemToDeliver.trim())+\" \")])]):_vm._e(),_c(VRow,{staticClass:\"d-flex\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\",\"align\":\"center\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Proof of Delivery requested: \")]),_c('div',{staticStyle:{\"font-size\":\"small\",\"font-weight\":\"bold\"}},[_vm._v(\" \"+_vm._s(_vm.getProofOfDeliveryText())+\" \")])])],1):_vm._e(),(_vm.stopCheckIn)?_c(VRow,{staticClass:\"px-3 favorite-row\",staticStyle:{\"height\":\"48px\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"},on:{\"click\":_vm.onClickViewCheckIn}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Currently checked in: \")]),_c('div',{staticClass:\"ellipseStateText\",staticStyle:{\"display\":\"flex\",\"align-items\":\"center\"},style:(_vm.finalLength)},[(_vm.globals.showProofOfDelivery && _vm.getProofOfDeliveryStatus().text)?_c('span',{staticStyle:{\"margin-right\":\"10px\"}},[(_vm.getProofOfDeliveryStatus().icon)?_c(VIcon,{style:({ color: _vm.getProofOfDeliveryStatus().icon === 'check' ? '#06C96B' : '#E2004F', fontSize: '20px', marginBottom: '2px' })},[_vm._v(\" \"+_vm._s(_vm.getProofOfDeliveryStatus().icon === 'check' ? 'mdi-check-circle-outline' : 'close')+\" \")]):_vm._e(),_vm._v(\" \"+_vm._s(_vm.getProofOfDeliveryStatus().text)+\" \")],1):_vm._e(),_c('span',{staticStyle:{\"height\":\"24px\"}},[_vm._v(_vm._s(_vm.stopCheckIn.formattedStartTime))]),_c('span',[_c(VIcon,[_vm._v(\"chevron_right\")])],1)])]):_vm._e(),(_vm.stopCheckIn)?_c(VRow,{staticClass:\"px-3 text-left flex-column mt-2\",attrs:{\"no-gutters\":\"\"}},[(_vm.stopCheckIn.photoLink)?_c('div',[_c('div',[_vm._v(\" Delivery Confirmation: \")]),_c('div',[_c(VImg,{attrs:{\"src\":_vm.stopCheckIn.photoLink}})],1)]):_vm._e()]):_vm._e()],1):_vm._e(),_c(VCardActions,{staticStyle:{\"height\":\"48px\",\"width\":\"100%\"}},[(_vm.showStopButtons)?_c(VRow,{attrs:{\"align\":\"center\",\"justify\":\"space-between\",\"no-gutters\":\"\"}},[_c(VFabTransition,[_c(VBtn,{staticClass:\"ml-4 mb-6\",attrs:{\"small\":\"\",\"disabled\":!_vm.canMovePrior,\"top\":\"\",\"left\":\"\",\"fab\":\"\"},on:{\"click\":_vm.onStopPrior}},[_c(VIcon,[_vm._v(\"mdi-rewind\")])],1)],1),_c(VFabTransition,[_c(VBtn,{staticClass:\"mr-4 mb-6\",attrs:{\"small\":\"\",\"disabled\":!_vm.canMoveNext,\"top\":\"\",\"right\":\"\",\"fab\":\"\"},on:{\"click\":_vm.onStopNext}},[_c(VIcon,[_vm._v(\"mdi-fast-forward\")])],1)],1)],1):_vm._e()],1),_c(VDivider)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Prop, Vue, Watch} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlan, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport {RwStop} from \"@/app/dem/RwStop\";\nimport {RwPin} from \"@/app/dem/RwPin\";\nimport {RwSite} from \"@/app/dem/RwSite\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport RwEventBus from \"@/utils/RwEventBus\";\nimport RwEvents from \"@/app/consts/RwEvents\";\nimport {RwSysUtils} from \"@/app/utils/RwSysUtils\";\nimport {RwTaskHistory} from \"@/app/dal/RwTaskHistory\";\nimport RwPODThumbnail from \"@/app/views/components/RwPODThumbnail.vue\";\nimport {ConfirmationType} from \"@/app/dem/ProofOfDelivery/ProofOfDeliveryEnums\";\n\n@Component({\n    components: {RwPODThumbnail}\n})\nexport default class RwStopView extends Vue {\n    @Prop(Boolean) readonly popup: boolean;\n    @Prop(RwStop) readonly stop: RwStop;\n    @Prop({default: false}) readonly isTaskList: boolean;\n    ///region Props\n\n    ConfirmationType = ConfirmationType;\n\n    isMounted = false;\n    noteVisibility = false;\n\n    get globals(): RwGlobals {\n        return theGlobals\n    };\n\n    get plan(): RwPlannerSpace {\n        return thePlan;\n    };\n\n\n    get isDarkMode(): boolean {\n        return this.globals.isDarkMode;\n    }\n\n    get isDocked(): boolean {\n        let isPopup = this.popup ? this.popup : false;\n        let isDocked = !isPopup;\n        //console.log(\"RwStopView isPopup, isDocked\", this.isPopup, isDocked);\n        return isDocked;\n    }\n\n    get showStopButtons(): boolean {\n        let show = false;\n        if (this.stop && !this.stop.isTask) {\n            show = this.stop.seq >= 1 && this.stop.seq <= 240;\n            //console.log(\"showStopButtons\", this.stop.isTask, this.stop.seq, show);\n        }\n        return show;\n    }\n\n    get dropStopName(): string {\n        if (this.stop?.hasDrops()) {\n            let dropStop = this.stop.getDrop();\n            if (dropStop) {\n                return dropStop.name;\n            }\n        }\n\n        return \"\";\n    }\n\n    get site(): RwSite | null {\n        if (this.stop.isSited) return this.stop.getSite();\n        return null;\n    }\n\n    get stopCheckIn() {\n        return this.globals.selectedHistoryItem;\n    }\n\n    //#endregion\n\n\n    //#region User Actions\n\n    goToDropStop() {\n        let dropStop = this.stop?.getDrop();\n        if (dropStop) {\n            let dropPin = this.plan.stopPins.find(p => p.isStop && p.stop?.stopId === dropStop.stopId);\n            if (dropPin) {\n                this.plan.setPinSelection(dropPin, true, true);\n            }\n        }\n    }\n\n    onClickViewCheckIn() {\n        if (this.stopCheckIn) {\n            this.plan.previousPin = this.plan.selectedPin;\n            this.plan.selectedPin = null;\n            this.globals.showHistoryPop = true;\n        }\n    }\n\n    onClickEdit() {\n        if (this.stop) {\n            this.globals.showStopEdit(this.stop);\n            this.onClosePop();\n        }\n    }\n\n\n    onDeleteClick() {\n        const SOURCE = \"RwStopView.onDeleteClick\";\n        const self = this;\n        if (this.stop) {\n            if (this.stop.isTask) {\n                let task = this.stop;\n                this.globals\n                    .confirmAndDeleteTask(task)\n                    .then((isDeleted) => {\n                        //console.log(\"RwStopView.onDeleteClick TASK isDeleted\", isDeleted)\n                        if (isDeleted) {\n                            self.onDeleted()\n                        }\n                    });\n            } else {\n                let stop = this.stop;\n                this.globals\n                    .confirmAndDeleteStop(stop, [SOURCE])\n                    .then((isDeleted) => {\n                        //console.log(\"RwStopView.onDeleteClick STOP isDeleted\", isDeleted)\n                        if (isDeleted) {\n                            self.onDeleted()\n                            if (stop.isRouted) {\n                                this.plan.activeRoute.path = \"\";\n                                this.globals.updateRouteDB(this.plan.activeRoute, false)\n                                    .then(updated => {\n                                        if (updated) {\n                                            RwEventBus.$emit(RwEvents.RouteRefresh);\n                                        } else {\n                                            RwLog.warn(SOURCE, `Unable to clear route path after stop del ${stop.stopId}`);\n                                        }\n                                    })\n                                    .catch(err => {\n                                        RwLog.error(SOURCE, `Unable to clear route path after stop del ${stop.stopId},\\n\\n err:${JSON.stringify(err)}`);\n                                    });\n                            }\n                        }\n                    });\n            }\n        }\n    }\n\n    getProofOfDeliveryText() {\n        const requested = [];\n        if (this.stop.addOns.podPhoto) {\n            requested.push(\"Photo\");\n        }\n        if (this.stop.addOns.podBar) {\n            requested.push(\"Barcode\");\n        }\n        if (this.stop.addOns.podSig) {\n            requested.push(\"Signature\");\n        }\n        return requested.length ? requested.join(', ') : \"None\";\n    }\n\n    getProofOfDeliveryStatus() {\n        const photoRequested = this.stop.addOns.podPhoto;\n        const sigRequested = this.stop.addOns.podSig;\n        const photoCollected = !!this.stopCheckIn.getMedia(ConfirmationType.Photo);\n        const sigCollected = !!this.stopCheckIn.getMedia(ConfirmationType.Signature);\n        const noneRequested = !photoRequested && !sigRequested;\n        const allCollected = photoRequested && photoCollected && sigRequested && sigCollected;\n        const someCollected = (photoRequested && photoCollected && sigRequested && !sigCollected) ||\n            (photoRequested && !photoCollected && sigRequested && sigCollected);\n        const photoMissing = photoRequested && !photoCollected && !sigRequested;\n        const sigMissing = sigRequested && !sigCollected && !photoRequested;\n        const allMissing = photoRequested && !photoCollected && sigRequested && !sigCollected;\n\n        if (noneRequested) return {icon: null, text: null};\n        if (allCollected) return {icon: 'check', text: 'Photo and signature'};\n        if (someCollected) return {icon: 'close', text: `${!photoCollected ? ' No photo' : 'No signature'}`};\n        if (allMissing) return {icon: 'close', text: 'No photo or signature'};\n        if (photoMissing) return {icon: 'close', text: 'No photo'};\n        if (sigMissing) return {icon: 'close', text: 'No signature'};\n        if (photoCollected) return {icon: 'check', text: 'Photo'};\n        if (sigCollected) return {icon: 'check', text: 'Signature'};\n        return {icon: null, text: null};\n    }\n\n    get canMovePrior(): boolean {\n        let canMove = false;\n        let pin = this.priorPin;\n        if (pin) {\n            canMove = true;\n        }\n        return canMove;\n    }\n\n\n    get canMoveNext(): boolean {\n        let canMove = false;\n        let pin = this.nextPin;\n        if (pin) {\n            canMove = true;\n        }\n        return canMove;\n    }\n\n\n    onStopPrior() {\n        //console.log(\"onStopPrior\")\n        let pin = this.priorPin;\n        if (pin) {\n            this.plan.setPinSelection(pin, true, true)\n        }\n    }\n\n\n    onStopNext() {\n        //console.log(\"onStopNext\")\n        let pin = this.nextPin;\n        if (pin) {\n            this.plan.setPinSelection(pin, true, true)\n        }\n    }\n\n    get priorPin(): RwPin {\n        let pin: RwPin;\n        let pins = this.plan.stopPins;\n        if (this.plan.selectedPin && this.plan.selectedPin.stop === this.stop) {\n            if (this.stop.seq > 0 && this.stop.seq <= 240) {\n                for (let n = this.stop.seq - 1; n > 0; n--) {\n                    let priorStopPin = pins.find(p => p.seq === n);\n                    if (priorStopPin) {\n                        pin = priorStopPin;\n                        break;\n                    }\n                }\n            }\n        }\n        return pin;\n    }\n\n    get nextPin(): RwPin {\n        let pin: RwPin;\n        let pins = this.plan.stopPins;\n        if (this.plan.selectedPin && this.plan.selectedPin.stop === this.stop) {\n            if (this.stop.seq > 0 && this.stop.seq <= 240) {\n                for (let n = this.stop.seq + 1; n <= 240; n++) {\n                    let nextStopPin = pins.find(p => p.seq === n);\n                    if (nextStopPin) {\n                        pin = nextStopPin;\n                        break;\n                    }\n                }\n            }\n        }\n        return pin;\n    }\n\n    onStopAddSked(pin: RwPin) {\n        this.plan.onStopAddSked(pin);\n    }\n\n    //#endregion User Actions\n\n\n    @Watch(\"globals.activeRoute.stops\")\n    watchStops(stops: RwStop[]) {\n        // const self = this;\n        // const SOURCE = \"RwStopView.watchStops\";\n        //console.log(SOURCE);\n\n        //Trigger selectedPin update\n        let pin = this.plan.selectedPin;\n        if (pin) {\n            this.plan.selectedPin = null;\n            this.plan.selectedPin = pin;\n        }\n    }\n\n    onPop() {\n        this.$emit(\"onPop\");\n    }\n\n    onDock() {\n        this.$emit(\"onDock\");\n    }\n\n    onClosePop() {\n        this.$emit(\"onClosePop\");\n    }\n\n    onCloseDock() {\n        this.$emit(\"onCloseDock\");\n    }\n\n    onDeleted() {\n        //console.log(\"RwStopView.onDeleted\")\n\n        this.globals.showPinPopup = false;\n        this.plan.clearPinSelections();\n        //xBUG: this is no longer being received\n        this.$emit(\"onDeleted\");\n\n    }\n\n    finalLength: string = this.calcMaxWidth();\n\n    calcMaxWidth(): string {\n        const SOURCE = \"RwStopView.calcMaxWidth\"\n\n        let maxWidth = window.innerWidth;\n        if (this.popup == true) {\n            maxWidth = 450\n        } else {\n\n            if (this.isMounted) {\n\n                let card = this.cardElement;\n                if (card && card.clientWidth) {\n                    maxWidth = card.clientWidth - 150;\n                } else {\n                    //This occurs in Empty State\n                    maxWidth = 450;\n                }\n            }\n\n        }\n        let output = \"max-width: \" + maxWidth.toString() + \"px\";\n        this.finalLength = output;\n\n        return output;\n    }\n\n    get cardElement(): Element {\n        let el: Element;\n        let card = this.$refs.cardStopView as any;\n        if (card && card.$el && card.$el) {\n            el = card.$el;\n        }\n        return el;\n    }\n\n\n    openSite() {\n        this.plan.previousPin = RwPin.fromStop(this.stop);\n        this.plan.selectedPin = RwPin.fromSite(this.site);\n    }\n\n    @Watch(\"stop\")\n    onStopUpdated() {\n        this.handleStopChanged();\n    }\n\n    handleStopChanged() {\n        const SOURCE = \"RwStopView.handleStopChanged\";\n        const histId = this.stop?.histId;\n        if (RwSysUtils.isGuidReal(histId)) {\n            if (!this.stopCheckIn || this.stopCheckIn.histId !== histId) {\n                this.globals.selectedHistoryItem = null;\n                RwTaskHistory.getHistoryItem(histId)\n                    .then(histItem => {\n                        if (histItem) {\n                            this.globals.selectedHistoryItem = histItem;\n                        }\n                    })\n                    .catch((err) => {\n                        RwLog.warn(SOURCE, `Error getting history item ${this.stop.histId} for stop ${this.stop.stopId} \\n\\n ${JSON.stringify(err)}`);\n                    });\n            }\n        } else if (this.stop?.isComplete) {\n            this.globals.selectedHistoryItem = null;\n            RwTaskHistory.getHistoryItemForStop(this.stop.stopId)\n                .then(histItem => {\n                    if (histItem) {\n                        this.globals.selectedHistoryItem = histItem;\n                    }\n                })\n                .catch((err) => {\n                    RwLog.warn(SOURCE, `Error getting history item ${this.stop.histId} for stop ${this.stop.stopId} \\n\\n ${JSON.stringify(err)}`);\n                });\n        } else {\n            this.globals.selectedHistoryItem = null;\n        }\n    }\n\n    mounted() {\n        this.isMounted = true;\n        this.calcMaxWidth();\n        window.addEventListener('resize', this.calcMaxWidth);\n        const histId = this.stop?.histId;\n        this.handleStopChanged();\n    }\n\n    showTooltip(text: string) {\n        return text.length > 72 || text.indexOf(\"\\n\") !== -1;\n    }\n\n    toggleNoteVisibility() {\n        this.noteVisibility = !this.noteVisibility;\n    }\n\n    addTaskToRoute(stop: RwStop) {\n        //let pin = this.plan.selectedPin;\n        //if(this.isTaskList) pin.task = this.stop;\n        this.globals.openGenericRoutePicker(\"\")\n            .then(res => {\n                const route = this.globals.routes.find(r => res.tarRouteId == r.routeId);\n                if (!route) throw new Error(\"Route not found\")\n                this.globals.addTaskToRoute(stop, route);\n            })\n            .catch(err => {\n                RwLog.error(\"RwStopView.addTaskToRoute\", JSON.stringify(err));\n            })\n        //this.plan.onTaskToRoute(pin);\n    }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwStopView.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwStopView.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwStopView.vue?vue&type=style&index=0&id=0014f4a8&prod&scoped=true&lang=scss&\"","import { render, staticRenderFns } from \"./RwStopView.vue?vue&type=template&id=0014f4a8&scoped=true&\"\nimport script from \"./RwStopView.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwStopView.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwStopView.vue?vue&type=style&index=0&id=0014f4a8&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0014f4a8\",\n  null\n  \n)\n\nexport default component.exports","var render, staticRenderFns\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render, staticRenderFns\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render, staticRenderFns\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render, staticRenderFns\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render, staticRenderFns\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VCard,{staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},attrs:{\"height\":\"100\"}},[_c(VToolbar,{attrs:{\"color\":_vm.globals.backColorBar,\"dense\":\"\",\"max-height\":\"48px\"}},[_c(VImg,{attrs:{\"contain\":\"\",\"height\":\"32\",\"width\":\"32\",\"src\":_vm.route ? _vm.route.routeIcon : undefined,\"max-width\":\"56px\"}}),_c(VToolbarTitle,[_vm._v(_vm._s(_vm.route ? _vm.route.name : \"Select Route\"))]),_c(VSpacer),(_vm.route && !_vm.isPlanner)?_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.onClickOpen.apply(null, arguments)}}},on),[_c(VIcon,[_vm._v(\"mdi-folder-open\")])],1)]}}],null,false,47918815)},[_c('span',[_vm._v(\"Open in Planner\")])]):_vm._e(),(_vm.route)?_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.onClickEdit.apply(null, arguments)}}},on),[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1)]}}],null,false,865122501)},[_c('span',[_vm._v(\"Edit Route\")])]):_vm._e(),(_vm.route)?_c(VMenu,{scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"}},on),[_c(VIcon,[_vm._v(\"mdi-dots-vertical\")])],1)]}}],null,false,2097855828)},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[(_vm.isDispatcher)?_c(VListItem,{on:{\"click\":_vm.onClickAssign}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-account\")])],1),_c(VListItemTitle,[_vm._v(\"Assign Driver\")])],1):_vm._e(),_c(VListItem,{on:{\"click\":_vm.onClickMarkComplete}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-check\")])],1),_c(VListItemTitle,[_vm._v(\"Change Status\")])],1),_c(VDivider),_c(VListItem,{on:{\"click\":_vm.onRouteCopy}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-content-copy\")])],1),_c(VListItemTitle,[_vm._v(\"Copy Route\")])],1),_c(VListItem,{on:{\"click\":_vm.onClickArchive}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-archive\")])],1),_c(VListItemTitle,[_vm._v(\"Archive Route\")])],1),(_vm.globals.isActionAvailable(_vm.globals.Actions.deleteRoutes))?_c(VListItem,{on:{\"click\":_vm.deleteClick}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,[_vm._v(\"Delete Route\")])],1):_vm._e(),_c(VDivider),(!_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onDock()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-dock-right\")])],1),_c(VListItemTitle,[_vm._v(\"Dock Window\")])],1):_vm._e(),(_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onPop()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-open-in-new\")])],1),_c(VListItemTitle,[_vm._v(\"Float Panel\")])],1):_vm._e(),(_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onCloseDock()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close-box\")])],1),_c(VListItemTitle,[_vm._v(\"Close Panel\")])],1):_vm._e(),(!_vm.isDocked)?_c(VListItem,{on:{\"click\":function($event){return _vm.onClosePop()}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close-box\")])],1),_c(VListItemTitle,[_vm._v(\"Close Window\")])],1):_vm._e()],1)],1):_vm._e()],1),(_vm.route)?_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme,staticStyle:{\"height\":\"calc(100% - 48px)\",\"width\":\"100%\",\"overflow-y\":\"auto\"}},[_c(VRow,{staticClass:\"ma-4 mx-5 mb-2\",attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({attrs:{\"size\":\"32\",\"color\":\"grey\",\"icon\":\"\"}},on),[_vm._v(\" \"+_vm._s(_vm.optimizationTypeIcon)+\" \")])]}}],null,false,3480666668)},[(_vm.route.isRoundTrip)?_c('span',[_vm._v(\"Optimize for round trip.\")]):_c('span',[_vm._v(\"Optimize for one way trip.\")])]),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({attrs:{\"size\":\"32\",\"color\":\"grey\",\"icon\":\"\"}},on),[_vm._v(\" \"+_vm._s(_vm.route.optType === 2 ? 'mdi-timer' : 'mdi-ruler')+\" \")])]}}],null,false,3340267979)},[(_vm.route.optType === 2)?_c('span',[_vm._v(\"Optimize for fastest trip.\")]):_c('span',[_vm._v(\"Optimize for shortest trip.\")])]),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({attrs:{\"size\":\"32\",\"color\":\"grey\",\"icon\":\"\"}},on),[_vm._v(_vm._s(_vm.travelModeIcon))])]}}],null,false,2951558734)},[_c('span',[_vm._v(_vm._s(_vm.travelModeText))])]),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [(_vm.route.avoidFerries ||_vm.route.avoidHighways || _vm.route.avoidTolls)?_c(VIcon,_vm._g({attrs:{\"size\":\"32\",\"color\":\"grey\",\"icon\":\"\"}},on),[_vm._v(\" mdi-minus-circle \")]):_c(VIcon,_vm._g({attrs:{\"size\":\"32\",\"color\":\"grey\",\"icon\":\"\"}},on),[_vm._v(\"mdi-circle-off-outline\")])]}}],null,false,887418097)},[(_vm.route.avoidFerries ||_vm.route.avoidHighways || _vm.route.avoidTolls)?_c('span',[_vm._v(\"Avoids:\")]):_vm._e(),(_vm.route.avoidTolls)?_c('span',[_vm._v(\" Tolls\")]):_vm._e(),(_vm.route.avoidHighways)?_c('span',[_vm._v(\" Highways\")]):_vm._e(),(_vm.route.avoidFerries)?_c('span',[_vm._v(\" Ferries\")]):_vm._e(),(!_vm.route.avoidFerries && !_vm.route.avoidHighways && !_vm.route.avoidTolls)?_c('span',[_vm._v(\"Nothing being avoided.\")]):_vm._e()])],1),_c(VRow,{staticClass:\"ma-4 mt-0\",attrs:{\"no-gutters\":\"\",\"align\":\"center\"}},[_c(VTooltip,{attrs:{\"top\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VProgressLinear,_vm._g({attrs:{\"color\":_vm.route.getProgressColor(),\"height\":\"8\",\"value\":_vm.route.progress,\"striped\":\"\"}},on))]}}],null,false,998555372)},[_c('span',{staticStyle:{\"font-size\":\"small\",\"margin-left\":\"4px\"}},[_vm._v(\" \"+_vm._s(_vm.route.getProgressText())+\" \")])])],1),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\",\"max-width\":\"450\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({on, attrs}){return [(_vm.gotViolations)?_c(VRow,_vm._g(_vm._b({staticClass:\"px-3\",staticStyle:{\"height\":\"48px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},'v-row',attrs,false),on),[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Violations: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.fullVioText)+\" \")]),_c(VIcon,{attrs:{\"color\":\"warning\"}},[_vm._v(\"warning\")])],1):_vm._e()]}}],null,false,2015991518)},[_c('span',[_vm._v(_vm._s(_vm.fullVioText))])]),_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"48px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Name: \")]),_c('div',{style:(_vm.finalLength)},[_c('span',[_vm._v(\" \"+_vm._s(_vm.route.name)+\" \")])])]),_c(VRow,{staticClass:\"px-3 mobile-margin-bottom\",staticStyle:{\"height\":\"48px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Status: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_c('span',{class:_vm.route.getStatusTextStyle()},[_vm._v(\" \"+_vm._s(_vm.route.routeStatusText)+\" \")])])]),_c(VRow,{staticClass:\"px-3 mobile-margin-bottom\",style:(`height: 48px; width: 100%;${_vm.globals.isMobileView?'margin-bottom:20px;':''}`),attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Assignment: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(`${_vm.finalLength};${_vm.globals.isMobileView?'width: 100%;': ''}`)},[_c(VAvatar,{staticClass:\"ml-2 mr-2\",attrs:{\"size\":\"28\",\"icon\":\"\"}},[_c(VImg,{attrs:{\"contain\":\"\",\"src\":_vm.driver.imageUrl,\"alt\":\"driverImage\"}})],1),_c('span',{staticClass:\"ml-0\",staticStyle:{\"font-size\":\"small\"}},[_vm._v(\" \"+_vm._s(_vm.route.driverName)+\" \")]),(_vm.route.assignCode !== 0)?_c('span',{staticClass:\"ml-1\",class:_vm.route.getAssignTextStyle()},[_vm._v(\" \"+_vm._s(_vm.route.assignTextInline)+\" \")]):_vm._e()],1)]),_c(VRow,{staticClass:\"px-3 mobile-margin-bottom\",staticStyle:{\"height\":\"48px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Time of Route: \"),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({staticClass:\"mb-2\",attrs:{\"color\":\"#555\",\"icon\":\"\",\"text\":\"\",\"small\":\"\"}},on),[_vm._v(\"mdi-information-outline\")])]}}],null,false,1738710592)},[_c('span',[_vm._v(\"Allowed time frame which stops can be added.\")])])],1),_c('div',{staticClass:\"ellipseStateText\",style:(`${_vm.finalLength}; ${_vm.globals.isMobileView? 'width: 100%;': ''}`)},[_vm._v(\" \"+_vm._s(_vm.formattedRouteSpan)+\" \")])]),(_vm.route)?_c(VRow,{staticClass:\"px-3 mobile-margin-bottom\",staticStyle:{\"height\":\"48px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Start Time Type: \")]),(_vm.route.isHardStart)?_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" Specific Time \")]):_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" Time of Optimize \")])]):_vm._e(),(_vm.route)?_c(VRow,{staticClass:\"px-3 mobile-margin-bottom\",staticStyle:{\"height\":\"48px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Start Point Type: \"),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({staticClass:\"mb-2\",attrs:{\"color\":\"#555\",\"icon\":\"\",\"text\":\"\",\"small\":\"\"}},on),[_vm._v(\"mdi-information-outline\")])]}}],null,false,1738710592)},[(_vm.route.isDynLoc === false && _vm.route.isComplete === false)?_c('span',[_vm._v(_vm._s(_vm.startPointText(_vm.route)))]):(_vm.route.isComplete === true)?_c('span',[_vm._v(\"Route is complete.\")]):_c('span',[_vm._v(\"Uses the driver's location as the start point.\")])])],1),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.route.isDynLoc ? \"Use Driver App GPS\" : \"Use Fixed Location\")+\" \")])]):_vm._e(),(_vm.route.totalDistText)?_c(VRow,{staticClass:\"px-3 mobile-margin-bottom\",staticStyle:{\"height\":\"48px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Total Distance: \"),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({staticClass:\"mb-2\",attrs:{\"color\":\"#555\",\"icon\":\"\",\"text\":\"\",\"small\":\"\"}},on),[_vm._v(\"mdi-information-outline\")])]}}],null,false,1738710592)},[_c('span',[_vm._v(\"Total length of route.\")])])],1),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.route ? _vm.route.totalDistText : \"distance\")+\" \")])]):_vm._e(),(_vm.route.totalTimeString !== _vm.emptyTime)?_c(VRow,{staticClass:\"px-3 mobile-margin-bottom\",staticStyle:{\"height\":\"48px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\"Total Time: \"),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({staticClass:\"mb-2\",attrs:{\"color\":\"#555\",\"icon\":\"\",\"text\":\"\",\"small\":\"\"}},on),[_vm._v(\"mdi-information-outline\")])]}}],null,false,1738710592)},[_c('span',[_vm._v(\"Time for travel and time at each stop.\")])])],1),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.route ? _vm.route.totalTimeString : \"Total Time\")+\" \")])]):_vm._e(),(_vm.route.travelTimeText)?_c(VRow,{staticClass:\"px-3 mobile-margin-bottom\",staticStyle:{\"height\":\"48px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Drive Time: \"),_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({staticClass:\"mb-2\",attrs:{\"color\":\"#555\",\"icon\":\"\",\"text\":\"\",\"small\":\"\"}},on),[_vm._v(\"mdi-information-outline\")])]}}],null,false,1738710592)},[_c('span',[_vm._v(\" Travel time only\")])])],1),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.route ? _vm.route.travelTimeText : \"Drive Time\")+\" \")])]):_vm._e(),(_vm.route.note)?_c(VRow,{staticClass:\"px-3 mobile-margin-bottom\",staticStyle:{\"min-height\":\"36px\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Note: \")])]):_vm._e(),(_vm.route.note)?_c(VRow,{staticClass:\"ma-4\",staticStyle:{\"min-height\":\"36px\"},attrs:{\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_c('p',{staticClass:\"notesText\",staticStyle:{\"margin-bottom\":\"0\"}},[_vm._v(_vm._s(_vm.route ? _vm.route.note : \"Route notes go here\"))])])]):_vm._e()],1):_vm._e(),(_vm.globals.showRouteCopy)?_c('RwRouteCopy'):_vm._e(),(_vm.globals.showRouteAssign)?_c('RwRouteAssign'):_vm._e(),(_vm.globals.showRouteComplete)?_c('RwRouteChangeStatus'):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Prop, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport thePlan, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport {RwRoute} from \"@/app/dem/RwRoute\";\nimport {RwDateUtils} from \"@/app/utils/RwDateUtils\";\nimport RwRouteCopy from \"@/app/views/routes/RwRouteCopy.vue\";\nimport RwRouteDelete from \"@/app/views/routes/RwRouteDelete.vue\";\nimport RwRouteArchive from \"@/app/views/routes/RwRouteArchive.vue\";\nimport RwRouteAssign from \"@/app/views/routes/RwRouteAssign.vue\";\nimport RwRouteChangeStatus from \"@/app/views/routes/RwRouteChangeStatus.vue\";\nimport RwConfirm from \"@/app/views/pickers/RwConfirm.vue\";\nimport {RwUser} from \"@/app/dem/RwUser\";\nimport {RwLog} from \"@/app/dal/RwLog\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\n\n\n@Component({\n  components: {RwConfirm, RwRouteChangeStatus, RwRouteAssign, RwRouteArchive, RwRouteDelete, RwRouteCopy}\n})\nexport default class RwRouteView extends Vue {\n  @Prop(RwRoute) readonly route: RwRoute;\n  @Prop(Boolean) readonly isPopup: boolean | undefined;\n  @Prop(Boolean) readonly isPlanner: boolean | undefined;\n\n  //#region Props\n\n  fab = false;\n  overlay = true;\n  absolute = true;\n  opacity = 0.75;\n  emptyTime = \"0s\";\n\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get driver(): RwUser {\n    return (this.route.driver) ? this.route.driver : this.globals.dispatcher;\n  }\n\n  get isDocked(): boolean {\n\n    return !this.isPopup;\n  }\n\n  get plan(): RwPlannerSpace {\n    return thePlan;\n  }\n\n  get style(): string {\n    //HACK: Why is calculated height dependent on darkMode????\n    return this.globals.isDarkMode\n        ? \"overflow-y:auto;overflow-x:hidden;height:calc(100% - 48px);width:100%; \"\n        : \"overflow-y:auto;overflow-x:hidden;height:calc(100% - 0px);width:100%; background-color:#FFFFFF\";\n  }\n\n  get formattedStartDate(): string {\n    return RwDateUtils.formatDate(this.route.startTime);\n  }\n\n  get formattedRouteSpan(): string {\n    let routeSpanText = RwDateUtils.formatTimeSpan(this.route.startTime, this.route.finishTimeAdjDur())\n    return routeSpanText;\n  }\n\n  get activeRoute(): RwRoute {\n    return this.plan.activeRoute;\n  }\n\n  get isDarkMode(): boolean {\n    return this.globals.isDarkMode;\n  }\n\n  startPointText(route: RwRoute): string {\n    let text: string;\n    if (route.isDynLoc === true) {\n      text = \"Location of Optimize (GPS)\";\n    } else {\n      let isAddress = (route.address)\n          ? (route.address.indexOf(\"a\") > -1 || route.address.indexOf(\"e\") > -1 || route.address.indexOf(\"i\") > -1 || route.address.indexOf(\"o\") > -1 || route.address.indexOf(\"u\") > -1)\n          : false;\n      text = (route.address && isAddress)\n          ? `Specific Location (${route.address})`\n          : `Specific Location (${route.lat.toFixed(4)},${route.lng.toFixed(4)})`;\n    }\n    return text\n  }\n\n\n  get isDispatcher(): boolean {\n    if (this.globals.isTeam && this.globals.isDisp) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n\n  get travelModeText(): string {\n    return RwRoute.getTravelModeText(this.route.travelMode)\n  }\n\n  get travelModeIcon(): string {\n    return this.route.travelModeIcon\n    //return RwRoute.getTravelMode(this.route.travelMode)\n  }\n\n  get optimizationTypeIcon(): string {\n    return this.route.isRoundTrip ? \"mdi-refresh\" : \"mdi-arrow-right\"\n  }\n\n  get gotViolations(): boolean {\n    let gotVios = false;\n    if (this.route && this.route.violations != 0) {\n      gotVios = true;\n    }\n    //console.log(\"RwRouteView.gotViolations\", gotVios)\n    return gotVios;\n  }\n\n  get fullVioText(): string {\n    let vioText = \"\";\n    if (this.route && this.gotViolations) {\n      vioText = this.route.fullVioText;\n    }\n    //console.log(\"RwRouteView.fullVioText\", vioText)\n    return vioText;\n  }\n\n\n  // <v-row\n  //   v-if=\"route.violations\"\n  //   v-bind=\"attrs\" v-on=\"on\" no-gutters align=\"center\" justify=\"space-between\" class=\"px-3\" style=\"height: 48px; width: 100%;\">\n  //   <div class=\"text-left\">\n  //     Violations:\n  // </div>\n  // <div class=\"ellipseStateText\" :style=\"finalLength\">\n  //     {{ route.fullVioText }}\n\n  //#endregion props\n\n\n  //#region menu Items\n\n  onClickOpen() {\n    this.globals.selectedRoute = this.route;\n    this.plan.activeRoute = this.route;\n    this.$router.push({path: this.route.plannerUrl}).catch();\n    this.plan.openRoute(this.route)\n\n  }\n\n  onClickEdit() {\n    this.globals.showRouteEdit(this.route)\n    this.onClosePop();\n  }\n\n  deleteClick() {\n    const self = this;\n    this.globals.confirmAndDeleteRoute(this.route)\n        .then(() => {\n          self.globals.selectedRoute = null;\n          self.onDeleted();\n        });\n    this.onClosePop();\n  }\n\n  onRouteCopy() {\n    const self = this;\n    this.globals\n        .showRouteNew(false, this.route)\n        .then(pick => {\n          if (pick) {\n            self.globals.plan.openRouteInPlanner(pick);\n            if (RwPrefUtils.editAfterAdd) {\n              self.globals.showRouteEdit(pick)\n            }\n          }\n          this.onClosePop();\n        })\n  }\n\n  onClickArchive() {\n    this.globals.confirmAndArchiveRoute(this.route)\n        .then(() => {\n          this.globals.selectedRoute = null;\n        });\n    this.onClosePop();\n  }\n\n  onClickMarkComplete() {\n    let self = this;\n    let SOURCE = \"RwGlobals.onClickMarkComplete\";\n    this.globals.confirmAndChangeRouteStatus(this.route)\n        .then(() => {\n          //console.warn(SOURCE+\" confirmAndChangeRouteStatus.then()\")\n          this.onClosePop();\n        })\n        .catch(err => {\n          RwLog.consoleError(SOURCE, \"WTF: update error\", err.toString());\n          this.globals.showSnack(\"Failed to Update Route\", \"error\");\n        });\n  }\n\n  onClickAssign() {\n    this.globals.assignRoute(this.route)\n    this.onClosePop();\n  }\n\n  onPop() {\n    this.$emit(\"onPop\");\n  }\n\n  onDock() {\n    this.$emit(\"onDock\");\n  }\n\n  onClosePop() {\n    this.$emit(\"onClosePop\");\n  }\n\n  onCloseDock() {\n    this.$emit(\"onCloseDock\");\n  }\n\n  onDeleted() {\n\n    this.$emit(\"onDeleted\");\n  }\n\n  //#endregion menu items\n  finalLength: string = this.detMaxTextLength();\n\n  detMaxTextLength(): string {\n    let length = window.innerWidth;\n    if (this.isPopup == true) {\n      length = 450\n    } else {\n      length = (length > 1200) ? Math.floor(length * 0.3) - 150 : length;\n    }\n    let output = \"max-width: \" + length.toString() + \"px\";\n    this.finalLength = output;\n\n    return output;\n  }\n\n  mounted() {\n    window.addEventListener('resize', this.detMaxTextLength);\n  }\n\n\n}\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRouteView.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRouteView.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwRouteView.vue?vue&type=style&index=0&id=3d4d5742&prod&lang=scss&scoped=true&\"","import { render, staticRenderFns } from \"./RwRouteView.vue?vue&type=template&id=3d4d5742&scoped=true&\"\nimport script from \"./RwRouteView.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwRouteView.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwRouteView.vue?vue&type=style&index=0&id=3d4d5742&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"3d4d5742\",\n  null\n  \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VCard,{staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},attrs:{\"height\":\"100\"}},[_c(VToolbar,{attrs:{\"dense\":\"\",\"max-height\":\"48px\",\"color\":_vm.globals.backColorBar}},[(_vm.space.previousPin)?_c(VBtn,{staticClass:\"pl-0 pr-0\",staticStyle:{\"min-width\":\"auto\"},attrs:{\"text\":\"\"},on:{\"click\":_vm.backToPreviousPin}},[_c(VIcon,[_vm._v(\"chevron_left\")])],1):_vm._e(),(_vm.site)?_c(VImg,{staticStyle:{\"display\":\"block\",\"margin\":\"auto\"},attrs:{\"height\":\"32\",\"width\":\"32\",\"contain\":\"\",\"max-width\":\"32px\",\"src\":_vm.siteUrl}}):_vm._e(),_c(VToolbarTitle,{staticClass:\"ml-2\",attrs:{\"bottom\":\"\"}},[_vm._v(_vm._s(_vm.site ? _vm.site.name : \"Select Favorite\"))]),_c(VSpacer),(_vm.site)?_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.editClick(_vm.site)}}},on),[_c(VIcon,[_vm._v(\"mdi-pencil\")])],1)]}}],null,false,3684760512)},[_c('span',{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Edit Favorite\")])]):_vm._e(),(_vm.site)?_c(VMenu,{attrs:{\"id\":\"menuId\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VBtn,_vm._g({attrs:{\"icon\":\"\"}},on),[_c(VIcon,[_vm._v(\"mdi-dots-vertical\")])],1)]}}],null,false,2097855828)},[_c(VList,{staticStyle:{\"text-align\":\"left\"},attrs:{\"dense\":\"\"}},[_c(VSubheader,[_vm._v(\"Favorite Actions\")]),_c(VDivider),(_vm.globals.isActionAvailable(_vm.globals.Actions.deleteFavorite))?_c(VListItem,{on:{\"click\":function($event){return _vm.deleteClick(_vm.site)}}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-delete\")])],1),_c(VListItemTitle,{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Delete Favorite\")])],1):_vm._e(),_c(VDivider),(!_vm.space.isSiteRouted(_vm.space.selectedPin))?_c(VListItem,{on:{\"click\":_vm.addToRoute}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-content-copy\")])],1),_c(VListItemTitle,[_vm._v(\"Add To Route\")])],1):_vm._e(),_c(VDivider),(! _vm.isDocked)?_c(VListItem,{on:{\"click\":_vm.onDock}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-dock-right\")])],1),_c(VListItemTitle,{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Dock Window\")])],1):_vm._e(),(_vm.isDocked)?_c(VListItem,{on:{\"click\":_vm.onPop}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-open-in-new\")])],1),_c(VListItemTitle,{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Float Panel\")])],1):_vm._e(),(_vm.isDocked)?_c(VListItem,{on:{\"click\":_vm.onCloseDock}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Close\")])],1):_vm._e(),(! _vm.isDocked)?_c(VListItem,{on:{\"click\":_vm.onClosePop}},[_c(VListItemIcon,[_c(VIcon,[_vm._v(\"mdi-close\")])],1),_c(VListItemTitle,{staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Close\")])],1):_vm._e()],1)],1):_vm._e()],1),(_vm.site)?_c(VCardText,{staticClass:\"mt-2\",class:_vm.globals.theme,staticStyle:{\"overflow-y\":\"auto\",\"height\":\"calc(100% - 48px)\",\"width\":\"100%\"}},[_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Name: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.site.name)+\" \")])]],2),(_vm.site.address)?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Address: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.site.address)+\" \")])]):_vm._e(),_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Visit Time: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.visitText)+\" \")])]),_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Display Color: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_c(VIcon,{attrs:{\"color\":_vm.site.baseColor}},[_vm._v(\"mdi-star-circle\")])],1)]),(_vm.site.lastCheckInText)?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Last Check-In: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.dateFormat)+\" \")])]):_vm._e(),(_vm.site.email)?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Email: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.site.email ? _vm.site.email : \"No email listed.\")+\" \")])]):_vm._e(),(_vm.site.phone)?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Phone: \")]),_c('div',{staticClass:\"ellipseStateText\",style:(_vm.finalLength)},[_vm._v(\" \"+_vm._s(_vm.site.phone ? _vm.site.phone : \"No phone number listed.\")+\" \")])]):_vm._e(),(_vm.gotHours)?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"align\":\"center\",\"justify\":\"space-between\"}},[_c('div',{staticClass:\"text-left\",staticStyle:{\"font-size\":\"small\"}},[_vm._v(\"Restricted Hours:\")]),_c('div',{staticClass:\"text-right\",staticStyle:{\"font-size\":\"small\"}},[_c(VTooltip,{attrs:{\"bottom\":\"\",\"color\":\"#222\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c(VIcon,_vm._g({attrs:{\"color\":\"grey\"}},on),[_vm._v(\"mdi-calendar-clock\")])]}}],null,false,390185190)},[_c('div',{staticClass:\"pre text-left\"},[_vm._v(\" \"+_vm._s(_vm.hoursList)+\" \")])])],1)]):_vm._e(),(_vm.site.note)?_c(VRow,{staticClass:\"px-3\",staticStyle:{\"height\":\"40px\",\"width\":\"100%\"},attrs:{\"no-gutters\":\"\",\"justify\":\"space-between\",\"align\":\"center\"}},[_c('div',{staticClass:\"text-left\"},[_vm._v(\" Note: \")])]):_vm._e(),(_vm.site.note)?_c(VRow,{staticClass:\"ma-4\",attrs:{\"justify\":\"space-between\",\"align\":\"center\"}},[_c(VCol,{staticStyle:{\"overflow-wrap\":\"break-word\"}},[_c('div',{staticClass:\"notesText\",staticStyle:{\"overflow-y\":\"auto\"}},[_vm._v(\" \"+_vm._s(_vm.site.note ? _vm.site.note : \"\")+\" \")])])],1):_vm._e()],1):_vm._e(),(_vm.globals.showSiteRelocate)?_c('RwSiteRelocate'):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport {Component, Prop, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport theSpace, {RwPlannerSpace} from \"@/app/views/planner/RwPlannerSpace\";\nimport theSiteSpace, {RwSiteSpace} from \"@/app/views/sites/RwSiteSpace\";\nimport RwSiteEdit from \"@/app/views/sites/RwSiteEdit.vue\";\nimport {RwSite} from \"@/app/dem/RwSite\";\nimport {RwSked} from \"@/app/dem/RwSked\";\nimport moment from \"moment\";\nimport {RwDateUtils} from \"@/app/utils/RwDateUtils\";\nimport {RwPrefUtils} from \"@/app/utils/RwPrefUtils\";\nimport {RwLog} from \"@/app/dal/RwLog\";\n\n@Component({components: {RwSiteEdit}})\nexport default class RwSiteView extends Vue {\n  @Prop(Boolean) readonly isPopup: boolean | undefined;\n  @Prop(RwSite) readonly site: RwSite;\n  @Prop(Boolean) readonly isFromSiteList: boolean | undefined;\n\n  siteHours = this.hours;\n\n\n  get visitTime(): number {\n    return this.site ? this.site.visitTime : RwPrefUtils.visitTime;\n  }\n\n  set visitTime(val: number) {\n    if (this.site) {\n      this.site.visitTime = val;\n    }\n  }\n\n  get gotHours(): boolean {\n    let gotHours = false;\n    if (this.hours && this.hours.length > 0) {\n      gotHours = true;\n    }\n    return gotHours;\n  }\n\n  get hoursList(): string {\n    let text = \"Unrestricted\";\n    if (this.hours && this.hours.length > 0) {\n      text = \"\";\n      this.hours.forEach(h => {\n        let line = h.displayFull;\n        text += (text === \"\") ? line : \"\\n\" + line;\n      })\n    }\n    return text;\n  }\n\n  get siteSpace(): RwSiteSpace {\n    return theSiteSpace;\n  }\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwPlannerSpace {\n    return theSpace;\n  }\n\n  get sites(): RwSite[] {\n    return this.globals.sites;\n  }\n\n  colorScroll(): string {\n    return (this.globals.isDarkMode) ? \"color:#000000\" : \"color:#fcfffd\";\n  }\n\n\n  get isDocked(): boolean {\n    return !this.isPopup;\n  }\n\n  get visitText(): string {\n    let text = \"\";\n    if (this.site) {\n      let effTime = this.site.getVisitTime();\n      let isDefault = this.visitTime === -1;\n      text = (isDefault) ? `default: ${effTime}m` : `override: ${effTime}m`;\n    }\n    return text;\n  }\n\n  //#region is menu actions\n\n  editClick(site: RwSite) {\n    this.globals.showSiteEdit(site)\n    // this.siteSpace.selectedSite = site;\n    // this.globals.showSiteEdit = true;\n    this.onClosePop();\n  }\n\n  deleteClick() {\n    let self = this;\n    this.globals.confirmAndDeleteSites([this.site.siteId])\n        .then(() => {\n          self.globals.selectedSite = null;\n          self.onDeleted()\n        });\n    this.onClosePop();\n\n  }\n\n  addToRoute() {\n    const SOURCE = \"RwSiteView.addToRoute\";\n    if (this.$route.name === \"sites\") {\n      this.onClosePop();\n      this.siteSpace.showRoutePicker(\"\")\n          .then(res => {\n            if (res.tarRouteId) {\n              let rt = this.globals.routes.find(route => route.routeId === res.tarRouteId);\n              if (rt) {\n                this.globals.getFullRouteCallback(rt)\n                    .then(result => {\n                      this.space.onSiteToPickedRoute(this.site, result)\n                      this.globals.showSnack(`Favorite ${this.site.name} added to route ${result.name}`);\n                    })\n                    .catch(err => {\n                      RwLog.error(SOURCE, `Error adding favorite to route ${JSON.stringify(err)}\\n\\n rt:${JSON.stringify(rt.toJsonWithAllStops())}`)\n                      this.globals.showSnack(\"Sorry, we had an issue adding your favorite\", \"error\");\n                    })\n              }\n            }\n          })\n    } else {\n      this.space.onSiteToRoute(this.space.selectedPin)\n    }\n  }\n\n  relocateClick(site: RwSite) {\n    let self = this;\n    this.globals.onSiteRelocate(site, [\"RwSiteView.relocateClick\"])\n        .then(() => {\n          self.globals.showSnack(\"Favorite Relocated Successfully\", \"success\")\n        })\n\n    this.onClosePop();\n\n  }\n\n\n  onDock() {\n    this.$emit(\"onDock\");\n  }\n\n  onPop() {\n    this.$emit(\"onPop\");\n  }\n\n  onCloseDock() {\n    this.$emit(\"onCloseDock\");\n  }\n\n  onClosePop() {\n    this.$emit(\"onClosePop\");\n  }\n\n  onDeleted() {\n    this.$emit(\"onDeleted\");\n  }\n\n  //#endregion menu actions\n\n\n  get siteUrl(): string {\n    return this.site.dataUrl ? this.site.dataUrl : '';\n  }\n\n  //#region hours\n\n\n  get hours(): RwSked[] {\n    let hours = (this.site) ? this.site.getActiveAvailability() : null;\n    this.siteHours = hours;\n    return this.siteHours;\n  }\n\n  associatedHours(bit: number): string[] {\n    let hours = [];\n    //@formatter:off\n    switch (bit) {\n      case 1:\n        hours = [\"Monday Hours:\"];\n        break;\n      case 2:\n        hours = [\"Tuesday Hours:\"];\n        break;\n      case 3:\n        hours = [\"Wednesday Hours:\"];\n        break;\n      case 4:\n        hours = [\"Thursday Hours:\"];\n        break;\n      case 5:\n        hours = [\"Friday Hours:\"];\n        break;\n      case 6:\n        hours = [\"Saturday Hours:\"];\n        break;\n      case 7:\n        hours = [\"Sunday Hours:\"];\n        break;\n    }\n    //@formatter:on\n    if (this.hours) {\n      for (let currentSked = 0; currentSked < this.hours.length; currentSked++) {\n        if ((this.hours[currentSked].dow & Math.pow(2, bit)) === Math.pow(2, bit)) {\n          let midnight = \"\";\n          if (this.hours[currentSked].timeFinish < this.hours[currentSked].timeStart) {\n            midnight = \" Crosses midnight\"\n          }\n          hours.push(RwDateUtils.msToString(this.hours[currentSked].timeStart) + \"-\" + RwDateUtils.msToString(this.hours[currentSked].timeFinish) + midnight);\n        }\n      }\n    }\n    return (hours.length == 1) ? [hours[0], \"No Scheduled Hours\"] : hours;\n  }\n\n  get mondaySkeds(): string[] {\n    return this.associatedHours(1)\n  }\n\n  get tuesdaySkeds(): string[] {\n    return this.associatedHours(2)\n  }\n\n  get wednesdaySkeds(): string[] {\n    return this.associatedHours(3)\n  }\n\n  get thursdaySkeds(): string[] {\n    return this.associatedHours(4)\n  }\n\n  get fridaySkeds(): string[] {\n    return this.associatedHours(5)\n  }\n\n  get saturdaySkeds(): string[] {\n    return this.associatedHours(6)\n  }\n\n  get sundaySkeds(): string[] {\n    return this.associatedHours(7)\n  }\n\n  get lastCheckInText(): string {\n    return (this.site.checkDate) ? RwDateUtils.formatDate(this.site.checkDate) : \"\";\n    //return (this.site.checkDate) ? RwDateUtils.formatDateToLocal(this.site.checkDate) : \"\";\n  }\n\n  get dateFormat(): string {\n    return (this.site.checkDate) ? moment(this.site.checkDate).format('L') + \" \" + moment(this.site.checkDate).format('LT') : \"\";\n  }\n\n  //#endregion hours\n\n\n  finalLength: string = this.detMaxTextLength()\n\n  detMaxTextLength(): string {\n\n    let length = window.innerWidth;\n    if (this.isPopup == true) {\n      length = 450\n    } else {\n      length = (length > 1000) ? Math.floor(length * 0.3) - 150 : length;\n    }\n    let output = \"max-width: \" + length.toString() + \"px\";\n    this.finalLength = output;\n\n    return output;\n  }\n\n  backToPreviousPin() {\n    this.space.selectedPin = this.space.previousPin;\n  }\n\n  mounted() {\n    window.addEventListener('resize', this.detMaxTextLength);\n    //console.log(\"site.color\", this.site.baseColor);\n  }\n\n  beforeDestroy() {\n    this.space.previousPin = null;\n  }\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwSiteView.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwSiteView.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwSiteView.vue?vue&type=style&index=0&id=11d20c40&prod&scoped=true&lang=scss&\"","import { render, staticRenderFns } from \"./RwSiteView.vue?vue&type=template&id=11d20c40&scoped=true&\"\nimport script from \"./RwSiteView.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwSiteView.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwSiteView.vue?vue&type=style&index=0&id=11d20c40&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"11d20c40\",\n  null\n  \n)\n\nexport default component.exports","import { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VRow } from 'vuetify/lib/components/VGrid';\n\nvar render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(VRow,{attrs:{\"justify\":\"center\"}},[_c(VDialog,{attrs:{\"scrollable\":\"\",\"max-width\":\"600px\",\"content-class\":\"dialog-with-scroll\",\"overlay-opacity\":\"0.65\",\"overlay-color\":\"#000\"},on:{\"click:outside\":_vm.escPress,\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.escPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.escPress.apply(null, arguments)}]},model:{value:(_vm.globals.showStopPop),callback:function ($$v) {_vm.$set(_vm.globals, \"showStopPop\", $$v)},expression:\"globals.showStopPop\"}},[(_vm.globals.showStopPop)?_c('RwStopView',{attrs:{\"popup\":true,\"stop\":_vm.space.selectedTask},on:{\"onDock\":_vm.onDock,\"onClosePop\":_vm.onClosePop,\"onDeleted\":_vm.onDeleted}}):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\nimport {Component, Vue} from \"vue-property-decorator\";\nimport theGlobals, {RwGlobals} from \"@/app/RwGlobals\";\nimport RwStopView from \"@/app/views/planner/RwStopView.vue\";\nimport theTaskSpace, {RwTaskSpace} from \"@/app/views/tasks/RwTaskSpace\";\n\n@Component({components: {RwStopView}})\nexport default class RwTaskPop extends Vue {\n\n  //#region Props\n\n  get globals(): RwGlobals {\n    return theGlobals;\n  }\n\n  get space(): RwTaskSpace {\n    return theTaskSpace;\n  }\n\n  //#endregion\n\n\n  onDock() {\n    this.globals.showStopPop = false;\n    this.globals.showStopDock = true;\n  }\n\n  onClosePop() {\n    this.globals.showStopPop = false;\n  }\n\n  onDeleted() {\n    this.globals.showStopPop = false;\n    this.space.selectedTask = null;\n  }\n\n\n  escPress(event: Event) {\n    event.stopPropagation();\n    this.globals.showPinPopup = false;\n  }\n\n\n}\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwTaskPop.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwTaskPop.vue?vue&type=script&lang=ts&\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-22.use[0]!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RwTaskPop.vue?vue&type=style&index=0&id=27a032f2&prod&scoped=true&lang=scss&\"","import { render, staticRenderFns } from \"./RwTaskPop.vue?vue&type=template&id=27a032f2&scoped=true&\"\nimport script from \"./RwTaskPop.vue?vue&type=script&lang=ts&\"\nexport * from \"./RwTaskPop.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RwTaskPop.vue?vue&type=style&index=0&id=27a032f2&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"27a032f2\",\n  null\n  \n)\n\nexport default component.exports","// extracted by mini-css-extract-plugin\nexport {};","(typeof navigator !== \"undefined\") && (function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n  var svgNS = 'http://www.w3.org/2000/svg';\n  var locationHref = '';\n  var _useWebWorker = false;\n  var initialDefaultFrame = -999999;\n\n  var setWebWorker = function setWebWorker(flag) {\n    _useWebWorker = !!flag;\n  };\n\n  var getWebWorker = function getWebWorker() {\n    return _useWebWorker;\n  };\n\n  var setLocationHref = function setLocationHref(value) {\n    locationHref = value;\n  };\n\n  var getLocationHref = function getLocationHref() {\n    return locationHref;\n  };\n\n  function createTag(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElement(type);\n  }\n\n  function extendPrototype(sources, destination) {\n    var i;\n    var len = sources.length;\n    var sourcePrototype;\n\n    for (i = 0; i < len; i += 1) {\n      sourcePrototype = sources[i].prototype;\n\n      for (var attr in sourcePrototype) {\n        if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n      }\n    }\n  }\n\n  function getDescriptor(object, prop) {\n    return Object.getOwnPropertyDescriptor(object, prop);\n  }\n\n  function createProxyFunction(prototype) {\n    function ProxyFunction() {}\n\n    ProxyFunction.prototype = prototype;\n    return ProxyFunction;\n  }\n\n  // import Howl from '../../3rd_party/howler';\n  var audioControllerFactory = function () {\n    function AudioController(audioFactory) {\n      this.audios = [];\n      this.audioFactory = audioFactory;\n      this._volume = 1;\n      this._isMuted = false;\n    }\n\n    AudioController.prototype = {\n      addAudio: function addAudio(audio) {\n        this.audios.push(audio);\n      },\n      pause: function pause() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].pause();\n        }\n      },\n      resume: function resume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].resume();\n        }\n      },\n      setRate: function setRate(rateValue) {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].setRate(rateValue);\n        }\n      },\n      createAudio: function createAudio(assetPath) {\n        if (this.audioFactory) {\n          return this.audioFactory(assetPath);\n        }\n\n        if (window.Howl) {\n          return new window.Howl({\n            src: [assetPath]\n          });\n        }\n\n        return {\n          isPlaying: false,\n          play: function play() {\n            this.isPlaying = true;\n          },\n          seek: function seek() {\n            this.isPlaying = false;\n          },\n          playing: function playing() {},\n          rate: function rate() {},\n          setVolume: function setVolume() {}\n        };\n      },\n      setAudioFactory: function setAudioFactory(audioFactory) {\n        this.audioFactory = audioFactory;\n      },\n      setVolume: function setVolume(value) {\n        this._volume = value;\n\n        this._updateVolume();\n      },\n      mute: function mute() {\n        this._isMuted = true;\n\n        this._updateVolume();\n      },\n      unmute: function unmute() {\n        this._isMuted = false;\n\n        this._updateVolume();\n      },\n      getVolume: function getVolume() {\n        return this._volume;\n      },\n      _updateVolume: function _updateVolume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n        }\n      }\n    };\n    return function () {\n      return new AudioController();\n    };\n  }();\n\n  var createTypedArray = function () {\n    function createRegularArray(type, len) {\n      var i = 0;\n      var arr = [];\n      var value;\n\n      switch (type) {\n        case 'int16':\n        case 'uint8c':\n          value = 1;\n          break;\n\n        default:\n          value = 1.1;\n          break;\n      }\n\n      for (i = 0; i < len; i += 1) {\n        arr.push(value);\n      }\n\n      return arr;\n    }\n\n    function createTypedArrayFactory(type, len) {\n      if (type === 'float32') {\n        return new Float32Array(len);\n      }\n\n      if (type === 'int16') {\n        return new Int16Array(len);\n      }\n\n      if (type === 'uint8c') {\n        return new Uint8ClampedArray(len);\n      }\n\n      return createRegularArray(type, len);\n    }\n\n    if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n      return createTypedArrayFactory;\n    }\n\n    return createRegularArray;\n  }();\n\n  function createSizedArray(len) {\n    return Array.apply(null, {\n      length: len\n    });\n  }\n\n  function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n  var subframeEnabled = true;\n  var expressionsPlugin = null;\n  var expressionsInterfaces = null;\n  var idPrefix$1 = '';\n  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  var _shouldRoundValues = false;\n  var bmPow = Math.pow;\n  var bmSqrt = Math.sqrt;\n  var bmFloor = Math.floor;\n  var bmMax = Math.max;\n  var bmMin = Math.min;\n  var BMMath = {};\n\n  (function () {\n    var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n    var i;\n    var len = propertyNames.length;\n\n    for (i = 0; i < len; i += 1) {\n      BMMath[propertyNames[i]] = Math[propertyNames[i]];\n    }\n  })();\n\n  function ProjectInterface$1() {\n    return {};\n  }\n\n  BMMath.random = Math.random;\n\n  BMMath.abs = function (val) {\n    var tOfVal = _typeof$6(val);\n\n    if (tOfVal === 'object' && val.length) {\n      var absArr = createSizedArray(val.length);\n      var i;\n      var len = val.length;\n\n      for (i = 0; i < len; i += 1) {\n        absArr[i] = Math.abs(val[i]);\n      }\n\n      return absArr;\n    }\n\n    return Math.abs(val);\n  };\n\n  var defaultCurveSegments = 150;\n  var degToRads = Math.PI / 180;\n  var roundCorner = 0.5519;\n\n  function roundValues(flag) {\n    _shouldRoundValues = !!flag;\n  }\n\n  function bmRnd(value) {\n    if (_shouldRoundValues) {\n      return Math.round(value);\n    }\n\n    return value;\n  }\n\n  function styleDiv(element) {\n    element.style.position = 'absolute';\n    element.style.top = 0;\n    element.style.left = 0;\n    element.style.display = 'block';\n    element.style.transformOrigin = '0 0';\n    element.style.webkitTransformOrigin = '0 0';\n    element.style.backfaceVisibility = 'visible';\n    element.style.webkitBackfaceVisibility = 'visible';\n    element.style.transformStyle = 'preserve-3d';\n    element.style.webkitTransformStyle = 'preserve-3d';\n    element.style.mozTransformStyle = 'preserve-3d';\n  }\n\n  function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n    this.type = type;\n    this.currentTime = currentTime;\n    this.totalTime = totalTime;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteEvent(type, frameMultiplier) {\n    this.type = type;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n    this.type = type;\n    this.currentLoop = currentLoop;\n    this.totalLoops = totalLoops;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n    this.type = type;\n    this.firstFrame = firstFrame;\n    this.totalFrames = totalFrames;\n  }\n\n  function BMDestroyEvent(type, target) {\n    this.type = type;\n    this.target = target;\n  }\n\n  function BMRenderFrameErrorEvent(nativeError, currentTime) {\n    this.type = 'renderFrameError';\n    this.nativeError = nativeError;\n    this.currentTime = currentTime;\n  }\n\n  function BMConfigErrorEvent(nativeError) {\n    this.type = 'configError';\n    this.nativeError = nativeError;\n  }\n\n  function BMAnimationConfigErrorEvent(type, nativeError) {\n    this.type = type;\n    this.nativeError = nativeError;\n  }\n\n  var createElementID = function () {\n    var _count = 0;\n    return function createID() {\n      _count += 1;\n      return idPrefix$1 + '__lottie_element_' + _count;\n    };\n  }();\n\n  function HSVtoRGB(h, s, v) {\n    var r;\n    var g;\n    var b;\n    var i;\n    var f;\n    var p;\n    var q;\n    var t;\n    i = Math.floor(h * 6);\n    f = h * 6 - i;\n    p = v * (1 - s);\n    q = v * (1 - f * s);\n    t = v * (1 - (1 - f) * s);\n\n    switch (i % 6) {\n      case 0:\n        r = v;\n        g = t;\n        b = p;\n        break;\n\n      case 1:\n        r = q;\n        g = v;\n        b = p;\n        break;\n\n      case 2:\n        r = p;\n        g = v;\n        b = t;\n        break;\n\n      case 3:\n        r = p;\n        g = q;\n        b = v;\n        break;\n\n      case 4:\n        r = t;\n        g = p;\n        b = v;\n        break;\n\n      case 5:\n        r = v;\n        g = p;\n        b = q;\n        break;\n\n      default:\n        break;\n    }\n\n    return [r, g, b];\n  }\n\n  function RGBtoHSV(r, g, b) {\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var d = max - min;\n    var h;\n    var s = max === 0 ? 0 : d / max;\n    var v = max / 255;\n\n    switch (max) {\n      case min:\n        h = 0;\n        break;\n\n      case r:\n        h = g - b + d * (g < b ? 6 : 0);\n        h /= 6 * d;\n        break;\n\n      case g:\n        h = b - r + d * 2;\n        h /= 6 * d;\n        break;\n\n      case b:\n        h = r - g + d * 4;\n        h /= 6 * d;\n        break;\n\n      default:\n        break;\n    }\n\n    return [h, s, v];\n  }\n\n  function addSaturationToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[1] += offset;\n\n    if (hsv[1] > 1) {\n      hsv[1] = 1;\n    } else if (hsv[1] <= 0) {\n      hsv[1] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addBrightnessToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[2] += offset;\n\n    if (hsv[2] > 1) {\n      hsv[2] = 1;\n    } else if (hsv[2] < 0) {\n      hsv[2] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addHueToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[0] += offset / 360;\n\n    if (hsv[0] > 1) {\n      hsv[0] -= 1;\n    } else if (hsv[0] < 0) {\n      hsv[0] += 1;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  var rgbToHex = function () {\n    var colorMap = [];\n    var i;\n    var hex;\n\n    for (i = 0; i < 256; i += 1) {\n      hex = i.toString(16);\n      colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n    }\n\n    return function (r, g, b) {\n      if (r < 0) {\n        r = 0;\n      }\n\n      if (g < 0) {\n        g = 0;\n      }\n\n      if (b < 0) {\n        b = 0;\n      }\n\n      return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n    };\n  }();\n\n  var setSubframeEnabled = function setSubframeEnabled(flag) {\n    subframeEnabled = !!flag;\n  };\n\n  var getSubframeEnabled = function getSubframeEnabled() {\n    return subframeEnabled;\n  };\n\n  var setExpressionsPlugin = function setExpressionsPlugin(value) {\n    expressionsPlugin = value;\n  };\n\n  var getExpressionsPlugin = function getExpressionsPlugin() {\n    return expressionsPlugin;\n  };\n\n  var setExpressionInterfaces = function setExpressionInterfaces(value) {\n    expressionsInterfaces = value;\n  };\n\n  var getExpressionInterfaces = function getExpressionInterfaces() {\n    return expressionsInterfaces;\n  };\n\n  var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n    defaultCurveSegments = value;\n  };\n\n  var getDefaultCurveSegments = function getDefaultCurveSegments() {\n    return defaultCurveSegments;\n  };\n\n  var setIdPrefix = function setIdPrefix(value) {\n    idPrefix$1 = value;\n  };\n\n  var getIdPrefix = function getIdPrefix() {\n    return idPrefix$1;\n  };\n\n  function createNS(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElementNS(svgNS, type);\n  }\n\n  function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n  var dataManager = function () {\n    var _counterId = 1;\n    var processes = [];\n    var workerFn;\n    var workerInstance;\n    var workerProxy = {\n      onmessage: function onmessage() {},\n      postMessage: function postMessage(path) {\n        workerFn({\n          data: path\n        });\n      }\n    };\n    var _workerSelf = {\n      postMessage: function postMessage(data) {\n        workerProxy.onmessage({\n          data: data\n        });\n      }\n    };\n\n    function createWorker(fn) {\n      if (window.Worker && window.Blob && getWebWorker()) {\n        var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n          type: 'text/javascript'\n        }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n        var url = URL.createObjectURL(blob);\n        return new Worker(url);\n      }\n\n      workerFn = fn;\n      return workerProxy;\n    }\n\n    function setupWorker() {\n      if (!workerInstance) {\n        workerInstance = createWorker(function workerStart(e) {\n          function dataFunctionManager() {\n            function completeLayers(layers, comps) {\n              var layerData;\n              var i;\n              var len = layers.length;\n              var j;\n              var jLen;\n              var k;\n              var kLen;\n\n              for (i = 0; i < len; i += 1) {\n                layerData = layers[i];\n\n                if ('ks' in layerData && !layerData.completed) {\n                  layerData.completed = true;\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        convertPathsToAbsoluteValues(maskProps[j].pt.k);\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 0) {\n                    layerData.layers = findCompLayers(layerData.refId, comps);\n                    completeLayers(layerData.layers, comps);\n                  } else if (layerData.ty === 4) {\n                    completeShapes(layerData.shapes);\n                  } else if (layerData.ty === 5) {\n                    completeText(layerData);\n                  }\n                }\n              }\n            }\n\n            function completeChars(chars, assets) {\n              if (chars) {\n                var i = 0;\n                var len = chars.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (chars[i].t === 1) {\n                    // var compData = findComp(chars[i].data.refId, assets);\n                    chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n                    // chars[i].data.op = 99999;\n                    // chars[i].data.st = 0;\n                    // chars[i].data.sr = 1;\n                    // chars[i].w = compData.w;\n                    // chars[i].data.ks = {\n                    //   a: { k: [0, 0, 0], a: 0 },\n                    //   p: { k: [0, -compData.h, 0], a: 0 },\n                    //   r: { k: 0, a: 0 },\n                    //   s: { k: [100, 100], a: 0 },\n                    //   o: { k: 100, a: 0 },\n                    // };\n\n                    completeLayers(chars[i].data.layers, assets);\n                  }\n                }\n              }\n            }\n\n            function findComp(id, comps) {\n              var i = 0;\n              var len = comps.length;\n\n              while (i < len) {\n                if (comps[i].id === id) {\n                  return comps[i];\n                }\n\n                i += 1;\n              }\n\n              return null;\n            }\n\n            function findCompLayers(id, comps) {\n              var comp = findComp(id, comps);\n\n              if (comp) {\n                if (!comp.layers.__used) {\n                  comp.layers.__used = true;\n                  return comp.layers;\n                }\n\n                return JSON.parse(JSON.stringify(comp.layers));\n              }\n\n              return null;\n            }\n\n            function completeShapes(arr) {\n              var i;\n              var len = arr.length;\n              var j;\n              var jLen;\n\n              for (i = len - 1; i >= 0; i -= 1) {\n                if (arr[i].ty === 'sh') {\n                  if (arr[i].ks.k.i) {\n                    convertPathsToAbsoluteValues(arr[i].ks.k);\n                  } else {\n                    jLen = arr[i].ks.k.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (arr[i].ks.k[j].s) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n                      }\n\n                      if (arr[i].ks.k[j].e) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n                      }\n                    }\n                  }\n                } else if (arr[i].ty === 'gr') {\n                  completeShapes(arr[i].it);\n                }\n              }\n            }\n\n            function convertPathsToAbsoluteValues(path) {\n              var i;\n              var len = path.i.length;\n\n              for (i = 0; i < len; i += 1) {\n                path.i[i][0] += path.v[i][0];\n                path.i[i][1] += path.v[i][1];\n                path.o[i][0] += path.v[i][0];\n                path.o[i][1] += path.v[i][1];\n              }\n            }\n\n            function checkVersion(minimum, animVersionString) {\n              var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n              if (minimum[0] > animVersion[0]) {\n                return true;\n              }\n\n              if (animVersion[0] > minimum[0]) {\n                return false;\n              }\n\n              if (minimum[1] > animVersion[1]) {\n                return true;\n              }\n\n              if (animVersion[1] > minimum[1]) {\n                return false;\n              }\n\n              if (minimum[2] > animVersion[2]) {\n                return true;\n              }\n\n              if (animVersion[2] > minimum[2]) {\n                return false;\n              }\n\n              return null;\n            }\n\n            var checkText = function () {\n              var minimumVersion = [4, 4, 14];\n\n              function updateTextLayer(textLayer) {\n                var documentData = textLayer.t.d;\n                textLayer.t.d = {\n                  k: [{\n                    s: documentData,\n                    t: 0\n                  }]\n                };\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkChars = function () {\n              var minimumVersion = [4, 7, 99];\n              return function (animationData) {\n                if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n                  var i;\n                  var len = animationData.chars.length;\n\n                  for (i = 0; i < len; i += 1) {\n                    var charData = animationData.chars[i];\n\n                    if (charData.data && charData.data.shapes) {\n                      completeShapes(charData.data.shapes);\n                      charData.data.ip = 0;\n                      charData.data.op = 99999;\n                      charData.data.st = 0;\n                      charData.data.sr = 1;\n                      charData.data.ks = {\n                        p: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        s: {\n                          k: [100, 100],\n                          a: 0\n                        },\n                        a: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        r: {\n                          k: 0,\n                          a: 0\n                        },\n                        o: {\n                          k: 100,\n                          a: 0\n                        }\n                      };\n\n                      if (!animationData.chars[i].t) {\n                        charData.data.shapes.push({\n                          ty: 'no'\n                        });\n                        charData.data.shapes[0].it.push({\n                          p: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          s: {\n                            k: [100, 100],\n                            a: 0\n                          },\n                          a: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          r: {\n                            k: 0,\n                            a: 0\n                          },\n                          o: {\n                            k: 100,\n                            a: 0\n                          },\n                          sk: {\n                            k: 0,\n                            a: 0\n                          },\n                          sa: {\n                            k: 0,\n                            a: 0\n                          },\n                          ty: 'tr'\n                        });\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkPathProperties = function () {\n              var minimumVersion = [5, 7, 15];\n\n              function updateTextLayer(textLayer) {\n                var pathData = textLayer.t.p;\n\n                if (typeof pathData.a === 'number') {\n                  pathData.a = {\n                    a: 0,\n                    k: pathData.a\n                  };\n                }\n\n                if (typeof pathData.p === 'number') {\n                  pathData.p = {\n                    a: 0,\n                    k: pathData.p\n                  };\n                }\n\n                if (typeof pathData.r === 'number') {\n                  pathData.r = {\n                    a: 0,\n                    k: pathData.r\n                  };\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkColors = function () {\n              var minimumVersion = [4, 1, 9];\n\n              function iterateShapes(shapes) {\n                var i;\n                var len = shapes.length;\n                var j;\n                var jLen;\n\n                for (i = 0; i < len; i += 1) {\n                  if (shapes[i].ty === 'gr') {\n                    iterateShapes(shapes[i].it);\n                  } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n                    if (shapes[i].c.k && shapes[i].c.k[0].i) {\n                      jLen = shapes[i].c.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (shapes[i].c.k[j].s) {\n                          shapes[i].c.k[j].s[0] /= 255;\n                          shapes[i].c.k[j].s[1] /= 255;\n                          shapes[i].c.k[j].s[2] /= 255;\n                          shapes[i].c.k[j].s[3] /= 255;\n                        }\n\n                        if (shapes[i].c.k[j].e) {\n                          shapes[i].c.k[j].e[0] /= 255;\n                          shapes[i].c.k[j].e[1] /= 255;\n                          shapes[i].c.k[j].e[2] /= 255;\n                          shapes[i].c.k[j].e[3] /= 255;\n                        }\n                      }\n                    } else {\n                      shapes[i].c.k[0] /= 255;\n                      shapes[i].c.k[1] /= 255;\n                      shapes[i].c.k[2] /= 255;\n                      shapes[i].c.k[3] /= 255;\n                    }\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 4) {\n                    iterateShapes(layers[i].shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkShapes = function () {\n              var minimumVersion = [4, 4, 18];\n\n              function completeClosingShapes(arr) {\n                var i;\n                var len = arr.length;\n                var j;\n                var jLen;\n\n                for (i = len - 1; i >= 0; i -= 1) {\n                  if (arr[i].ty === 'sh') {\n                    if (arr[i].ks.k.i) {\n                      arr[i].ks.k.c = arr[i].closed;\n                    } else {\n                      jLen = arr[i].ks.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (arr[i].ks.k[j].s) {\n                          arr[i].ks.k[j].s[0].c = arr[i].closed;\n                        }\n\n                        if (arr[i].ks.k[j].e) {\n                          arr[i].ks.k[j].e[0].c = arr[i].closed;\n                        }\n                      }\n                    }\n                  } else if (arr[i].ty === 'gr') {\n                    completeClosingShapes(arr[i].it);\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var layerData;\n                var i;\n                var len = layers.length;\n                var j;\n                var jLen;\n                var k;\n                var kLen;\n\n                for (i = 0; i < len; i += 1) {\n                  layerData = layers[i];\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        maskProps[j].pt.k.c = maskProps[j].cl;\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 4) {\n                    completeClosingShapes(layerData.shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            function completeData(animationData) {\n              if (animationData.__complete) {\n                return;\n              }\n\n              checkColors(animationData);\n              checkText(animationData);\n              checkChars(animationData);\n              checkPathProperties(animationData);\n              checkShapes(animationData);\n              completeLayers(animationData.layers, animationData.assets);\n              completeChars(animationData.chars, animationData.assets);\n              animationData.__complete = true;\n            }\n\n            function completeText(data) {\n              if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n              }\n            }\n\n            var moduleOb = {};\n            moduleOb.completeData = completeData;\n            moduleOb.checkColors = checkColors;\n            moduleOb.checkChars = checkChars;\n            moduleOb.checkPathProperties = checkPathProperties;\n            moduleOb.checkShapes = checkShapes;\n            moduleOb.completeLayers = completeLayers;\n            return moduleOb;\n          }\n\n          if (!_workerSelf.dataManager) {\n            _workerSelf.dataManager = dataFunctionManager();\n          }\n\n          if (!_workerSelf.assetLoader) {\n            _workerSelf.assetLoader = function () {\n              function formatResponse(xhr) {\n                // using typeof doubles the time of execution of this method,\n                // so if available, it's better to use the header to validate the type\n                var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n                if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n                  return xhr.response;\n                }\n\n                if (xhr.response && _typeof$5(xhr.response) === 'object') {\n                  return xhr.response;\n                }\n\n                if (xhr.response && typeof xhr.response === 'string') {\n                  return JSON.parse(xhr.response);\n                }\n\n                if (xhr.responseText) {\n                  return JSON.parse(xhr.responseText);\n                }\n\n                return null;\n              }\n\n              function loadAsset(path, fullPath, callback, errorCallback) {\n                var response;\n                var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n                try {\n                  // This crashes on Android WebView prior to KitKat\n                  xhr.responseType = 'json';\n                } catch (err) {} // eslint-disable-line no-empty\n\n\n                xhr.onreadystatechange = function () {\n                  if (xhr.readyState === 4) {\n                    if (xhr.status === 200) {\n                      response = formatResponse(xhr);\n                      callback(response);\n                    } else {\n                      try {\n                        response = formatResponse(xhr);\n                        callback(response);\n                      } catch (err) {\n                        if (errorCallback) {\n                          errorCallback(err);\n                        }\n                      }\n                    }\n                  }\n                };\n\n                try {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), path, true);\n                } catch (error) {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n                }\n\n                xhr.send();\n              }\n\n              return {\n                load: loadAsset\n              };\n            }();\n          }\n\n          if (e.data.type === 'loadAnimation') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.dataManager.completeData(data);\n\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          } else if (e.data.type === 'complete') {\n            var animation = e.data.animation;\n\n            _workerSelf.dataManager.completeData(animation);\n\n            _workerSelf.postMessage({\n              id: e.data.id,\n              payload: animation,\n              status: 'success'\n            });\n          } else if (e.data.type === 'loadData') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          }\n        });\n\n        workerInstance.onmessage = function (event) {\n          var data = event.data;\n          var id = data.id;\n          var process = processes[id];\n          processes[id] = null;\n\n          if (data.status === 'success') {\n            process.onComplete(data.payload);\n          } else if (process.onError) {\n            process.onError();\n          }\n        };\n      }\n    }\n\n    function createProcess(onComplete, onError) {\n      _counterId += 1;\n      var id = 'processId_' + _counterId;\n      processes[id] = {\n        onComplete: onComplete,\n        onError: onError\n      };\n      return id;\n    }\n\n    function loadAnimation(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadAnimation',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function loadData(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadData',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function completeAnimation(anim, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'complete',\n        animation: anim,\n        id: processId\n      });\n    }\n\n    return {\n      loadAnimation: loadAnimation,\n      loadData: loadData,\n      completeAnimation: completeAnimation\n    };\n  }();\n\n  var ImagePreloader = function () {\n    var proxyImage = function () {\n      var canvas = createTag('canvas');\n      canvas.width = 1;\n      canvas.height = 1;\n      var ctx = canvas.getContext('2d');\n      ctx.fillStyle = 'rgba(0,0,0,0)';\n      ctx.fillRect(0, 0, 1, 1);\n      return canvas;\n    }();\n\n    function imageLoaded() {\n      this.loadedAssets += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function footageLoaded() {\n      this.loadedFootagesCount += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function getAssetsPath(assetData, assetsPath, originalPath) {\n      var path = '';\n\n      if (assetData.e) {\n        path = assetData.p;\n      } else if (assetsPath) {\n        var imagePath = assetData.p;\n\n        if (imagePath.indexOf('images/') !== -1) {\n          imagePath = imagePath.split('/')[1];\n        }\n\n        path = assetsPath + imagePath;\n      } else {\n        path = originalPath;\n        path += assetData.u ? assetData.u : '';\n        path += assetData.p;\n      }\n\n      return path;\n    }\n\n    function testImageLoaded(img) {\n      var _count = 0;\n      var intervalId = setInterval(function () {\n        var box = img.getBBox();\n\n        if (box.width || _count > 500) {\n          this._imageLoaded();\n\n          clearInterval(intervalId);\n        }\n\n        _count += 1;\n      }.bind(this), 50);\n    }\n\n    function createImageData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createNS('image');\n\n      if (isSafari) {\n        this.testImageLoaded(img);\n      } else {\n        img.addEventListener('load', this._imageLoaded, false);\n      }\n\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n      if (this._elementHelper.append) {\n        this._elementHelper.append(img);\n      } else {\n        this._elementHelper.appendChild(img);\n      }\n\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createImgData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createTag('img');\n      img.crossOrigin = 'anonymous';\n      img.addEventListener('load', this._imageLoaded, false);\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.src = path;\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createFootageData(data) {\n      var ob = {\n        assetData: data\n      };\n      var path = getAssetsPath(data, this.assetsPath, this.path);\n      dataManager.loadData(path, function (footageData) {\n        ob.img = footageData;\n\n        this._footageLoaded();\n      }.bind(this), function () {\n        ob.img = {};\n\n        this._footageLoaded();\n      }.bind(this));\n      return ob;\n    }\n\n    function loadAssets(assets, cb) {\n      this.imagesLoadedCb = cb;\n      var i;\n      var len = assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (!assets[i].layers) {\n          if (!assets[i].t || assets[i].t === 'seq') {\n            this.totalImages += 1;\n            this.images.push(this._createImageData(assets[i]));\n          } else if (assets[i].t === 3) {\n            this.totalFootages += 1;\n            this.images.push(this.createFootageData(assets[i]));\n          }\n        }\n      }\n    }\n\n    function setPath(path) {\n      this.path = path || '';\n    }\n\n    function setAssetsPath(path) {\n      this.assetsPath = path || '';\n    }\n\n    function getAsset(assetData) {\n      var i = 0;\n      var len = this.images.length;\n\n      while (i < len) {\n        if (this.images[i].assetData === assetData) {\n          return this.images[i].img;\n        }\n\n        i += 1;\n      }\n\n      return null;\n    }\n\n    function destroy() {\n      this.imagesLoadedCb = null;\n      this.images.length = 0;\n    }\n\n    function loadedImages() {\n      return this.totalImages === this.loadedAssets;\n    }\n\n    function loadedFootages() {\n      return this.totalFootages === this.loadedFootagesCount;\n    }\n\n    function setCacheType(type, elementHelper) {\n      if (type === 'svg') {\n        this._elementHelper = elementHelper;\n        this._createImageData = this.createImageData.bind(this);\n      } else {\n        this._createImageData = this.createImgData.bind(this);\n      }\n    }\n\n    function ImagePreloaderFactory() {\n      this._imageLoaded = imageLoaded.bind(this);\n      this._footageLoaded = footageLoaded.bind(this);\n      this.testImageLoaded = testImageLoaded.bind(this);\n      this.createFootageData = createFootageData.bind(this);\n      this.assetsPath = '';\n      this.path = '';\n      this.totalImages = 0;\n      this.totalFootages = 0;\n      this.loadedAssets = 0;\n      this.loadedFootagesCount = 0;\n      this.imagesLoadedCb = null;\n      this.images = [];\n    }\n\n    ImagePreloaderFactory.prototype = {\n      loadAssets: loadAssets,\n      setAssetsPath: setAssetsPath,\n      setPath: setPath,\n      loadedImages: loadedImages,\n      loadedFootages: loadedFootages,\n      destroy: destroy,\n      getAsset: getAsset,\n      createImgData: createImgData,\n      createImageData: createImageData,\n      imageLoaded: imageLoaded,\n      footageLoaded: footageLoaded,\n      setCacheType: setCacheType\n    };\n    return ImagePreloaderFactory;\n  }();\n\n  function BaseEvent() {}\n\n  BaseEvent.prototype = {\n    triggerEvent: function triggerEvent(eventName, args) {\n      if (this._cbs[eventName]) {\n        var callbacks = this._cbs[eventName];\n\n        for (var i = 0; i < callbacks.length; i += 1) {\n          callbacks[i](args);\n        }\n      }\n    },\n    addEventListener: function addEventListener(eventName, callback) {\n      if (!this._cbs[eventName]) {\n        this._cbs[eventName] = [];\n      }\n\n      this._cbs[eventName].push(callback);\n\n      return function () {\n        this.removeEventListener(eventName, callback);\n      }.bind(this);\n    },\n    removeEventListener: function removeEventListener(eventName, callback) {\n      if (!callback) {\n        this._cbs[eventName] = null;\n      } else if (this._cbs[eventName]) {\n        var i = 0;\n        var len = this._cbs[eventName].length;\n\n        while (i < len) {\n          if (this._cbs[eventName][i] === callback) {\n            this._cbs[eventName].splice(i, 1);\n\n            i -= 1;\n            len -= 1;\n          }\n\n          i += 1;\n        }\n\n        if (!this._cbs[eventName].length) {\n          this._cbs[eventName] = null;\n        }\n      }\n    }\n  };\n\n  var markerParser = function () {\n    function parsePayloadLines(payload) {\n      var lines = payload.split('\\r\\n');\n      var keys = {};\n      var line;\n      var keysCount = 0;\n\n      for (var i = 0; i < lines.length; i += 1) {\n        line = lines[i].split(':');\n\n        if (line.length === 2) {\n          keys[line[0]] = line[1].trim();\n          keysCount += 1;\n        }\n      }\n\n      if (keysCount === 0) {\n        throw new Error();\n      }\n\n      return keys;\n    }\n\n    return function (_markers) {\n      var markers = [];\n\n      for (var i = 0; i < _markers.length; i += 1) {\n        var _marker = _markers[i];\n        var markerData = {\n          time: _marker.tm,\n          duration: _marker.dr\n        };\n\n        try {\n          markerData.payload = JSON.parse(_markers[i].cm);\n        } catch (_) {\n          try {\n            markerData.payload = parsePayloadLines(_markers[i].cm);\n          } catch (__) {\n            markerData.payload = {\n              name: _markers[i].cm\n            };\n          }\n        }\n\n        markers.push(markerData);\n      }\n\n      return markers;\n    };\n  }();\n\n  var ProjectInterface = function () {\n    function registerComposition(comp) {\n      this.compositions.push(comp);\n    }\n\n    return function () {\n      function _thisProjectFunction(name) {\n        var i = 0;\n        var len = this.compositions.length;\n\n        while (i < len) {\n          if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n            if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n              this.compositions[i].prepareFrame(this.currentFrame);\n            }\n\n            return this.compositions[i].compInterface;\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      _thisProjectFunction.compositions = [];\n      _thisProjectFunction.currentFrame = 0;\n      _thisProjectFunction.registerComposition = registerComposition;\n      return _thisProjectFunction;\n    };\n  }();\n\n  var renderers = {};\n\n  var registerRenderer = function registerRenderer(key, value) {\n    renderers[key] = value;\n  };\n\n  function getRenderer(key) {\n    return renderers[key];\n  }\n\n  function getRegisteredRenderer() {\n    // Returns canvas by default for compatibility\n    if (renderers.canvas) {\n      return 'canvas';\n    } // Returns any renderer that is registered\n\n\n    for (var key in renderers) {\n      if (renderers[key]) {\n        return key;\n      }\n    }\n\n    return '';\n  }\n\n  function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n  var AnimationItem = function AnimationItem() {\n    this._cbs = [];\n    this.name = '';\n    this.path = '';\n    this.isLoaded = false;\n    this.currentFrame = 0;\n    this.currentRawFrame = 0;\n    this.firstFrame = 0;\n    this.totalFrames = 0;\n    this.frameRate = 0;\n    this.frameMult = 0;\n    this.playSpeed = 1;\n    this.playDirection = 1;\n    this.playCount = 0;\n    this.animationData = {};\n    this.assets = [];\n    this.isPaused = true;\n    this.autoplay = false;\n    this.loop = true;\n    this.renderer = null;\n    this.animationID = createElementID();\n    this.assetsPath = '';\n    this.timeCompleted = 0;\n    this.segmentPos = 0;\n    this.isSubframeEnabled = getSubframeEnabled();\n    this.segments = [];\n    this._idle = true;\n    this._completedLoop = false;\n    this.projectInterface = ProjectInterface();\n    this.imagePreloader = new ImagePreloader();\n    this.audioController = audioControllerFactory();\n    this.markers = [];\n    this.configAnimation = this.configAnimation.bind(this);\n    this.onSetupError = this.onSetupError.bind(this);\n    this.onSegmentComplete = this.onSegmentComplete.bind(this);\n    this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n    this.expressionsPlugin = getExpressionsPlugin();\n  };\n\n  extendPrototype([BaseEvent], AnimationItem);\n\n  AnimationItem.prototype.setParams = function (params) {\n    if (params.wrapper || params.container) {\n      this.wrapper = params.wrapper || params.container;\n    }\n\n    var animType = 'svg';\n\n    if (params.animType) {\n      animType = params.animType;\n    } else if (params.renderer) {\n      animType = params.renderer;\n    }\n\n    var RendererClass = getRenderer(animType);\n    this.renderer = new RendererClass(this, params.rendererSettings);\n    this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n    this.renderer.setProjectInterface(this.projectInterface);\n    this.animType = animType;\n\n    if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n      this.loop = true;\n    } else if (params.loop === false) {\n      this.loop = false;\n    } else {\n      this.loop = parseInt(params.loop, 10);\n    }\n\n    this.autoplay = 'autoplay' in params ? params.autoplay : true;\n    this.name = params.name ? params.name : '';\n    this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n    this.assetsPath = params.assetsPath;\n    this.initialSegment = params.initialSegment;\n\n    if (params.audioFactory) {\n      this.audioController.setAudioFactory(params.audioFactory);\n    }\n\n    if (params.animationData) {\n      this.setupAnimation(params.animationData);\n    } else if (params.path) {\n      if (params.path.lastIndexOf('\\\\') !== -1) {\n        this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n      } else {\n        this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n      }\n\n      this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n      this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n      dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n    }\n  };\n\n  AnimationItem.prototype.onSetupError = function () {\n    this.trigger('data_failed');\n  };\n\n  AnimationItem.prototype.setupAnimation = function (data) {\n    dataManager.completeAnimation(data, this.configAnimation);\n  };\n\n  AnimationItem.prototype.setData = function (wrapper, animationData) {\n    if (animationData) {\n      if (_typeof$4(animationData) !== 'object') {\n        animationData = JSON.parse(animationData);\n      }\n    }\n\n    var params = {\n      wrapper: wrapper,\n      animationData: animationData\n    };\n    var wrapperAttributes = wrapper.attributes;\n    params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n    params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';\n    var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n    if (loop === 'false') {\n      params.loop = false;\n    } else if (loop === 'true') {\n      params.loop = true;\n    } else if (loop !== '') {\n      params.loop = parseInt(loop, 10);\n    }\n\n    var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n    params.autoplay = autoplay !== 'false';\n    params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n    var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n    if (prerender === 'false') {\n      params.prerender = false;\n    }\n\n    if (!params.path) {\n      this.trigger('destroy');\n    } else {\n      this.setParams(params);\n    }\n  };\n\n  AnimationItem.prototype.includeLayers = function (data) {\n    if (data.op > this.animationData.op) {\n      this.animationData.op = data.op;\n      this.totalFrames = Math.floor(data.op - this.animationData.ip);\n    }\n\n    var layers = this.animationData.layers;\n    var i;\n    var len = layers.length;\n    var newLayers = data.layers;\n    var j;\n    var jLen = newLayers.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      i = 0;\n\n      while (i < len) {\n        if (layers[i].id === newLayers[j].id) {\n          layers[i] = newLayers[j];\n          break;\n        }\n\n        i += 1;\n      }\n    }\n\n    if (data.chars || data.fonts) {\n      this.renderer.globalData.fontManager.addChars(data.chars);\n      this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n    }\n\n    if (data.assets) {\n      len = data.assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.animationData.assets.push(data.assets[i]);\n      }\n    }\n\n    this.animationData.__complete = false;\n    dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n  };\n\n  AnimationItem.prototype.onSegmentComplete = function (data) {\n    this.animationData = data;\n    var expressionsPlugin = getExpressionsPlugin();\n\n    if (expressionsPlugin) {\n      expressionsPlugin.initExpressions(this);\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.loadNextSegment = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments || segments.length === 0 || !this.autoloadSegments) {\n      this.trigger('data_ready');\n      this.timeCompleted = this.totalFrames;\n      return;\n    }\n\n    var segment = segments.shift();\n    this.timeCompleted = segment.time * this.frameRate;\n    var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n    this.segmentPos += 1;\n    dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n      this.trigger('data_failed');\n    }.bind(this));\n  };\n\n  AnimationItem.prototype.loadSegments = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments) {\n      this.timeCompleted = this.totalFrames;\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.imagesLoaded = function () {\n    this.trigger('loaded_images');\n    this.checkLoaded();\n  };\n\n  AnimationItem.prototype.preloadImages = function () {\n    this.imagePreloader.setAssetsPath(this.assetsPath);\n    this.imagePreloader.setPath(this.path);\n    this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n  };\n\n  AnimationItem.prototype.configAnimation = function (animData) {\n    if (!this.renderer) {\n      return;\n    }\n\n    try {\n      this.animationData = animData;\n\n      if (this.initialSegment) {\n        this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n        this.firstFrame = Math.round(this.initialSegment[0]);\n      } else {\n        this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n        this.firstFrame = Math.round(this.animationData.ip);\n      }\n\n      this.renderer.configAnimation(animData);\n\n      if (!animData.assets) {\n        animData.assets = [];\n      }\n\n      this.assets = this.animationData.assets;\n      this.frameRate = this.animationData.fr;\n      this.frameMult = this.animationData.fr / 1000;\n      this.renderer.searchExtraCompositions(animData.assets);\n      this.markers = markerParser(animData.markers || []);\n      this.trigger('config_ready');\n      this.preloadImages();\n      this.loadSegments();\n      this.updaFrameModifier();\n      this.waitForFontsLoaded();\n\n      if (this.isPaused) {\n        this.audioController.pause();\n      }\n    } catch (error) {\n      this.triggerConfigError(error);\n    }\n  };\n\n  AnimationItem.prototype.waitForFontsLoaded = function () {\n    if (!this.renderer) {\n      return;\n    }\n\n    if (this.renderer.globalData.fontManager.isLoaded) {\n      this.checkLoaded();\n    } else {\n      setTimeout(this.waitForFontsLoaded.bind(this), 20);\n    }\n  };\n\n  AnimationItem.prototype.checkLoaded = function () {\n    if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n      this.isLoaded = true;\n      var expressionsPlugin = getExpressionsPlugin();\n\n      if (expressionsPlugin) {\n        expressionsPlugin.initExpressions(this);\n      }\n\n      this.renderer.initItems();\n      setTimeout(function () {\n        this.trigger('DOMLoaded');\n      }.bind(this), 0);\n      this.gotoFrame();\n\n      if (this.autoplay) {\n        this.play();\n      }\n    }\n  };\n\n  AnimationItem.prototype.resize = function (width, height) {\n    // Adding this validation for backwards compatibility in case an event object was being passed down\n    var _width = typeof width === 'number' ? width : undefined;\n\n    var _height = typeof height === 'number' ? height : undefined;\n\n    this.renderer.updateContainerSize(_width, _height);\n  };\n\n  AnimationItem.prototype.setSubframe = function (flag) {\n    this.isSubframeEnabled = !!flag;\n  };\n\n  AnimationItem.prototype.gotoFrame = function () {\n    this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n    if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n      this.currentFrame = this.timeCompleted;\n    }\n\n    this.trigger('enterFrame');\n    this.renderFrame();\n    this.trigger('drawnFrame');\n  };\n\n  AnimationItem.prototype.renderFrame = function () {\n    if (this.isLoaded === false || !this.renderer) {\n      return;\n    }\n\n    try {\n      if (this.expressionsPlugin) {\n        this.expressionsPlugin.resetFrame();\n      }\n\n      this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n    } catch (error) {\n      this.triggerRenderFrameError(error);\n    }\n  };\n\n  AnimationItem.prototype.play = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.isPaused = false;\n      this.trigger('_play');\n      this.audioController.resume();\n\n      if (this._idle) {\n        this._idle = false;\n        this.trigger('_active');\n      }\n    }\n  };\n\n  AnimationItem.prototype.pause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === false) {\n      this.isPaused = true;\n      this.trigger('_pause');\n      this._idle = true;\n      this.trigger('_idle');\n      this.audioController.pause();\n    }\n  };\n\n  AnimationItem.prototype.togglePause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.play();\n    } else {\n      this.pause();\n    }\n  };\n\n  AnimationItem.prototype.stop = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.pause();\n    this.playCount = 0;\n    this._completedLoop = false;\n    this.setCurrentRawFrameValue(0);\n  };\n\n  AnimationItem.prototype.getMarkerData = function (markerName) {\n    var marker;\n\n    for (var i = 0; i < this.markers.length; i += 1) {\n      marker = this.markers[i];\n\n      if (marker.payload && marker.payload.name === markerName) {\n        return marker;\n      }\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        this.goToAndStop(marker.time, true);\n      }\n    } else if (isFrame) {\n      this.setCurrentRawFrameValue(value);\n    } else {\n      this.setCurrentRawFrameValue(value * this.frameModifier);\n    }\n\n    this.pause();\n  };\n\n  AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        if (!marker.duration) {\n          this.goToAndStop(marker.time, true);\n        } else {\n          this.playSegments([marker.time, marker.time + marker.duration], true);\n        }\n      }\n    } else {\n      this.goToAndStop(numValue, isFrame, name);\n    }\n\n    this.play();\n  };\n\n  AnimationItem.prototype.advanceTime = function (value) {\n    if (this.isPaused === true || this.isLoaded === false) {\n      return;\n    }\n\n    var nextValue = this.currentRawFrame + value * this.frameModifier;\n    var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n    // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n    if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n      if (!this.loop || this.playCount === this.loop) {\n        if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n          _isComplete = true;\n          nextValue = this.totalFrames - 1;\n        }\n      } else if (nextValue >= this.totalFrames) {\n        this.playCount += 1;\n\n        if (!this.checkSegments(nextValue % this.totalFrames)) {\n          this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n          this._completedLoop = true;\n          this.trigger('loopComplete');\n        }\n      } else {\n        this.setCurrentRawFrameValue(nextValue);\n      }\n    } else if (nextValue < 0) {\n      if (!this.checkSegments(nextValue % this.totalFrames)) {\n        if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n          // eslint-disable-line no-plusplus\n          this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n          if (!this._completedLoop) {\n            this._completedLoop = true;\n          } else {\n            this.trigger('loopComplete');\n          }\n        } else {\n          _isComplete = true;\n          nextValue = 0;\n        }\n      }\n    } else {\n      this.setCurrentRawFrameValue(nextValue);\n    }\n\n    if (_isComplete) {\n      this.setCurrentRawFrameValue(nextValue);\n      this.pause();\n      this.trigger('complete');\n    }\n  };\n\n  AnimationItem.prototype.adjustSegment = function (arr, offset) {\n    this.playCount = 0;\n\n    if (arr[1] < arr[0]) {\n      if (this.frameModifier > 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(-1);\n        }\n      }\n\n      this.totalFrames = arr[0] - arr[1];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[1];\n      this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n    } else if (arr[1] > arr[0]) {\n      if (this.frameModifier < 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(1);\n        }\n      }\n\n      this.totalFrames = arr[1] - arr[0];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[0];\n      this.setCurrentRawFrameValue(0.001 + offset);\n    }\n\n    this.trigger('segmentStart');\n  };\n\n  AnimationItem.prototype.setSegment = function (init, end) {\n    var pendingFrame = -1;\n\n    if (this.isPaused) {\n      if (this.currentRawFrame + this.firstFrame < init) {\n        pendingFrame = init;\n      } else if (this.currentRawFrame + this.firstFrame > end) {\n        pendingFrame = end - init;\n      }\n    }\n\n    this.firstFrame = init;\n    this.totalFrames = end - init;\n    this.timeCompleted = this.totalFrames;\n\n    if (pendingFrame !== -1) {\n      this.goToAndStop(pendingFrame, true);\n    }\n  };\n\n  AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n    if (forceFlag) {\n      this.segments.length = 0;\n    }\n\n    if (_typeof$4(arr[0]) === 'object') {\n      var i;\n      var len = arr.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.segments.push(arr[i]);\n      }\n    } else {\n      this.segments.push(arr);\n    }\n\n    if (this.segments.length && forceFlag) {\n      this.adjustSegment(this.segments.shift(), 0);\n    }\n\n    if (this.isPaused) {\n      this.play();\n    }\n  };\n\n  AnimationItem.prototype.resetSegments = function (forceFlag) {\n    this.segments.length = 0;\n    this.segments.push([this.animationData.ip, this.animationData.op]);\n\n    if (forceFlag) {\n      this.checkSegments(0);\n    }\n  };\n\n  AnimationItem.prototype.checkSegments = function (offset) {\n    if (this.segments.length) {\n      this.adjustSegment(this.segments.shift(), offset);\n      return true;\n    }\n\n    return false;\n  };\n\n  AnimationItem.prototype.destroy = function (name) {\n    if (name && this.name !== name || !this.renderer) {\n      return;\n    }\n\n    this.renderer.destroy();\n    this.imagePreloader.destroy();\n    this.trigger('destroy');\n    this._cbs = null;\n    this.onEnterFrame = null;\n    this.onLoopComplete = null;\n    this.onComplete = null;\n    this.onSegmentStart = null;\n    this.onDestroy = null;\n    this.renderer = null;\n    this.expressionsPlugin = null;\n    this.imagePreloader = null;\n    this.projectInterface = null;\n  };\n\n  AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n    this.currentRawFrame = value;\n    this.gotoFrame();\n  };\n\n  AnimationItem.prototype.setSpeed = function (val) {\n    this.playSpeed = val;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setDirection = function (val) {\n    this.playDirection = val < 0 ? -1 : 1;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setLoop = function (isLooping) {\n    this.loop = isLooping;\n  };\n\n  AnimationItem.prototype.setVolume = function (val, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.setVolume(val);\n  };\n\n  AnimationItem.prototype.getVolume = function () {\n    return this.audioController.getVolume();\n  };\n\n  AnimationItem.prototype.mute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.mute();\n  };\n\n  AnimationItem.prototype.unmute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.unmute();\n  };\n\n  AnimationItem.prototype.updaFrameModifier = function () {\n    this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n    this.audioController.setRate(this.playSpeed * this.playDirection);\n  };\n\n  AnimationItem.prototype.getPath = function () {\n    return this.path;\n  };\n\n  AnimationItem.prototype.getAssetsPath = function (assetData) {\n    var path = '';\n\n    if (assetData.e) {\n      path = assetData.p;\n    } else if (this.assetsPath) {\n      var imagePath = assetData.p;\n\n      if (imagePath.indexOf('images/') !== -1) {\n        imagePath = imagePath.split('/')[1];\n      }\n\n      path = this.assetsPath + imagePath;\n    } else {\n      path = this.path;\n      path += assetData.u ? assetData.u : '';\n      path += assetData.p;\n    }\n\n    return path;\n  };\n\n  AnimationItem.prototype.getAssetData = function (id) {\n    var i = 0;\n    var len = this.assets.length;\n\n    while (i < len) {\n      if (id === this.assets[i].id) {\n        return this.assets[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.hide = function () {\n    this.renderer.hide();\n  };\n\n  AnimationItem.prototype.show = function () {\n    this.renderer.show();\n  };\n\n  AnimationItem.prototype.getDuration = function (isFrame) {\n    return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n  };\n\n  AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n    try {\n      var element = this.renderer.getElementByPath(path);\n      element.updateDocumentData(documentData, index);\n    } catch (error) {// TODO: decide how to handle catch case\n    }\n  };\n\n  AnimationItem.prototype.trigger = function (name) {\n    if (this._cbs && this._cbs[name]) {\n      switch (name) {\n        case 'enterFrame':\n          this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n          break;\n\n        case 'drawnFrame':\n          this.drawnFrameEvent.currentTime = this.currentFrame;\n          this.drawnFrameEvent.totalTime = this.totalFrames;\n          this.drawnFrameEvent.direction = this.frameModifier;\n          this.triggerEvent(name, this.drawnFrameEvent);\n          break;\n\n        case 'loopComplete':\n          this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n          break;\n\n        case 'complete':\n          this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n          break;\n\n        case 'segmentStart':\n          this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n          break;\n\n        case 'destroy':\n          this.triggerEvent(name, new BMDestroyEvent(name, this));\n          break;\n\n        default:\n          this.triggerEvent(name);\n      }\n    }\n\n    if (name === 'enterFrame' && this.onEnterFrame) {\n      this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n    }\n\n    if (name === 'loopComplete' && this.onLoopComplete) {\n      this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n    }\n\n    if (name === 'complete' && this.onComplete) {\n      this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n    }\n\n    if (name === 'segmentStart' && this.onSegmentStart) {\n      this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n    }\n\n    if (name === 'destroy' && this.onDestroy) {\n      this.onDestroy.call(this, new BMDestroyEvent(name, this));\n    }\n  };\n\n  AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n    var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  AnimationItem.prototype.triggerConfigError = function (nativeError) {\n    var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  var animationManager = function () {\n    var moduleOb = {};\n    var registeredAnimations = [];\n    var initTime = 0;\n    var len = 0;\n    var playingAnimationsNum = 0;\n    var _stopped = true;\n    var _isFrozen = false;\n\n    function removeElement(ev) {\n      var i = 0;\n      var animItem = ev.target;\n\n      while (i < len) {\n        if (registeredAnimations[i].animation === animItem) {\n          registeredAnimations.splice(i, 1);\n          i -= 1;\n          len -= 1;\n\n          if (!animItem.isPaused) {\n            subtractPlayingCount();\n          }\n        }\n\n        i += 1;\n      }\n    }\n\n    function registerAnimation(element, animationData) {\n      if (!element) {\n        return null;\n      }\n\n      var i = 0;\n\n      while (i < len) {\n        if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n          return registeredAnimations[i].animation;\n        }\n\n        i += 1;\n      }\n\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, element);\n      animItem.setData(element, animationData);\n      return animItem;\n    }\n\n    function getRegisteredAnimations() {\n      var i;\n      var lenAnims = registeredAnimations.length;\n      var animations = [];\n\n      for (i = 0; i < lenAnims; i += 1) {\n        animations.push(registeredAnimations[i].animation);\n      }\n\n      return animations;\n    }\n\n    function addPlayingCount() {\n      playingAnimationsNum += 1;\n      activate();\n    }\n\n    function subtractPlayingCount() {\n      playingAnimationsNum -= 1;\n    }\n\n    function setupAnimation(animItem, element) {\n      animItem.addEventListener('destroy', removeElement);\n      animItem.addEventListener('_active', addPlayingCount);\n      animItem.addEventListener('_idle', subtractPlayingCount);\n      registeredAnimations.push({\n        elem: element,\n        animation: animItem\n      });\n      len += 1;\n    }\n\n    function loadAnimation(params) {\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, null);\n      animItem.setParams(params);\n      return animItem;\n    }\n\n    function setSpeed(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setSpeed(val, animation);\n      }\n    }\n\n    function setDirection(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setDirection(val, animation);\n      }\n    }\n\n    function play(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.play(animation);\n      }\n    }\n\n    function resume(nowTime) {\n      var elapsedTime = nowTime - initTime;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.advanceTime(elapsedTime);\n      }\n\n      initTime = nowTime;\n\n      if (playingAnimationsNum && !_isFrozen) {\n        window.requestAnimationFrame(resume);\n      } else {\n        _stopped = true;\n      }\n    }\n\n    function first(nowTime) {\n      initTime = nowTime;\n      window.requestAnimationFrame(resume);\n    }\n\n    function pause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.pause(animation);\n      }\n    }\n\n    function goToAndStop(value, isFrame, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n      }\n    }\n\n    function stop(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.stop(animation);\n      }\n    }\n\n    function togglePause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.togglePause(animation);\n      }\n    }\n\n    function destroy(animation) {\n      var i;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        registeredAnimations[i].animation.destroy(animation);\n      }\n    }\n\n    function searchAnimations(animationData, standalone, renderer) {\n      var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n      var i;\n      var lenAnims = animElements.length;\n\n      for (i = 0; i < lenAnims; i += 1) {\n        if (renderer) {\n          animElements[i].setAttribute('data-bm-type', renderer);\n        }\n\n        registerAnimation(animElements[i], animationData);\n      }\n\n      if (standalone && lenAnims === 0) {\n        if (!renderer) {\n          renderer = 'svg';\n        }\n\n        var body = document.getElementsByTagName('body')[0];\n        body.innerText = '';\n        var div = createTag('div');\n        div.style.width = '100%';\n        div.style.height = '100%';\n        div.setAttribute('data-bm-type', renderer);\n        body.appendChild(div);\n        registerAnimation(div, animationData);\n      }\n    }\n\n    function resize() {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.resize();\n      }\n    }\n\n    function activate() {\n      if (!_isFrozen && playingAnimationsNum) {\n        if (_stopped) {\n          window.requestAnimationFrame(first);\n          _stopped = false;\n        }\n      }\n    }\n\n    function freeze() {\n      _isFrozen = true;\n    }\n\n    function unfreeze() {\n      _isFrozen = false;\n      activate();\n    }\n\n    function setVolume(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setVolume(val, animation);\n      }\n    }\n\n    function mute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.mute(animation);\n      }\n    }\n\n    function unmute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.unmute(animation);\n      }\n    }\n\n    moduleOb.registerAnimation = registerAnimation;\n    moduleOb.loadAnimation = loadAnimation;\n    moduleOb.setSpeed = setSpeed;\n    moduleOb.setDirection = setDirection;\n    moduleOb.play = play;\n    moduleOb.pause = pause;\n    moduleOb.stop = stop;\n    moduleOb.togglePause = togglePause;\n    moduleOb.searchAnimations = searchAnimations;\n    moduleOb.resize = resize; // moduleOb.start = start;\n\n    moduleOb.goToAndStop = goToAndStop;\n    moduleOb.destroy = destroy;\n    moduleOb.freeze = freeze;\n    moduleOb.unfreeze = unfreeze;\n    moduleOb.setVolume = setVolume;\n    moduleOb.mute = mute;\n    moduleOb.unmute = unmute;\n    moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n    return moduleOb;\n  }();\n\n  /* eslint-disable */\n  var BezierFactory = function () {\n    /**\r\n       * BezierEasing - use bezier curve for transition easing function\r\n       * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n       *\r\n       * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n       * Usage:\r\n       * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n       * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n       *\r\n       */\n    var ob = {};\n    ob.getBezierEasing = getBezierEasing;\n    var beziers = {};\n\n    function getBezierEasing(a, b, c, d, nm) {\n      var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n      if (beziers[str]) {\n        return beziers[str];\n      }\n\n      var bezEasing = new BezierEasing([a, b, c, d]);\n      beziers[str] = bezEasing;\n      return bezEasing;\n    } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n    var NEWTON_ITERATIONS = 4;\n    var NEWTON_MIN_SLOPE = 0.001;\n    var SUBDIVISION_PRECISION = 0.0000001;\n    var SUBDIVISION_MAX_ITERATIONS = 10;\n    var kSplineTableSize = 11;\n    var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n    var float32ArraySupported = typeof Float32Array === 'function';\n\n    function A(aA1, aA2) {\n      return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n    }\n\n    function B(aA1, aA2) {\n      return 3.0 * aA2 - 6.0 * aA1;\n    }\n\n    function C(aA1) {\n      return 3.0 * aA1;\n    } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n    function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n    } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n    function getSlope(aT, aA1, aA2) {\n      return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n    }\n\n    function binarySubdivide(aX, aA, aB, mX1, mX2) {\n      var currentX,\n          currentT,\n          i = 0;\n\n      do {\n        currentT = aA + (aB - aA) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n        if (currentX > 0.0) {\n          aB = currentT;\n        } else {\n          aA = currentT;\n        }\n      } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n      return currentT;\n    }\n\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n      for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n        var currentSlope = getSlope(aGuessT, mX1, mX2);\n        if (currentSlope === 0.0) return aGuessT;\n        var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n        aGuessT -= currentX / currentSlope;\n      }\n\n      return aGuessT;\n    }\n    /**\r\n       * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n       */\n\n\n    function BezierEasing(points) {\n      this._p = points;\n      this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n      this._precomputed = false;\n      this.get = this.get.bind(this);\n    }\n\n    BezierEasing.prototype = {\n      get: function get(x) {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        if (!this._precomputed) this._precompute();\n        if (mX1 === mY1 && mX2 === mY2) return x; // linear\n        // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n        if (x === 0) return 0;\n        if (x === 1) return 1;\n        return calcBezier(this._getTForX(x), mY1, mY2);\n      },\n      // Private part\n      _precompute: function _precompute() {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        this._precomputed = true;\n\n        if (mX1 !== mY1 || mX2 !== mY2) {\n          this._calcSampleValues();\n        }\n      },\n      _calcSampleValues: function _calcSampleValues() {\n        var mX1 = this._p[0],\n            mX2 = this._p[2];\n\n        for (var i = 0; i < kSplineTableSize; ++i) {\n          this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n        }\n      },\n\n      /**\r\n           * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n           */\n      _getTForX: function _getTForX(aX) {\n        var mX1 = this._p[0],\n            mX2 = this._p[2],\n            mSampleValues = this._mSampleValues;\n        var intervalStart = 0.0;\n        var currentSample = 1;\n        var lastSample = kSplineTableSize - 1;\n\n        for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n          intervalStart += kSampleStepSize;\n        }\n\n        --currentSample; // Interpolate to provide an initial guess for t\n\n        var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n        var guessForT = intervalStart + dist * kSampleStepSize;\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n          return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n\n        if (initialSlope === 0.0) {\n          return guessForT;\n        }\n\n        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n      }\n    };\n    return ob;\n  }();\n\n  var pooling = function () {\n    function _double(arr) {\n      return arr.concat(createSizedArray(arr.length));\n    }\n\n    return {\n      \"double\": _double\n    };\n  }();\n\n  var poolFactory = function () {\n    return function (initialLength, _create, _release) {\n      var _length = 0;\n      var _maxLength = initialLength;\n      var pool = createSizedArray(_maxLength);\n      var ob = {\n        newElement: newElement,\n        release: release\n      };\n\n      function newElement() {\n        var element;\n\n        if (_length) {\n          _length -= 1;\n          element = pool[_length];\n        } else {\n          element = _create();\n        }\n\n        return element;\n      }\n\n      function release(element) {\n        if (_length === _maxLength) {\n          pool = pooling[\"double\"](pool);\n          _maxLength *= 2;\n        }\n\n        if (_release) {\n          _release(element);\n        }\n\n        pool[_length] = element;\n        _length += 1;\n      }\n\n      return ob;\n    };\n  }();\n\n  var bezierLengthPool = function () {\n    function create() {\n      return {\n        addedLength: 0,\n        percents: createTypedArray('float32', getDefaultCurveSegments()),\n        lengths: createTypedArray('float32', getDefaultCurveSegments())\n      };\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  var segmentsLengthPool = function () {\n    function create() {\n      return {\n        lengths: [],\n        totalLength: 0\n      };\n    }\n\n    function release(element) {\n      var i;\n      var len = element.lengths.length;\n\n      for (i = 0; i < len; i += 1) {\n        bezierLengthPool.release(element.lengths[i]);\n      }\n\n      element.lengths.length = 0;\n    }\n\n    return poolFactory(8, create, release);\n  }();\n\n  function bezFunction() {\n    var math = Math;\n\n    function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n      var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n      return det1 > -0.001 && det1 < 0.001;\n    }\n\n    function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n      if (z1 === 0 && z2 === 0 && z3 === 0) {\n        return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n      }\n\n      var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n      var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n      var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n      var diffDist;\n\n      if (dist1 > dist2) {\n        if (dist1 > dist3) {\n          diffDist = dist1 - dist2 - dist3;\n        } else {\n          diffDist = dist3 - dist2 - dist1;\n        }\n      } else if (dist3 > dist2) {\n        diffDist = dist3 - dist2 - dist1;\n      } else {\n        diffDist = dist2 - dist1 - dist3;\n      }\n\n      return diffDist > -0.0001 && diffDist < 0.0001;\n    }\n\n    var getBezierLength = function () {\n      return function (pt1, pt2, pt3, pt4) {\n        var curveSegments = getDefaultCurveSegments();\n        var k;\n        var i;\n        var len;\n        var ptCoord;\n        var perc;\n        var addedLength = 0;\n        var ptDistance;\n        var point = [];\n        var lastPoint = [];\n        var lengthData = bezierLengthPool.newElement();\n        len = pt3.length;\n\n        for (k = 0; k < curveSegments; k += 1) {\n          perc = k / (curveSegments - 1);\n          ptDistance = 0;\n\n          for (i = 0; i < len; i += 1) {\n            ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n            point[i] = ptCoord;\n\n            if (lastPoint[i] !== null) {\n              ptDistance += bmPow(point[i] - lastPoint[i], 2);\n            }\n\n            lastPoint[i] = point[i];\n          }\n\n          if (ptDistance) {\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n          }\n\n          lengthData.percents[k] = perc;\n          lengthData.lengths[k] = addedLength;\n        }\n\n        lengthData.addedLength = addedLength;\n        return lengthData;\n      };\n    }();\n\n    function getSegmentsLength(shapeData) {\n      var segmentsLength = segmentsLengthPool.newElement();\n      var closed = shapeData.c;\n      var pathV = shapeData.v;\n      var pathO = shapeData.o;\n      var pathI = shapeData.i;\n      var i;\n      var len = shapeData._length;\n      var lengths = segmentsLength.lengths;\n      var totalLength = 0;\n\n      for (i = 0; i < len - 1; i += 1) {\n        lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      if (closed && len) {\n        lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      segmentsLength.totalLength = totalLength;\n      return segmentsLength;\n    }\n\n    function BezierData(length) {\n      this.segmentLength = 0;\n      this.points = new Array(length);\n    }\n\n    function PointData(partial, point) {\n      this.partialLength = partial;\n      this.point = point;\n    }\n\n    var buildBezierData = function () {\n      var storedData = {};\n      return function (pt1, pt2, pt3, pt4) {\n        var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n        if (!storedData[bezierName]) {\n          var curveSegments = getDefaultCurveSegments();\n          var k;\n          var i;\n          var len;\n          var ptCoord;\n          var perc;\n          var addedLength = 0;\n          var ptDistance;\n          var point;\n          var lastPoint = null;\n\n          if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n            curveSegments = 2;\n          }\n\n          var bezierData = new BezierData(curveSegments);\n          len = pt3.length;\n\n          for (k = 0; k < curveSegments; k += 1) {\n            point = createSizedArray(len);\n            perc = k / (curveSegments - 1);\n            ptDistance = 0;\n\n            for (i = 0; i < len; i += 1) {\n              ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n              point[i] = ptCoord;\n\n              if (lastPoint !== null) {\n                ptDistance += bmPow(point[i] - lastPoint[i], 2);\n              }\n            }\n\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n            bezierData.points[k] = new PointData(ptDistance, point);\n            lastPoint = point;\n          }\n\n          bezierData.segmentLength = addedLength;\n          storedData[bezierName] = bezierData;\n        }\n\n        return storedData[bezierName];\n      };\n    }();\n\n    function getDistancePerc(perc, bezierData) {\n      var percents = bezierData.percents;\n      var lengths = bezierData.lengths;\n      var len = percents.length;\n      var initPos = bmFloor((len - 1) * perc);\n      var lengthPos = perc * bezierData.addedLength;\n      var lPerc = 0;\n\n      if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n        return percents[initPos];\n      }\n\n      var dir = lengths[initPos] > lengthPos ? -1 : 1;\n      var flag = true;\n\n      while (flag) {\n        if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n          lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n          flag = false;\n        } else {\n          initPos += dir;\n        }\n\n        if (initPos < 0 || initPos >= len - 1) {\n          // FIX for TypedArrays that don't store floating point values with enough accuracy\n          if (initPos === len - 1) {\n            return percents[initPos];\n          }\n\n          flag = false;\n        }\n      }\n\n      return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n    }\n\n    function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n      var t1 = getDistancePerc(percent, bezierData);\n      var u1 = 1 - t1;\n      var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n      var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n      return [ptX, ptY];\n    }\n\n    var bezierSegmentPoints = createTypedArray('float32', 8);\n\n    function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n      if (startPerc < 0) {\n        startPerc = 0;\n      } else if (startPerc > 1) {\n        startPerc = 1;\n      }\n\n      var t0 = getDistancePerc(startPerc, bezierData);\n      endPerc = endPerc > 1 ? 1 : endPerc;\n      var t1 = getDistancePerc(endPerc, bezierData);\n      var i;\n      var len = pt1.length;\n      var u0 = 1 - t0;\n      var u1 = 1 - t1;\n      var u0u0u0 = u0 * u0 * u0;\n      var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0t0 = t0 * t0 * t0; //\n\n      var u0u0u1 = u0 * u0 * u1;\n      var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0t1 = t0 * t0 * t1; //\n\n      var u0u1u1 = u0 * u1 * u1;\n      var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1t1 = t0 * t1 * t1; //\n\n      var u1u1u1 = u1 * u1 * u1;\n      var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1t1 = t1 * t1 * t1;\n\n      for (i = 0; i < len; i += 1) {\n        bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n      }\n\n      return bezierSegmentPoints;\n    }\n\n    return {\n      getSegmentsLength: getSegmentsLength,\n      getNewSegment: getNewSegment,\n      getPointInSegment: getPointInSegment,\n      buildBezierData: buildBezierData,\n      pointOnLine2D: pointOnLine2D,\n      pointOnLine3D: pointOnLine3D\n    };\n  }\n\n  var bez = bezFunction();\n\n  var initFrame = initialDefaultFrame;\n  var mathAbs = Math.abs;\n\n  function interpolateValue(frameNum, caching) {\n    var offsetTime = this.offsetTime;\n    var newValue;\n\n    if (this.propType === 'multidimensional') {\n      newValue = createTypedArray('float32', this.pv.length);\n    }\n\n    var iterationIndex = caching.lastIndex;\n    var i = iterationIndex;\n    var len = this.keyframes.length - 1;\n    var flag = true;\n    var keyData;\n    var nextKeyData;\n    var keyframeMetadata;\n\n    while (flag) {\n      keyData = this.keyframes[i];\n      nextKeyData = this.keyframes[i + 1];\n\n      if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n        if (keyData.h) {\n          keyData = nextKeyData;\n        }\n\n        iterationIndex = 0;\n        break;\n      }\n\n      if (nextKeyData.t - offsetTime > frameNum) {\n        iterationIndex = i;\n        break;\n      }\n\n      if (i < len - 1) {\n        i += 1;\n      } else {\n        iterationIndex = 0;\n        flag = false;\n      }\n    }\n\n    keyframeMetadata = this.keyframesMetadata[i] || {};\n    var k;\n    var kLen;\n    var perc;\n    var jLen;\n    var j;\n    var fnc;\n    var nextKeyTime = nextKeyData.t - offsetTime;\n    var keyTime = keyData.t - offsetTime;\n    var endValue;\n\n    if (keyData.to) {\n      if (!keyframeMetadata.bezierData) {\n        keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n      }\n\n      var bezierData = keyframeMetadata.bezierData;\n\n      if (frameNum >= nextKeyTime || frameNum < keyTime) {\n        var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n        kLen = bezierData.points[ind].point.length;\n\n        for (k = 0; k < kLen; k += 1) {\n          newValue[k] = bezierData.points[ind].point[k];\n        } // caching._lastKeyframeIndex = -1;\n\n      } else {\n        if (keyframeMetadata.__fnct) {\n          fnc = keyframeMetadata.__fnct;\n        } else {\n          fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n          keyframeMetadata.__fnct = fnc;\n        }\n\n        perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n        var distanceInLine = bezierData.segmentLength * perc;\n        var segmentPerc;\n        var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n        j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n        flag = true;\n        jLen = bezierData.points.length;\n\n        while (flag) {\n          addedLength += bezierData.points[j].partialLength;\n\n          if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n            kLen = bezierData.points[j].point.length;\n\n            for (k = 0; k < kLen; k += 1) {\n              newValue[k] = bezierData.points[j].point[k];\n            }\n\n            break;\n          } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n            segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n            kLen = bezierData.points[j].point.length;\n\n            for (k = 0; k < kLen; k += 1) {\n              newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n            }\n\n            break;\n          }\n\n          if (j < jLen - 1) {\n            j += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        caching._lastPoint = j;\n        caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n        caching._lastKeyframeIndex = i;\n      }\n    } else {\n      var outX;\n      var outY;\n      var inX;\n      var inY;\n      var keyValue;\n      len = keyData.s.length;\n      endValue = nextKeyData.s || keyData.e;\n\n      if (this.sh && keyData.h !== 1) {\n        if (frameNum >= nextKeyTime) {\n          newValue[0] = endValue[0];\n          newValue[1] = endValue[1];\n          newValue[2] = endValue[2];\n        } else if (frameNum <= keyTime) {\n          newValue[0] = keyData.s[0];\n          newValue[1] = keyData.s[1];\n          newValue[2] = keyData.s[2];\n        } else {\n          var quatStart = createQuaternion(keyData.s);\n          var quatEnd = createQuaternion(endValue);\n          var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n          quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n        }\n      } else {\n        for (i = 0; i < len; i += 1) {\n          if (keyData.h !== 1) {\n            if (frameNum >= nextKeyTime) {\n              perc = 1;\n            } else if (frameNum < keyTime) {\n              perc = 0;\n            } else {\n              if (keyData.o.x.constructor === Array) {\n                if (!keyframeMetadata.__fnct) {\n                  keyframeMetadata.__fnct = [];\n                }\n\n                if (!keyframeMetadata.__fnct[i]) {\n                  outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n                  outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n                  inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n                  inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n                  fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                  keyframeMetadata.__fnct[i] = fnc;\n                } else {\n                  fnc = keyframeMetadata.__fnct[i];\n                }\n              } else if (!keyframeMetadata.__fnct) {\n                outX = keyData.o.x;\n                outY = keyData.o.y;\n                inX = keyData.i.x;\n                inY = keyData.i.y;\n                fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                keyData.keyframeMetadata = fnc;\n              } else {\n                fnc = keyframeMetadata.__fnct;\n              }\n\n              perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n            }\n          }\n\n          endValue = nextKeyData.s || keyData.e;\n          keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n          if (this.propType === 'multidimensional') {\n            newValue[i] = keyValue;\n          } else {\n            newValue = keyValue;\n          }\n        }\n      }\n    }\n\n    caching.lastIndex = iterationIndex;\n    return newValue;\n  } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n  function slerp(a, b, t) {\n    var out = [];\n    var ax = a[0];\n    var ay = a[1];\n    var az = a[2];\n    var aw = a[3];\n    var bx = b[0];\n    var by = b[1];\n    var bz = b[2];\n    var bw = b[3];\n    var omega;\n    var cosom;\n    var sinom;\n    var scale0;\n    var scale1;\n    cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n    if (cosom < 0.0) {\n      cosom = -cosom;\n      bx = -bx;\n      by = -by;\n      bz = -bz;\n      bw = -bw;\n    }\n\n    if (1.0 - cosom > 0.000001) {\n      omega = Math.acos(cosom);\n      sinom = Math.sin(omega);\n      scale0 = Math.sin((1.0 - t) * omega) / sinom;\n      scale1 = Math.sin(t * omega) / sinom;\n    } else {\n      scale0 = 1.0 - t;\n      scale1 = t;\n    }\n\n    out[0] = scale0 * ax + scale1 * bx;\n    out[1] = scale0 * ay + scale1 * by;\n    out[2] = scale0 * az + scale1 * bz;\n    out[3] = scale0 * aw + scale1 * bw;\n    return out;\n  }\n\n  function quaternionToEuler(out, quat) {\n    var qx = quat[0];\n    var qy = quat[1];\n    var qz = quat[2];\n    var qw = quat[3];\n    var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n    var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n    var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n    out[0] = heading / degToRads;\n    out[1] = attitude / degToRads;\n    out[2] = bank / degToRads;\n  }\n\n  function createQuaternion(values) {\n    var heading = values[0] * degToRads;\n    var attitude = values[1] * degToRads;\n    var bank = values[2] * degToRads;\n    var c1 = Math.cos(heading / 2);\n    var c2 = Math.cos(attitude / 2);\n    var c3 = Math.cos(bank / 2);\n    var s1 = Math.sin(heading / 2);\n    var s2 = Math.sin(attitude / 2);\n    var s3 = Math.sin(bank / 2);\n    var w = c1 * c2 * c3 - s1 * s2 * s3;\n    var x = s1 * s2 * c3 + c1 * c2 * s3;\n    var y = s1 * c2 * c3 + c1 * s2 * s3;\n    var z = c1 * s2 * c3 - s1 * c2 * s3;\n    return [x, y, z, w];\n  }\n\n  function getValueAtCurrentTime() {\n    var frameNum = this.comp.renderedFrame - this.offsetTime;\n    var initTime = this.keyframes[0].t - this.offsetTime;\n    var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n    if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n      if (this._caching.lastFrame >= frameNum) {\n        this._caching._lastKeyframeIndex = -1;\n        this._caching.lastIndex = 0;\n      }\n\n      var renderResult = this.interpolateValue(frameNum, this._caching);\n      this.pv = renderResult;\n    }\n\n    this._caching.lastFrame = frameNum;\n    return this.pv;\n  }\n\n  function setVValue(val) {\n    var multipliedValue;\n\n    if (this.propType === 'unidimensional') {\n      multipliedValue = val * this.mult;\n\n      if (mathAbs(this.v - multipliedValue) > 0.00001) {\n        this.v = multipliedValue;\n        this._mdf = true;\n      }\n    } else {\n      var i = 0;\n      var len = this.v.length;\n\n      while (i < len) {\n        multipliedValue = val[i] * this.mult;\n\n        if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n          this.v[i] = multipliedValue;\n          this._mdf = true;\n        }\n\n        i += 1;\n      }\n    }\n  }\n\n  function processEffectsSequence() {\n    if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n      return;\n    }\n\n    if (this.lock) {\n      this.setVValue(this.pv);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = this._isFirstFrame;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = this.kf ? this.pv : this.data.k;\n\n    for (i = 0; i < len; i += 1) {\n      finalValue = this.effectsSequence[i](finalValue);\n    }\n\n    this.setVValue(finalValue);\n    this._isFirstFrame = false;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  }\n\n  function addEffect(effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.container.addDynamicProperty(this);\n  }\n\n  function ValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this.v = mult ? data.k * mult : data.k;\n    this.pv = data.k;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.vel = 0;\n    this.effectsSequence = [];\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n\n  function MultiDimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.frameId = -1;\n    var i;\n    var len = data.k.length;\n    this.v = createTypedArray('float32', len);\n    this.pv = createTypedArray('float32', len);\n    this.vel = createTypedArray('float32', len);\n\n    for (i = 0; i < len; i += 1) {\n      this.v[i] = data.k[i] * this.mult;\n      this.pv[i] = data.k[i];\n    }\n\n    this._isFirstFrame = true;\n    this.effectsSequence = [];\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n\n  function KeyframedValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.keyframes = data.k;\n    this.keyframesMetadata = [];\n    this.offsetTime = elem.data.st;\n    this.frameId = -1;\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: 0,\n      _lastKeyframeIndex: -1\n    };\n    this.k = true;\n    this.kf = true;\n    this.data = data;\n    this.mult = mult || 1;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.v = initFrame;\n    this.pv = initFrame;\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.interpolateValue = interpolateValue;\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.addEffect = addEffect;\n  }\n\n  function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    var i;\n    var len = data.k.length;\n    var s;\n    var e;\n    var to;\n    var ti;\n\n    for (i = 0; i < len - 1; i += 1) {\n      if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n        s = data.k[i].s;\n        e = data.k[i + 1].s;\n        to = data.k[i].to;\n        ti = data.k[i].ti;\n\n        if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n          data.k[i].to = null;\n          data.k[i].ti = null;\n        }\n\n        if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n          if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n            data.k[i].to = null;\n            data.k[i].ti = null;\n          }\n        }\n      }\n    }\n\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.data = data;\n    this.keyframes = data.k;\n    this.keyframesMetadata = [];\n    this.offsetTime = elem.data.st;\n    this.k = true;\n    this.kf = true;\n    this._isFirstFrame = true;\n    this.mult = mult || 1;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.interpolateValue = interpolateValue;\n    this.frameId = -1;\n    var arrLen = data.k[0].s.length;\n    this.v = createTypedArray('float32', arrLen);\n    this.pv = createTypedArray('float32', arrLen);\n\n    for (i = 0; i < arrLen; i += 1) {\n      this.v[i] = initFrame;\n      this.pv[i] = initFrame;\n    }\n\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: createTypedArray('float32', arrLen)\n    };\n    this.addEffect = addEffect;\n  }\n\n  var PropertyFactory = function () {\n    function getProp(elem, data, type, mult, container) {\n      if (data.sid) {\n        data = elem.globalData.slotManager.getProp(data);\n      }\n\n      var p;\n\n      if (!data.k.length) {\n        p = new ValueProperty(elem, data, mult, container);\n      } else if (typeof data.k[0] === 'number') {\n        p = new MultiDimensionalProperty(elem, data, mult, container);\n      } else {\n        switch (type) {\n          case 0:\n            p = new KeyframedValueProperty(elem, data, mult, container);\n            break;\n\n          case 1:\n            p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (p.effectsSequence.length) {\n        container.addDynamicProperty(p);\n      }\n\n      return p;\n    }\n\n    var ob = {\n      getProp: getProp\n    };\n    return ob;\n  }();\n\n  function DynamicPropertyContainer() {}\n\n  DynamicPropertyContainer.prototype = {\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n        this.container.addDynamicProperty(this);\n        this._isAnimated = true;\n      }\n    },\n    iterateDynamicProperties: function iterateDynamicProperties() {\n      this._mdf = false;\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.dynamicProperties[i].getValue();\n\n        if (this.dynamicProperties[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    },\n    initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n      this.container = container;\n      this.dynamicProperties = [];\n      this._mdf = false;\n      this._isAnimated = false;\n    }\n  };\n\n  var pointPool = function () {\n    function create() {\n      return createTypedArray('float32', 2);\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  function ShapePath() {\n    this.c = false;\n    this._length = 0;\n    this._maxLength = 8;\n    this.v = createSizedArray(this._maxLength);\n    this.o = createSizedArray(this._maxLength);\n    this.i = createSizedArray(this._maxLength);\n  }\n\n  ShapePath.prototype.setPathData = function (closed, len) {\n    this.c = closed;\n    this.setLength(len);\n    var i = 0;\n\n    while (i < len) {\n      this.v[i] = pointPool.newElement();\n      this.o[i] = pointPool.newElement();\n      this.i[i] = pointPool.newElement();\n      i += 1;\n    }\n  };\n\n  ShapePath.prototype.setLength = function (len) {\n    while (this._maxLength < len) {\n      this.doubleArrayLength();\n    }\n\n    this._length = len;\n  };\n\n  ShapePath.prototype.doubleArrayLength = function () {\n    this.v = this.v.concat(createSizedArray(this._maxLength));\n    this.i = this.i.concat(createSizedArray(this._maxLength));\n    this.o = this.o.concat(createSizedArray(this._maxLength));\n    this._maxLength *= 2;\n  };\n\n  ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n    var arr;\n    this._length = Math.max(this._length, pos + 1);\n\n    if (this._length >= this._maxLength) {\n      this.doubleArrayLength();\n    }\n\n    switch (type) {\n      case 'v':\n        arr = this.v;\n        break;\n\n      case 'i':\n        arr = this.i;\n        break;\n\n      case 'o':\n        arr = this.o;\n        break;\n\n      default:\n        arr = [];\n        break;\n    }\n\n    if (!arr[pos] || arr[pos] && !replace) {\n      arr[pos] = pointPool.newElement();\n    }\n\n    arr[pos][0] = x;\n    arr[pos][1] = y;\n  };\n\n  ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n    this.setXYAt(vX, vY, 'v', pos, replace);\n    this.setXYAt(oX, oY, 'o', pos, replace);\n    this.setXYAt(iX, iY, 'i', pos, replace);\n  };\n\n  ShapePath.prototype.reverse = function () {\n    var newPath = new ShapePath();\n    newPath.setPathData(this.c, this._length);\n    var vertices = this.v;\n    var outPoints = this.o;\n    var inPoints = this.i;\n    var init = 0;\n\n    if (this.c) {\n      newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n      init = 1;\n    }\n\n    var cnt = this._length - 1;\n    var len = this._length;\n    var i;\n\n    for (i = init; i < len; i += 1) {\n      newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n      cnt -= 1;\n    }\n\n    return newPath;\n  };\n\n  ShapePath.prototype.length = function () {\n    return this._length;\n  };\n\n  var shapePool = function () {\n    function create() {\n      return new ShapePath();\n    }\n\n    function release(shapePath) {\n      var len = shapePath._length;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        pointPool.release(shapePath.v[i]);\n        pointPool.release(shapePath.i[i]);\n        pointPool.release(shapePath.o[i]);\n        shapePath.v[i] = null;\n        shapePath.i[i] = null;\n        shapePath.o[i] = null;\n      }\n\n      shapePath._length = 0;\n      shapePath.c = false;\n    }\n\n    function clone(shape) {\n      var cloned = factory.newElement();\n      var i;\n      var len = shape._length === undefined ? shape.v.length : shape._length;\n      cloned.setLength(len);\n      cloned.c = shape.c;\n\n      for (i = 0; i < len; i += 1) {\n        cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n      }\n\n      return cloned;\n    }\n\n    var factory = poolFactory(4, create, release);\n    factory.clone = clone;\n    return factory;\n  }();\n\n  function ShapeCollection() {\n    this._length = 0;\n    this._maxLength = 4;\n    this.shapes = createSizedArray(this._maxLength);\n  }\n\n  ShapeCollection.prototype.addShape = function (shapeData) {\n    if (this._length === this._maxLength) {\n      this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n      this._maxLength *= 2;\n    }\n\n    this.shapes[this._length] = shapeData;\n    this._length += 1;\n  };\n\n  ShapeCollection.prototype.releaseShapes = function () {\n    var i;\n\n    for (i = 0; i < this._length; i += 1) {\n      shapePool.release(this.shapes[i]);\n    }\n\n    this._length = 0;\n  };\n\n  var shapeCollectionPool = function () {\n    var ob = {\n      newShapeCollection: newShapeCollection,\n      release: release\n    };\n    var _length = 0;\n    var _maxLength = 4;\n    var pool = createSizedArray(_maxLength);\n\n    function newShapeCollection() {\n      var shapeCollection;\n\n      if (_length) {\n        _length -= 1;\n        shapeCollection = pool[_length];\n      } else {\n        shapeCollection = new ShapeCollection();\n      }\n\n      return shapeCollection;\n    }\n\n    function release(shapeCollection) {\n      var i;\n      var len = shapeCollection._length;\n\n      for (i = 0; i < len; i += 1) {\n        shapePool.release(shapeCollection.shapes[i]);\n      }\n\n      shapeCollection._length = 0;\n\n      if (_length === _maxLength) {\n        pool = pooling[\"double\"](pool);\n        _maxLength *= 2;\n      }\n\n      pool[_length] = shapeCollection;\n      _length += 1;\n    }\n\n    return ob;\n  }();\n\n  var ShapePropertyFactory = function () {\n    var initFrame = -999999;\n\n    function interpolateShape(frameNum, previousValue, caching) {\n      var iterationIndex = caching.lastIndex;\n      var keyPropS;\n      var keyPropE;\n      var isHold;\n      var j;\n      var k;\n      var jLen;\n      var kLen;\n      var perc;\n      var vertexValue;\n      var kf = this.keyframes;\n\n      if (frameNum < kf[0].t - this.offsetTime) {\n        keyPropS = kf[0].s[0];\n        isHold = true;\n        iterationIndex = 0;\n      } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n        keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n        /* if(kf[kf.length - 1].s){\r\n                  keyPropS = kf[kf.length - 1].s[0];\r\n              }else{\r\n                  keyPropS = kf[kf.length - 2].e[0];\r\n              } */\n\n        isHold = true;\n      } else {\n        var i = iterationIndex;\n        var len = kf.length - 1;\n        var flag = true;\n        var keyData;\n        var nextKeyData;\n        var keyframeMetadata;\n\n        while (flag) {\n          keyData = kf[i];\n          nextKeyData = kf[i + 1];\n\n          if (nextKeyData.t - this.offsetTime > frameNum) {\n            break;\n          }\n\n          if (i < len - 1) {\n            i += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        keyframeMetadata = this.keyframesMetadata[i] || {};\n        isHold = keyData.h === 1;\n        iterationIndex = i;\n\n        if (!isHold) {\n          if (frameNum >= nextKeyData.t - this.offsetTime) {\n            perc = 1;\n          } else if (frameNum < keyData.t - this.offsetTime) {\n            perc = 0;\n          } else {\n            var fnc;\n\n            if (keyframeMetadata.__fnct) {\n              fnc = keyframeMetadata.__fnct;\n            } else {\n              fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n              keyframeMetadata.__fnct = fnc;\n            }\n\n            perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n          }\n\n          keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n        }\n\n        keyPropS = keyData.s[0];\n      }\n\n      jLen = previousValue._length;\n      kLen = keyPropS.i[0].length;\n      caching.lastIndex = iterationIndex;\n\n      for (j = 0; j < jLen; j += 1) {\n        for (k = 0; k < kLen; k += 1) {\n          vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n          previousValue.i[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n          previousValue.o[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n          previousValue.v[j][k] = vertexValue;\n        }\n      }\n    }\n\n    function interpolateShapeCurrentTime() {\n      var frameNum = this.comp.renderedFrame - this.offsetTime;\n      var initTime = this.keyframes[0].t - this.offsetTime;\n      var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n      var lastFrame = this._caching.lastFrame;\n\n      if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n        /// /\n        this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n        this.interpolateShape(frameNum, this.pv, this._caching); /// /\n      }\n\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n\n    function resetShape() {\n      this.paths = this.localShapeCollection;\n    }\n\n    function shapesEqual(shape1, shape2) {\n      if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n        return false;\n      }\n\n      var i;\n      var len = shape1._length;\n\n      for (i = 0; i < len; i += 1) {\n        if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    function setVValue(newPath) {\n      if (!shapesEqual(this.v, newPath)) {\n        this.v = shapePool.clone(newPath);\n        this.localShapeCollection.releaseShapes();\n        this.localShapeCollection.addShape(this.v);\n        this._mdf = true;\n        this.paths = this.localShapeCollection;\n      }\n    }\n\n    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (!this.effectsSequence.length) {\n        this._mdf = false;\n        return;\n      }\n\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n\n      this.lock = true;\n      this._mdf = false;\n      var finalValue;\n\n      if (this.kf) {\n        finalValue = this.pv;\n      } else if (this.data.ks) {\n        finalValue = this.data.ks.k;\n      } else {\n        finalValue = this.data.pt.k;\n      }\n\n      var i;\n      var len = this.effectsSequence.length;\n\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n\n      this.setVValue(finalValue);\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function ShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.container = elem;\n      this.elem = elem;\n      this.data = data;\n      this.k = false;\n      this.kf = false;\n      this._mdf = false;\n      var pathData = type === 3 ? data.pt.k : data.ks.k;\n      this.v = shapePool.clone(pathData);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.reset = resetShape;\n      this.effectsSequence = [];\n    }\n\n    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n\n    ShapeProperty.prototype.interpolateShape = interpolateShape;\n    ShapeProperty.prototype.getValue = processEffectsSequence;\n    ShapeProperty.prototype.setVValue = setVValue;\n    ShapeProperty.prototype.addEffect = addEffect;\n\n    function KeyframedShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.elem = elem;\n      this.container = elem;\n      this.offsetTime = elem.data.st;\n      this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n      this.keyframesMetadata = [];\n      this.k = true;\n      this.kf = true;\n      var len = this.keyframes[0].s[0].i.length;\n      this.v = shapePool.newElement();\n      this.v.setPathData(this.keyframes[0].s[0].c, len);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.lastFrame = initFrame;\n      this.reset = resetShape;\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0\n      };\n      this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n    }\n\n    KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n    KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n    KeyframedShapeProperty.prototype.setVValue = setVValue;\n    KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n    var EllShapeProperty = function () {\n      var cPoint = roundCorner;\n\n      function EllShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 4);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.paths = this.localShapeCollection;\n        this.localShapeCollection.addShape(this.v);\n        this.d = data.d;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertEllToPath();\n        }\n      }\n\n      EllShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertEllToPath();\n          }\n        },\n        convertEllToPath: function convertEllToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var s0 = this.s.v[0] / 2;\n          var s1 = this.s.v[1] / 2;\n\n          var _cw = this.d !== 3;\n\n          var _v = this.v;\n          _v.v[0][0] = p0;\n          _v.v[0][1] = p1 - s1;\n          _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.v[1][1] = p1;\n          _v.v[2][0] = p0;\n          _v.v[2][1] = p1 + s1;\n          _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.v[3][1] = p1;\n          _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.i[0][1] = p1 - s1;\n          _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.i[1][1] = p1 - s1 * cPoint;\n          _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.i[2][1] = p1 + s1;\n          _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.i[3][1] = p1 + s1 * cPoint;\n          _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.o[0][1] = p1 - s1;\n          _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.o[1][1] = p1 + s1 * cPoint;\n          _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.o[2][1] = p1 + s1;\n          _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.o[3][1] = p1 - s1 * cPoint;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n      return EllShapePropertyFactory;\n    }();\n\n    var StarShapeProperty = function () {\n      function StarShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 0);\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.data = data;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n\n        if (data.sy === 1) {\n          this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n          this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n          this.convertToPath = this.convertStarToPath;\n        } else {\n          this.convertToPath = this.convertPolygonToPath;\n        }\n\n        this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n        this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n        this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertToPath();\n        }\n      }\n\n      StarShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertToPath();\n          }\n        },\n        convertStarToPath: function convertStarToPath() {\n          var numPts = Math.floor(this.pt.v) * 2;\n          var angle = Math.PI * 2 / numPts;\n          /* this.v.v.length = numPts;\r\n                  this.v.i.length = numPts;\r\n                  this.v.o.length = numPts; */\n\n          var longFlag = true;\n          var longRad = this.or.v;\n          var shortRad = this.ir.v;\n          var longRound = this.os.v;\n          var shortRound = this.is.v;\n          var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n          var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n          var i;\n          var rad;\n          var roundness;\n          var perimSegment;\n          var currentAng = -Math.PI / 2;\n          currentAng += this.r.v;\n          var dir = this.data.d === 3 ? -1 : 1;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            rad = longFlag ? longRad : shortRad;\n            roundness = longFlag ? longRound : shortRound;\n            perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            /* this.v.v[i] = [x,y];\r\n                      this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n                      this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n                      this.v._length = numPts; */\n\n            longFlag = !longFlag;\n            currentAng += angle * dir;\n          }\n        },\n        convertPolygonToPath: function convertPolygonToPath() {\n          var numPts = Math.floor(this.pt.v);\n          var angle = Math.PI * 2 / numPts;\n          var rad = this.or.v;\n          var roundness = this.os.v;\n          var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n          var i;\n          var currentAng = -Math.PI * 0.5;\n          var dir = this.data.d === 3 ? -1 : 1;\n          currentAng += this.r.v;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            currentAng += angle * dir;\n          }\n\n          this.paths.length = 0;\n          this.paths[0] = this.v;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n      return StarShapePropertyFactory;\n    }();\n\n    var RectShapeProperty = function () {\n      function RectShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.c = true;\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertRectToPath();\n        }\n      }\n\n      RectShapePropertyFactory.prototype = {\n        convertRectToPath: function convertRectToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var v0 = this.s.v[0] / 2;\n          var v1 = this.s.v[1] / 2;\n          var round = bmMin(v0, v1, this.r.v);\n          var cPoint = round * (1 - roundCorner);\n          this.v._length = 0;\n\n          if (this.d === 2 || this.d === 1) {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n            this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n            }\n          } else {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n            }\n          }\n        },\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertRectToPath();\n          }\n        },\n        reset: resetShape\n      };\n      extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n      return RectShapePropertyFactory;\n    }();\n\n    function getShapeProp(elem, data, type) {\n      var prop;\n\n      if (type === 3 || type === 4) {\n        var dataProp = type === 3 ? data.pt : data.ks;\n        var keys = dataProp.k;\n\n        if (keys.length) {\n          prop = new KeyframedShapeProperty(elem, data, type);\n        } else {\n          prop = new ShapeProperty(elem, data, type);\n        }\n      } else if (type === 5) {\n        prop = new RectShapeProperty(elem, data);\n      } else if (type === 6) {\n        prop = new EllShapeProperty(elem, data);\n      } else if (type === 7) {\n        prop = new StarShapeProperty(elem, data);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    }\n\n    function getConstructorFunction() {\n      return ShapeProperty;\n    }\n\n    function getKeyframedConstructorFunction() {\n      return KeyframedShapeProperty;\n    }\n\n    var ob = {};\n    ob.getShapeProp = getShapeProp;\n    ob.getConstructorFunction = getConstructorFunction;\n    ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n    return ob;\n  }();\n\n  /*!\r\n   Transformation Matrix v2.0\r\n   (c) Epistemex 2014-2015\r\n   www.epistemex.com\r\n   By Ken Fyrstenberg\r\n   Contributions by leeoniya.\r\n   License: MIT, header required.\r\n   */\n\n  /**\r\n   * 2D transformation matrix object initialized with identity matrix.\r\n   *\r\n   * The matrix can synchronize a canvas context by supplying the context\r\n   * as an argument, or later apply current absolute transform to an\r\n   * existing context.\r\n   *\r\n   * All values are handled as floating point values.\r\n   *\r\n   * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n   * @prop {number} a - scale x\r\n   * @prop {number} b - shear y\r\n   * @prop {number} c - shear x\r\n   * @prop {number} d - scale y\r\n   * @prop {number} e - translate x\r\n   * @prop {number} f - translate y\r\n   * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n   * @constructor\r\n   */\n\n  var Matrix = function () {\n    var _cos = Math.cos;\n    var _sin = Math.sin;\n    var _tan = Math.tan;\n    var _rnd = Math.round;\n\n    function reset() {\n      this.props[0] = 1;\n      this.props[1] = 0;\n      this.props[2] = 0;\n      this.props[3] = 0;\n      this.props[4] = 0;\n      this.props[5] = 1;\n      this.props[6] = 0;\n      this.props[7] = 0;\n      this.props[8] = 0;\n      this.props[9] = 0;\n      this.props[10] = 1;\n      this.props[11] = 0;\n      this.props[12] = 0;\n      this.props[13] = 0;\n      this.props[14] = 0;\n      this.props[15] = 1;\n      return this;\n    }\n\n    function rotate(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function rotateX(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateY(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateZ(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function shear(sx, sy) {\n      return this._t(1, sy, sx, 1, 0, 0);\n    }\n\n    function skew(ax, ay) {\n      return this.shear(_tan(ax), _tan(ay));\n    }\n\n    function skewFromAxis(ax, angle) {\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n    }\n\n    function scale(sx, sy, sz) {\n      if (!sz && sz !== 0) {\n        sz = 1;\n      }\n\n      if (sx === 1 && sy === 1 && sz === 1) {\n        return this;\n      }\n\n      return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n    }\n\n    function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n      this.props[0] = a;\n      this.props[1] = b;\n      this.props[2] = c;\n      this.props[3] = d;\n      this.props[4] = e;\n      this.props[5] = f;\n      this.props[6] = g;\n      this.props[7] = h;\n      this.props[8] = i;\n      this.props[9] = j;\n      this.props[10] = k;\n      this.props[11] = l;\n      this.props[12] = m;\n      this.props[13] = n;\n      this.props[14] = o;\n      this.props[15] = p;\n      return this;\n    }\n\n    function translate(tx, ty, tz) {\n      tz = tz || 0;\n\n      if (tx !== 0 || ty !== 0 || tz !== 0) {\n        return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n      }\n\n      return this;\n    }\n\n    function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n      var _p = this.props;\n\n      if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n        // NOTE: commenting this condition because TurboFan deoptimizes code when present\n        // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n        _p[12] = _p[12] * a2 + _p[15] * m2;\n        _p[13] = _p[13] * f2 + _p[15] * n2;\n        _p[14] = _p[14] * k2 + _p[15] * o2;\n        _p[15] *= p2; // }\n\n        this._identityCalculated = false;\n        return this;\n      }\n\n      var a1 = _p[0];\n      var b1 = _p[1];\n      var c1 = _p[2];\n      var d1 = _p[3];\n      var e1 = _p[4];\n      var f1 = _p[5];\n      var g1 = _p[6];\n      var h1 = _p[7];\n      var i1 = _p[8];\n      var j1 = _p[9];\n      var k1 = _p[10];\n      var l1 = _p[11];\n      var m1 = _p[12];\n      var n1 = _p[13];\n      var o1 = _p[14];\n      var p1 = _p[15];\n      /* matrix order (canvas compatible):\r\n           * ace\r\n           * bdf\r\n           * 001\r\n           */\n\n      _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n      _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n      _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n      _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n      _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n      _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n      _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n      _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n      _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n      _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n      _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n      _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n      _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n      _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n      _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n      _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n      this._identityCalculated = false;\n      return this;\n    }\n\n    function multiply(matrix) {\n      var matrixProps = matrix.props;\n      return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n    }\n\n    function isIdentity() {\n      if (!this._identityCalculated) {\n        this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n        this._identityCalculated = true;\n      }\n\n      return this._identity;\n    }\n\n    function equals(matr) {\n      var i = 0;\n\n      while (i < 16) {\n        if (matr.props[i] !== this.props[i]) {\n          return false;\n        }\n\n        i += 1;\n      }\n\n      return true;\n    }\n\n    function clone(matr) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        matr.props[i] = this.props[i];\n      }\n\n      return matr;\n    }\n\n    function cloneFromProps(props) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        this.props[i] = props[i];\n      }\n    }\n\n    function applyToPoint(x, y, z) {\n      return {\n        x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n        y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n        z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n      };\n      /* return {\r\n           x: x * me.a + y * me.c + me.e,\r\n           y: x * me.b + y * me.d + me.f\r\n           }; */\n    }\n\n    function applyToX(x, y, z) {\n      return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n    }\n\n    function applyToY(x, y, z) {\n      return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n    }\n\n    function applyToZ(x, y, z) {\n      return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n    }\n\n    function getInverseMatrix() {\n      var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n      var a = this.props[5] / determinant;\n      var b = -this.props[1] / determinant;\n      var c = -this.props[4] / determinant;\n      var d = this.props[0] / determinant;\n      var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n      var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n      var inverseMatrix = new Matrix();\n      inverseMatrix.props[0] = a;\n      inverseMatrix.props[1] = b;\n      inverseMatrix.props[4] = c;\n      inverseMatrix.props[5] = d;\n      inverseMatrix.props[12] = e;\n      inverseMatrix.props[13] = f;\n      return inverseMatrix;\n    }\n\n    function inversePoint(pt) {\n      var inverseMatrix = this.getInverseMatrix();\n      return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n    }\n\n    function inversePoints(pts) {\n      var i;\n      var len = pts.length;\n      var retPts = [];\n\n      for (i = 0; i < len; i += 1) {\n        retPts[i] = inversePoint(pts[i]);\n      }\n\n      return retPts;\n    }\n\n    function applyToTriplePoints(pt1, pt2, pt3) {\n      var arr = createTypedArray('float32', 6);\n\n      if (this.isIdentity()) {\n        arr[0] = pt1[0];\n        arr[1] = pt1[1];\n        arr[2] = pt2[0];\n        arr[3] = pt2[1];\n        arr[4] = pt3[0];\n        arr[5] = pt3[1];\n      } else {\n        var p0 = this.props[0];\n        var p1 = this.props[1];\n        var p4 = this.props[4];\n        var p5 = this.props[5];\n        var p12 = this.props[12];\n        var p13 = this.props[13];\n        arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n        arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n        arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n        arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n        arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n        arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n      }\n\n      return arr;\n    }\n\n    function applyToPointArray(x, y, z) {\n      var arr;\n\n      if (this.isIdentity()) {\n        arr = [x, y, z];\n      } else {\n        arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n      }\n\n      return arr;\n    }\n\n    function applyToPointStringified(x, y) {\n      if (this.isIdentity()) {\n        return x + ',' + y;\n      }\n\n      var _p = this.props;\n      return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n    }\n\n    function toCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var i = 0;\n      var props = this.props;\n      var cssValue = 'matrix3d(';\n      var v = 10000;\n\n      while (i < 16) {\n        cssValue += _rnd(props[i] * v) / v;\n        cssValue += i === 15 ? ')' : ',';\n        i += 1;\n      }\n\n      return cssValue;\n    }\n\n    function roundMatrixProperty(val) {\n      var v = 10000;\n\n      if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n        return _rnd(val * v) / v;\n      }\n\n      return val;\n    }\n\n    function to2dCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var props = this.props;\n\n      var _a = roundMatrixProperty(props[0]);\n\n      var _b = roundMatrixProperty(props[1]);\n\n      var _c = roundMatrixProperty(props[4]);\n\n      var _d = roundMatrixProperty(props[5]);\n\n      var _e = roundMatrixProperty(props[12]);\n\n      var _f = roundMatrixProperty(props[13]);\n\n      return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n    }\n\n    return function () {\n      this.reset = reset;\n      this.rotate = rotate;\n      this.rotateX = rotateX;\n      this.rotateY = rotateY;\n      this.rotateZ = rotateZ;\n      this.skew = skew;\n      this.skewFromAxis = skewFromAxis;\n      this.shear = shear;\n      this.scale = scale;\n      this.setTransform = setTransform;\n      this.translate = translate;\n      this.transform = transform;\n      this.multiply = multiply;\n      this.applyToPoint = applyToPoint;\n      this.applyToX = applyToX;\n      this.applyToY = applyToY;\n      this.applyToZ = applyToZ;\n      this.applyToPointArray = applyToPointArray;\n      this.applyToTriplePoints = applyToTriplePoints;\n      this.applyToPointStringified = applyToPointStringified;\n      this.toCSS = toCSS;\n      this.to2dCSS = to2dCSS;\n      this.clone = clone;\n      this.cloneFromProps = cloneFromProps;\n      this.equals = equals;\n      this.inversePoints = inversePoints;\n      this.inversePoint = inversePoint;\n      this.getInverseMatrix = getInverseMatrix;\n      this._t = this.transform;\n      this.isIdentity = isIdentity;\n      this._identity = true;\n      this._identityCalculated = false;\n      this.props = createTypedArray('float32', 16);\n      this.reset();\n    };\n  }();\n\n  function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n  var lottie = {};\n  var standalone = '__[STANDALONE]__';\n  var animationData = '__[ANIMATIONDATA]__';\n  var renderer = '';\n\n  function setLocation(href) {\n    setLocationHref(href);\n  }\n\n  function searchAnimations() {\n    if (standalone === true) {\n      animationManager.searchAnimations(animationData, standalone, renderer);\n    } else {\n      animationManager.searchAnimations();\n    }\n  }\n\n  function setSubframeRendering(flag) {\n    setSubframeEnabled(flag);\n  }\n\n  function setPrefix(prefix) {\n    setIdPrefix(prefix);\n  }\n\n  function loadAnimation(params) {\n    if (standalone === true) {\n      params.animationData = JSON.parse(animationData);\n    }\n\n    return animationManager.loadAnimation(params);\n  }\n\n  function setQuality(value) {\n    if (typeof value === 'string') {\n      switch (value) {\n        case 'high':\n          setDefaultCurveSegments(200);\n          break;\n\n        default:\n        case 'medium':\n          setDefaultCurveSegments(50);\n          break;\n\n        case 'low':\n          setDefaultCurveSegments(10);\n          break;\n      }\n    } else if (!isNaN(value) && value > 1) {\n      setDefaultCurveSegments(value);\n    }\n\n    if (getDefaultCurveSegments() >= 50) {\n      roundValues(false);\n    } else {\n      roundValues(true);\n    }\n  }\n\n  function inBrowser() {\n    return typeof navigator !== 'undefined';\n  }\n\n  function installPlugin(type, plugin) {\n    if (type === 'expressions') {\n      setExpressionsPlugin(plugin);\n    }\n  }\n\n  function getFactory(name) {\n    switch (name) {\n      case 'propertyFactory':\n        return PropertyFactory;\n\n      case 'shapePropertyFactory':\n        return ShapePropertyFactory;\n\n      case 'matrix':\n        return Matrix;\n\n      default:\n        return null;\n    }\n  }\n\n  lottie.play = animationManager.play;\n  lottie.pause = animationManager.pause;\n  lottie.setLocationHref = setLocation;\n  lottie.togglePause = animationManager.togglePause;\n  lottie.setSpeed = animationManager.setSpeed;\n  lottie.setDirection = animationManager.setDirection;\n  lottie.stop = animationManager.stop;\n  lottie.searchAnimations = searchAnimations;\n  lottie.registerAnimation = animationManager.registerAnimation;\n  lottie.loadAnimation = loadAnimation;\n  lottie.setSubframeRendering = setSubframeRendering;\n  lottie.resize = animationManager.resize; // lottie.start = start;\n\n  lottie.goToAndStop = animationManager.goToAndStop;\n  lottie.destroy = animationManager.destroy;\n  lottie.setQuality = setQuality;\n  lottie.inBrowser = inBrowser;\n  lottie.installPlugin = installPlugin;\n  lottie.freeze = animationManager.freeze;\n  lottie.unfreeze = animationManager.unfreeze;\n  lottie.setVolume = animationManager.setVolume;\n  lottie.mute = animationManager.mute;\n  lottie.unmute = animationManager.unmute;\n  lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n  lottie.useWebWorker = setWebWorker;\n  lottie.setIDPrefix = setPrefix;\n  lottie.__getFactory = getFactory;\n  lottie.version = '5.12.2';\n\n  function checkReady() {\n    if (document.readyState === 'complete') {\n      clearInterval(readyStateCheckInterval);\n      searchAnimations();\n    }\n  }\n\n  function getQueryVariable(variable) {\n    var vars = queryString.split('&');\n\n    for (var i = 0; i < vars.length; i += 1) {\n      var pair = vars[i].split('=');\n\n      if (decodeURIComponent(pair[0]) == variable) {\n        // eslint-disable-line eqeqeq\n        return decodeURIComponent(pair[1]);\n      }\n    }\n\n    return null;\n  }\n\n  var queryString = '';\n\n  if (standalone) {\n    var scripts = document.getElementsByTagName('script');\n    var index = scripts.length - 1;\n    var myScript = scripts[index] || {\n      src: ''\n    };\n    queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n    renderer = getQueryVariable('renderer');\n  }\n\n  var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n  try {\n    if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n    ) {\n      window.bodymovin = lottie;\n    }\n  } catch (err) {//\n  }\n\n  var ShapeModifiers = function () {\n    var ob = {};\n    var modifiers = {};\n    ob.registerModifier = registerModifier;\n    ob.getModifier = getModifier;\n\n    function registerModifier(nm, factory) {\n      if (!modifiers[nm]) {\n        modifiers[nm] = factory;\n      }\n    }\n\n    function getModifier(nm, elem, data) {\n      return new modifiers[nm](elem, data);\n    }\n\n    return ob;\n  }();\n\n  function ShapeModifier() {}\n\n  ShapeModifier.prototype.initModifierProperties = function () {};\n\n  ShapeModifier.prototype.addShapeToModifier = function () {};\n\n  ShapeModifier.prototype.addShape = function (data) {\n    if (!this.closed) {\n      // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n      data.sh.container.addDynamicProperty(data.sh);\n      var shapeData = {\n        shape: data.sh,\n        data: data,\n        localShapeCollection: shapeCollectionPool.newShapeCollection()\n      };\n      this.shapes.push(shapeData);\n      this.addShapeToModifier(shapeData);\n\n      if (this._isAnimated) {\n        data.setAsAnimated();\n      }\n    }\n  };\n\n  ShapeModifier.prototype.init = function (elem, data) {\n    this.shapes = [];\n    this.elem = elem;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, data);\n    this.frameId = initialDefaultFrame;\n    this.closed = false;\n    this.k = false;\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  ShapeModifier.prototype.processKeys = function () {\n    if (this.elem.globalData.frameId === this.frameId) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n  function TrimModifier() {}\n\n  extendPrototype([ShapeModifier], TrimModifier);\n\n  TrimModifier.prototype.initModifierProperties = function (elem, data) {\n    this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n    this.sValue = 0;\n    this.eValue = 0;\n    this.getValue = this.processKeys;\n    this.m = data.m;\n    this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n  };\n\n  TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n    shapeData.pathsData = [];\n  };\n\n  TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n    var segments = [];\n\n    if (e <= 1) {\n      segments.push({\n        s: s,\n        e: e\n      });\n    } else if (s >= 1) {\n      segments.push({\n        s: s - 1,\n        e: e - 1\n      });\n    } else {\n      segments.push({\n        s: s,\n        e: 1\n      });\n      segments.push({\n        s: 0,\n        e: e - 1\n      });\n    }\n\n    var shapeSegments = [];\n    var i;\n    var len = segments.length;\n    var segmentOb;\n\n    for (i = 0; i < len; i += 1) {\n      segmentOb = segments[i];\n\n      if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n        var shapeS;\n        var shapeE;\n\n        if (segmentOb.s * totalModifierLength <= addedLength) {\n          shapeS = 0;\n        } else {\n          shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n          shapeE = 1;\n        } else {\n          shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        shapeSegments.push([shapeS, shapeE]);\n      }\n    }\n\n    if (!shapeSegments.length) {\n      shapeSegments.push([0, 0]);\n    }\n\n    return shapeSegments;\n  };\n\n  TrimModifier.prototype.releasePathsData = function (pathsData) {\n    var i;\n    var len = pathsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      segmentsLengthPool.release(pathsData[i]);\n    }\n\n    pathsData.length = 0;\n    return pathsData;\n  };\n\n  TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n    var s;\n    var e;\n\n    if (this._mdf || _isFirstFrame) {\n      var o = this.o.v % 360 / 360;\n\n      if (o < 0) {\n        o += 1;\n      }\n\n      if (this.s.v > 1) {\n        s = 1 + o;\n      } else if (this.s.v < 0) {\n        s = 0 + o;\n      } else {\n        s = this.s.v + o;\n      }\n\n      if (this.e.v > 1) {\n        e = 1 + o;\n      } else if (this.e.v < 0) {\n        e = 0 + o;\n      } else {\n        e = this.e.v + o;\n      }\n\n      if (s > e) {\n        var _s = s;\n        s = e;\n        e = _s;\n      }\n\n      s = Math.round(s * 10000) * 0.0001;\n      e = Math.round(e * 10000) * 0.0001;\n      this.sValue = s;\n      this.eValue = e;\n    } else {\n      s = this.sValue;\n      e = this.eValue;\n    }\n\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var pathsData;\n    var pathData;\n    var totalShapeLength;\n    var totalModifierLength = 0;\n\n    if (e === s) {\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].localShapeCollection.releaseShapes();\n        this.shapes[i].shape._mdf = true;\n        this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n        if (this._mdf) {\n          this.shapes[i].pathsData.length = 0;\n        }\n      }\n    } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n      var segments = [];\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n        if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n          shapeData.shape.paths = shapeData.localShapeCollection;\n        } else {\n          shapePaths = shapeData.shape.paths;\n          jLen = shapePaths._length;\n          totalShapeLength = 0;\n\n          if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n            totalShapeLength = shapeData.totalShapeLength;\n          } else {\n            pathsData = this.releasePathsData(shapeData.pathsData);\n\n            for (j = 0; j < jLen; j += 1) {\n              pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n              pathsData.push(pathData);\n              totalShapeLength += pathData.totalLength;\n            }\n\n            shapeData.totalShapeLength = totalShapeLength;\n            shapeData.pathsData = pathsData;\n          }\n\n          totalModifierLength += totalShapeLength;\n          shapeData.shape._mdf = true;\n        }\n      }\n\n      var shapeS = s;\n      var shapeE = e;\n      var addedLength = 0;\n      var edges;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shapeData = this.shapes[i];\n\n        if (shapeData.shape._mdf) {\n          localShapeCollection = shapeData.localShapeCollection;\n          localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n          if (this.m === 2 && len > 1) {\n            edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n            addedLength += shapeData.totalShapeLength;\n          } else {\n            edges = [[shapeS, shapeE]];\n          }\n\n          jLen = edges.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            shapeS = edges[j][0];\n            shapeE = edges[j][1];\n            segments.length = 0;\n\n            if (shapeE <= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength * shapeE\n              });\n            } else if (shapeS >= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * (shapeS - 1),\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            } else {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength\n              });\n              segments.push({\n                s: 0,\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            }\n\n            var newShapesData = this.addShapes(shapeData, segments[0]);\n\n            if (segments[0].s !== segments[0].e) {\n              if (segments.length > 1) {\n                var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n                if (lastShapeInCollection.c) {\n                  var lastShape = newShapesData.pop();\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n                } else {\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1]);\n                }\n              }\n\n              this.addPaths(newShapesData, localShapeCollection);\n            }\n          }\n\n          shapeData.shape.paths = localShapeCollection;\n        }\n      }\n    } else if (this._mdf) {\n      for (i = 0; i < len; i += 1) {\n        // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n        // Don't remove this even if it's losing cached info.\n        this.shapes[i].pathsData.length = 0;\n        this.shapes[i].shape._mdf = true;\n      }\n    }\n  };\n\n  TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n    var i;\n    var len = newPaths.length;\n\n    for (i = 0; i < len; i += 1) {\n      localShapeCollection.addShape(newPaths[i]);\n    }\n  };\n\n  TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n    shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n    shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n    }\n\n    shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n    shapePath.setXYAt(points[1], points[5], 'o', pos);\n    shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(points[0], points[4], 'v', pos);\n    }\n\n    shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n    var pathsData = shapeData.pathsData;\n    var shapePaths = shapeData.shape.paths.shapes;\n    var i;\n    var len = shapeData.shape.paths._length;\n    var j;\n    var jLen;\n    var addedLength = 0;\n    var currentLengthData;\n    var segmentCount;\n    var lengths;\n    var segment;\n    var shapes = [];\n    var initPos;\n    var newShape = true;\n\n    if (!shapePath) {\n      shapePath = shapePool.newElement();\n      segmentCount = 0;\n      initPos = 0;\n    } else {\n      segmentCount = shapePath._length;\n      initPos = shapePath._length;\n    }\n\n    shapes.push(shapePath);\n\n    for (i = 0; i < len; i += 1) {\n      lengths = pathsData[i].lengths;\n      shapePath.c = shapePaths[i].c;\n      jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n      for (j = 1; j < jLen; j += 1) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n          addedLength += currentLengthData.addedLength;\n          shapePath.c = false;\n        } else if (addedLength > shapeSegment.e) {\n          shapePath.c = false;\n          break;\n        } else {\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n\n          addedLength += currentLengthData.addedLength;\n          segmentCount += 1;\n        }\n      }\n\n      if (shapePaths[i].c && lengths.length) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength <= shapeSegment.e) {\n          var segmentLength = lengths[j - 1].addedLength;\n\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n        } else {\n          shapePath.c = false;\n        }\n\n        addedLength += currentLengthData.addedLength;\n        segmentCount += 1;\n      }\n\n      if (shapePath._length) {\n        shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n        shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n      }\n\n      if (addedLength > shapeSegment.e) {\n        break;\n      }\n\n      if (i < len - 1) {\n        shapePath = shapePool.newElement();\n        newShape = true;\n        shapes.push(shapePath);\n        segmentCount = 0;\n      }\n    }\n\n    return shapes;\n  };\n\n  function PuckerAndBloatModifier() {}\n\n  extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n  PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this._isAnimated = !!this.amount.effectsSequence.length;\n  };\n\n  PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n    var percent = amount / 100;\n    var centerPoint = [0, 0];\n    var pathLength = path._length;\n    var i = 0;\n\n    for (i = 0; i < pathLength; i += 1) {\n      centerPoint[0] += path.v[i][0];\n      centerPoint[1] += path.v[i][1];\n    }\n\n    centerPoint[0] /= pathLength;\n    centerPoint[1] /= pathLength;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < pathLength; i += 1) {\n      vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n      vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n      oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n      oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n      iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n      iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n      clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n    }\n\n    return clonedPath;\n  };\n\n  PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  var TransformPropertyFactory = function () {\n    var defaultVector = [0, 0];\n\n    function applyToMatrix(mat) {\n      var _mdf = this._mdf;\n      this.iterateDynamicProperties();\n      this._mdf = this._mdf || _mdf;\n\n      if (this.a) {\n        mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n      }\n\n      if (this.s) {\n        mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n      }\n\n      if (this.sk) {\n        mat.skewFromAxis(-this.sk.v, this.sa.v);\n      }\n\n      if (this.r) {\n        mat.rotate(-this.r.v);\n      } else {\n        mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n      }\n\n      if (this.data.p.s) {\n        if (this.data.p.z) {\n          mat.translate(this.px.v, this.py.v, -this.pz.v);\n        } else {\n          mat.translate(this.px.v, this.py.v, 0);\n        }\n      } else {\n        mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n      }\n    }\n\n    function processKeys(forceRender) {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (this._isDirty) {\n        this.precalculateMatrix();\n        this._isDirty = false;\n      }\n\n      this.iterateDynamicProperties();\n\n      if (this._mdf || forceRender) {\n        var frameRate;\n        this.v.cloneFromProps(this.pre.props);\n\n        if (this.appliedTransformations < 1) {\n          this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        }\n\n        if (this.appliedTransformations < 2) {\n          this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        }\n\n        if (this.sk && this.appliedTransformations < 3) {\n          this.v.skewFromAxis(-this.sk.v, this.sa.v);\n        }\n\n        if (this.r && this.appliedTransformations < 4) {\n          this.v.rotate(-this.r.v);\n        } else if (!this.r && this.appliedTransformations < 4) {\n          this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        }\n\n        if (this.autoOriented) {\n          var v1;\n          var v2;\n          frameRate = this.elem.globalData.frameRate;\n\n          if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n            if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n              v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n              v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n            } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n              v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n              v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n            } else {\n              v1 = this.p.pv;\n              v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n            }\n          } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n            v1 = [];\n            v2 = [];\n            var px = this.px;\n            var py = this.py;\n\n            if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n              v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n              v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n              v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n              v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n            } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n              v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n              v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n              v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n              v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n            } else {\n              v1 = [px.pv, py.pv];\n              v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n              v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n            }\n          } else {\n            v2 = defaultVector;\n            v1 = v2;\n          }\n\n          this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n        }\n\n        if (this.data.p && this.data.p.s) {\n          if (this.data.p.z) {\n            this.v.translate(this.px.v, this.py.v, -this.pz.v);\n          } else {\n            this.v.translate(this.px.v, this.py.v, 0);\n          }\n        } else {\n          this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n        }\n      }\n\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function precalculateMatrix() {\n      this.appliedTransformations = 0;\n      this.pre.reset();\n\n      if (!this.a.effectsSequence.length) {\n        this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        this.appliedTransformations = 1;\n      } else {\n        return;\n      }\n\n      if (!this.s.effectsSequence.length) {\n        this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        this.appliedTransformations = 2;\n      } else {\n        return;\n      }\n\n      if (this.sk) {\n        if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n          this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n          this.appliedTransformations = 3;\n        } else {\n          return;\n        }\n      }\n\n      if (this.r) {\n        if (!this.r.effectsSequence.length) {\n          this.pre.rotate(-this.r.v);\n          this.appliedTransformations = 4;\n        }\n      } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n        this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        this.appliedTransformations = 4;\n      }\n    }\n\n    function autoOrient() {//\n      // var prevP = this.getValueAtTime();\n    }\n\n    function addDynamicProperty(prop) {\n      this._addDynamicProperty(prop);\n\n      this.elem.addDynamicProperty(prop);\n      this._isDirty = true;\n    }\n\n    function TransformProperty(elem, data, container) {\n      this.elem = elem;\n      this.frameId = -1;\n      this.propType = 'transform';\n      this.data = data;\n      this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n      this.pre = new Matrix();\n      this.appliedTransformations = 0;\n      this.initDynamicPropertyContainer(container || elem);\n\n      if (data.p && data.p.s) {\n        this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n        this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n        if (data.p.z) {\n          this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n        }\n      } else {\n        this.p = PropertyFactory.getProp(elem, data.p || {\n          k: [0, 0, 0]\n        }, 1, 0, this);\n      }\n\n      if (data.rx) {\n        this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n        this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n        this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n        if (data.or.k[0].ti) {\n          var i;\n          var len = data.or.k.length;\n\n          for (i = 0; i < len; i += 1) {\n            data.or.k[i].to = null;\n            data.or.k[i].ti = null;\n          }\n        }\n\n        this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n        this.or.sh = true;\n      } else {\n        this.r = PropertyFactory.getProp(elem, data.r || {\n          k: 0\n        }, 0, degToRads, this);\n      }\n\n      if (data.sk) {\n        this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n        this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n      }\n\n      this.a = PropertyFactory.getProp(elem, data.a || {\n        k: [0, 0, 0]\n      }, 1, 0, this);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: [100, 100, 100]\n      }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n      if (data.o) {\n        this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n      } else {\n        this.o = {\n          _mdf: false,\n          v: 1\n        };\n      }\n\n      this._isDirty = true;\n\n      if (!this.dynamicProperties.length) {\n        this.getValue(true);\n      }\n    }\n\n    TransformProperty.prototype = {\n      applyToMatrix: applyToMatrix,\n      getValue: processKeys,\n      precalculateMatrix: precalculateMatrix,\n      autoOrient: autoOrient\n    };\n    extendPrototype([DynamicPropertyContainer], TransformProperty);\n    TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n    TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n    function getTransformProperty(elem, data, container) {\n      return new TransformProperty(elem, data, container);\n    }\n\n    return {\n      getTransformProperty: getTransformProperty\n    };\n  }();\n\n  function RepeaterModifier() {}\n\n  extendPrototype([ShapeModifier], RepeaterModifier);\n\n  RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n    this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n    this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n    this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n    this.data = data;\n\n    if (!this.dynamicProperties.length) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = !!this.dynamicProperties.length;\n    this.pMatrix = new Matrix();\n    this.rMatrix = new Matrix();\n    this.sMatrix = new Matrix();\n    this.tMatrix = new Matrix();\n    this.matrix = new Matrix();\n  };\n\n  RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n    var dir = inv ? -1 : 1;\n    var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n    var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n    pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n    rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    rMatrix.rotate(-transform.r.v * dir * perc);\n    rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n    sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n    sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n  };\n\n  RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n    this.elem = elem;\n    this.arr = arr;\n    this.pos = pos;\n    this.elemsData = elemsData;\n    this._currentCopies = 0;\n    this._elements = [];\n    this._groups = [];\n    this.frameId = -1;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, arr[pos]);\n\n    while (pos > 0) {\n      pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n      this._elements.unshift(arr[pos]);\n    }\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  RepeaterModifier.prototype.resetElements = function (elements) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._processed = false;\n\n      if (elements[i].ty === 'gr') {\n        this.resetElements(elements[i].it);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.cloneElements = function (elements) {\n    var newElements = JSON.parse(JSON.stringify(elements));\n    this.resetElements(newElements);\n    return newElements;\n  };\n\n  RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._render = renderFlag;\n\n      if (elements[i].ty === 'gr') {\n        this.changeGroupRender(elements[i].it, renderFlag);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n    var items;\n    var itemsTransform;\n    var i;\n    var dir;\n    var cont;\n    var hasReloaded = false;\n\n    if (this._mdf || _isFirstFrame) {\n      var copies = Math.ceil(this.c.v);\n\n      if (this._groups.length < copies) {\n        while (this._groups.length < copies) {\n          var group = {\n            it: this.cloneElements(this._elements),\n            ty: 'gr'\n          };\n          group.it.push({\n            a: {\n              a: 0,\n              ix: 1,\n              k: [0, 0]\n            },\n            nm: 'Transform',\n            o: {\n              a: 0,\n              ix: 7,\n              k: 100\n            },\n            p: {\n              a: 0,\n              ix: 2,\n              k: [0, 0]\n            },\n            r: {\n              a: 1,\n              ix: 6,\n              k: [{\n                s: 0,\n                e: 0,\n                t: 0\n              }, {\n                s: 0,\n                e: 0,\n                t: 1\n              }]\n            },\n            s: {\n              a: 0,\n              ix: 3,\n              k: [100, 100]\n            },\n            sa: {\n              a: 0,\n              ix: 5,\n              k: 0\n            },\n            sk: {\n              a: 0,\n              ix: 4,\n              k: 0\n            },\n            ty: 'tr'\n          });\n          this.arr.splice(0, 0, group);\n\n          this._groups.splice(0, 0, group);\n\n          this._currentCopies += 1;\n        }\n\n        this.elem.reloadShapes();\n        hasReloaded = true;\n      }\n\n      cont = 0;\n      var renderFlag;\n\n      for (i = 0; i <= this._groups.length - 1; i += 1) {\n        renderFlag = cont < copies;\n        this._groups[i]._render = renderFlag;\n        this.changeGroupRender(this._groups[i].it, renderFlag);\n\n        if (!renderFlag) {\n          var elems = this.elemsData[i].it;\n          var transformData = elems[elems.length - 1];\n\n          if (transformData.transform.op.v !== 0) {\n            transformData.transform.op._mdf = true;\n            transformData.transform.op.v = 0;\n          } else {\n            transformData.transform.op._mdf = false;\n          }\n        }\n\n        cont += 1;\n      }\n\n      this._currentCopies = copies; /// /\n\n      var offset = this.o.v;\n      var offsetModulo = offset % 1;\n      var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n      var pProps = this.pMatrix.props;\n      var rProps = this.rMatrix.props;\n      var sProps = this.sMatrix.props;\n      this.pMatrix.reset();\n      this.rMatrix.reset();\n      this.sMatrix.reset();\n      this.tMatrix.reset();\n      this.matrix.reset();\n      var iteration = 0;\n\n      if (offset > 0) {\n        while (iteration < roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          iteration += 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n          iteration += offsetModulo;\n        }\n      } else if (offset < 0) {\n        while (iteration > roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n          iteration -= 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n          iteration -= offsetModulo;\n        }\n      }\n\n      i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n      dir = this.data.m === 1 ? 1 : -1;\n      cont = this._currentCopies;\n      var j;\n      var jLen;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        jLen = itemsTransform.length;\n        items[items.length - 1].transform.mProps._mdf = true;\n        items[items.length - 1].transform.op._mdf = true;\n        items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n        if (iteration !== 0) {\n          if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n            this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          }\n\n          this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n          this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n          this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n\n          this.matrix.reset();\n        } else {\n          this.matrix.reset();\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n        }\n\n        iteration += 1;\n        cont -= 1;\n        i += dir;\n      }\n    } else {\n      cont = this._currentCopies;\n      i = 0;\n      dir = 1;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        items[items.length - 1].transform.mProps._mdf = false;\n        items[items.length - 1].transform.op._mdf = false;\n        cont -= 1;\n        i += dir;\n      }\n    }\n\n    return hasReloaded;\n  };\n\n  RepeaterModifier.prototype.addShape = function () {};\n\n  function RoundCornersModifier() {}\n\n  extendPrototype([ShapeModifier], RoundCornersModifier);\n\n  RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this._isAnimated = !!this.rd.effectsSequence.length;\n  };\n\n  RoundCornersModifier.prototype.processPath = function (path, round) {\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var i;\n    var len = path._length;\n    var currentV;\n    var currentI;\n    var currentO;\n    var closerV;\n    var distance;\n    var newPosPerc;\n    var index = 0;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < len; i += 1) {\n      currentV = path.v[i];\n      currentO = path.o[i];\n      currentI = path.i[i];\n\n      if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n        if ((i === 0 || i === len - 1) && !path.c) {\n          clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n          /* clonedPath.v[index] = currentV;\r\n                  clonedPath.o[index] = currentO;\r\n                  clonedPath.i[index] = currentI; */\n\n          index += 1;\n        } else {\n          if (i === 0) {\n            closerV = path.v[len - 1];\n          } else {\n            closerV = path.v[i - 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = iX;\n          iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n          vY = iY;\n          oX = vX - (vX - currentV[0]) * roundCorner;\n          oY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n\n          if (i === len - 1) {\n            closerV = path.v[0];\n          } else {\n            closerV = path.v[i + 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = oX;\n          oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n          vY = oY;\n          iX = vX - (vX - currentV[0]) * roundCorner;\n          iY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n        }\n      } else {\n        clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n        index += 1;\n      }\n    }\n\n    return clonedPath;\n  };\n\n  RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var rd = this.rd.v;\n\n    if (rd !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function floatEqual(a, b) {\n    return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n  }\n\n  function floatZero(f) {\n    return Math.abs(f) <= 0.00001;\n  }\n\n  function lerp(p0, p1, amount) {\n    return p0 * (1 - amount) + p1 * amount;\n  }\n\n  function lerpPoint(p0, p1, amount) {\n    return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n  }\n\n  function quadRoots(a, b, c) {\n    // no root\n    if (a === 0) return [];\n    var s = b * b - 4 * a * c; // Complex roots\n\n    if (s < 0) return [];\n    var singleRoot = -b / (2 * a); // 1 root\n\n    if (s === 0) return [singleRoot];\n    var delta = Math.sqrt(s) / (2 * a); // 2 roots\n\n    return [singleRoot - delta, singleRoot + delta];\n  }\n\n  function polynomialCoefficients(p0, p1, p2, p3) {\n    return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n  }\n\n  function singlePoint(p) {\n    return new PolynomialBezier(p, p, p, p, false);\n  }\n\n  function PolynomialBezier(p0, p1, p2, p3, linearize) {\n    if (linearize && pointEqual(p0, p1)) {\n      p1 = lerpPoint(p0, p3, 1 / 3);\n    }\n\n    if (linearize && pointEqual(p2, p3)) {\n      p2 = lerpPoint(p0, p3, 2 / 3);\n    }\n\n    var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n    var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n    this.a = [coeffx[0], coeffy[0]];\n    this.b = [coeffx[1], coeffy[1]];\n    this.c = [coeffx[2], coeffy[2]];\n    this.d = [coeffx[3], coeffy[3]];\n    this.points = [p0, p1, p2, p3];\n  }\n\n  PolynomialBezier.prototype.point = function (t) {\n    return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n  };\n\n  PolynomialBezier.prototype.derivative = function (t) {\n    return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n  };\n\n  PolynomialBezier.prototype.tangentAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[1], p[0]);\n  };\n\n  PolynomialBezier.prototype.normalAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[0], p[1]);\n  };\n\n  PolynomialBezier.prototype.inflectionPoints = function () {\n    var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n    if (floatZero(denom)) return [];\n    var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n    var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n    if (square < 0) return [];\n    var root = Math.sqrt(square);\n\n    if (floatZero(root)) {\n      if (root > 0 && root < 1) return [tcusp];\n      return [];\n    }\n\n    return [tcusp - root, tcusp + root].filter(function (r) {\n      return r > 0 && r < 1;\n    });\n  };\n\n  PolynomialBezier.prototype.split = function (t) {\n    if (t <= 0) return [singlePoint(this.points[0]), this];\n    if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n    var p10 = lerpPoint(this.points[0], this.points[1], t);\n    var p11 = lerpPoint(this.points[1], this.points[2], t);\n    var p12 = lerpPoint(this.points[2], this.points[3], t);\n    var p20 = lerpPoint(p10, p11, t);\n    var p21 = lerpPoint(p11, p12, t);\n    var p3 = lerpPoint(p20, p21, t);\n    return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n  };\n\n  function extrema(bez, comp) {\n    var min = bez.points[0][comp];\n    var max = bez.points[bez.points.length - 1][comp];\n\n    if (min > max) {\n      var e = max;\n      max = min;\n      min = e;\n    } // Derivative roots to find min/max\n\n\n    var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n\n    for (var i = 0; i < f.length; i += 1) {\n      if (f[i] > 0 && f[i] < 1) {\n        var val = bez.point(f[i])[comp];\n        if (val < min) min = val;else if (val > max) max = val;\n      }\n    }\n\n    return {\n      min: min,\n      max: max\n    };\n  }\n\n  PolynomialBezier.prototype.bounds = function () {\n    return {\n      x: extrema(this, 0),\n      y: extrema(this, 1)\n    };\n  };\n\n  PolynomialBezier.prototype.boundingBox = function () {\n    var bounds = this.bounds();\n    return {\n      left: bounds.x.min,\n      right: bounds.x.max,\n      top: bounds.y.min,\n      bottom: bounds.y.max,\n      width: bounds.x.max - bounds.x.min,\n      height: bounds.y.max - bounds.y.min,\n      cx: (bounds.x.max + bounds.x.min) / 2,\n      cy: (bounds.y.max + bounds.y.min) / 2\n    };\n  };\n\n  function intersectData(bez, t1, t2) {\n    var box = bez.boundingBox();\n    return {\n      cx: box.cx,\n      cy: box.cy,\n      width: box.width,\n      height: box.height,\n      bez: bez,\n      t: (t1 + t2) / 2,\n      t1: t1,\n      t2: t2\n    };\n  }\n\n  function splitData(data) {\n    var split = data.bez.split(0.5);\n    return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n  }\n\n  function boxIntersect(b1, b2) {\n    return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n  }\n\n  function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n    if (!boxIntersect(d1, d2)) return;\n\n    if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n      intersections.push([d1.t, d2.t]);\n      return;\n    }\n\n    var d1s = splitData(d1);\n    var d2s = splitData(d2);\n    intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n  }\n\n  PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n    if (tolerance === undefined) tolerance = 2;\n    if (maxRecursion === undefined) maxRecursion = 7;\n    var intersections = [];\n    intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n    return intersections;\n  };\n\n  PolynomialBezier.shapeSegment = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n  };\n\n  PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n  };\n\n  function crossProduct(a, b) {\n    return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n  }\n\n  function lineIntersection(start1, end1, start2, end2) {\n    var v1 = [start1[0], start1[1], 1];\n    var v2 = [end1[0], end1[1], 1];\n    var v3 = [start2[0], start2[1], 1];\n    var v4 = [end2[0], end2[1], 1];\n    var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n    if (floatZero(r[2])) return null;\n    return [r[0] / r[2], r[1] / r[2]];\n  }\n\n  function polarOffset(p, angle, length) {\n    return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n  }\n\n  function pointDistance(p1, p2) {\n    return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n  }\n\n  function pointEqual(p1, p2) {\n    return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n  }\n\n  function ZigZagModifier() {}\n\n  extendPrototype([ShapeModifier], ZigZagModifier);\n\n  ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n    this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n    this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n  };\n\n  function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n    var angO = angle - Math.PI / 2;\n    var angI = angle + Math.PI / 2;\n    var px = point[0] + Math.cos(angle) * direction * amplitude;\n    var py = point[1] - Math.sin(angle) * direction * amplitude;\n    outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n  }\n\n  function getPerpendicularVector(pt1, pt2) {\n    var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n    var rot = -Math.PI * 0.5;\n    var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n    return rotatedVector;\n  }\n\n  function getProjectingAngle(path, cur) {\n    var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n    var nextIndex = (cur + 1) % path.length();\n    var prevPoint = path.v[prevIndex];\n    var nextPoint = path.v[nextIndex];\n    var pVector = getPerpendicularVector(prevPoint, nextPoint);\n    return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n  }\n\n  function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n    var angle = getProjectingAngle(path, cur);\n    var point = path.v[cur % path._length];\n    var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n    var nextPoint = path.v[(cur + 1) % path._length];\n    var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n    var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n    setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n  }\n\n  function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n    for (var i = 0; i < frequency; i += 1) {\n      var t = (i + 1) / (frequency + 1);\n      var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n      var angle = segment.normalAngle(t);\n      var point = segment.point(t);\n      setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n      direction = -direction;\n    }\n\n    return direction;\n  }\n\n  ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n    var count = path._length;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n\n    if (!path.c) {\n      count -= 1;\n    }\n\n    if (count === 0) return clonedPath;\n    var direction = -1;\n    var segment = PolynomialBezier.shapeSegment(path, 0);\n    zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n\n    for (var i = 0; i < count; i += 1) {\n      direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n\n      if (i === count - 1 && !path.c) {\n        segment = null;\n      } else {\n        segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n      }\n\n      zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n    }\n\n    return clonedPath;\n  };\n\n  ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amplitude = this.amplitude.v;\n    var frequency = Math.max(0, Math.round(this.frequency.v));\n    var pointType = this.pointsType.v;\n\n    if (amplitude !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function linearOffset(p1, p2, amount) {\n    var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n    return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n  }\n\n  function offsetSegment(segment, amount) {\n    var p0;\n    var p1a;\n    var p1b;\n    var p2b;\n    var p2a;\n    var p3;\n    var e;\n    e = linearOffset(segment.points[0], segment.points[1], amount);\n    p0 = e[0];\n    p1a = e[1];\n    e = linearOffset(segment.points[1], segment.points[2], amount);\n    p1b = e[0];\n    p2b = e[1];\n    e = linearOffset(segment.points[2], segment.points[3], amount);\n    p2a = e[0];\n    p3 = e[1];\n    var p1 = lineIntersection(p0, p1a, p1b, p2b);\n    if (p1 === null) p1 = p1a;\n    var p2 = lineIntersection(p2a, p3, p1b, p2b);\n    if (p2 === null) p2 = p2a;\n    return new PolynomialBezier(p0, p1, p2, p3);\n  }\n\n  function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n    var p0 = seg1.points[3];\n    var p1 = seg2.points[0]; // Bevel\n\n    if (lineJoin === 3) return p0; // Connected, they don't need a joint\n\n    if (pointEqual(p0, p1)) return p0; // Round\n\n    if (lineJoin === 2) {\n      var angleOut = -seg1.tangentAngle(1);\n      var angleIn = -seg2.tangentAngle(0) + Math.PI;\n      var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n      var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n      var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n      outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n      tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n      outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n      return p1;\n    } // Miter\n\n\n    var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n    var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n    var intersection = lineIntersection(t0, p0, p1, t1);\n\n    if (intersection && pointDistance(intersection, p0) < miterLimit) {\n      outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n      return intersection;\n    }\n\n    return p0;\n  }\n\n  function getIntersection(a, b) {\n    var intersect = a.intersections(b);\n    if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n    if (intersect.length) return intersect[0];\n    return null;\n  }\n\n  function pruneSegmentIntersection(a, b) {\n    var outa = a.slice();\n    var outb = b.slice();\n    var intersect = getIntersection(a[a.length - 1], b[0]);\n\n    if (intersect) {\n      outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n      outb[0] = b[0].split(intersect[1])[1];\n    }\n\n    if (a.length > 1 && b.length > 1) {\n      intersect = getIntersection(a[0], b[b.length - 1]);\n\n      if (intersect) {\n        return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n      }\n    }\n\n    return [outa, outb];\n  }\n\n  function pruneIntersections(segments) {\n    var e;\n\n    for (var i = 1; i < segments.length; i += 1) {\n      e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n      segments[i - 1] = e[0];\n      segments[i] = e[1];\n    }\n\n    if (segments.length > 1) {\n      e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n      segments[segments.length - 1] = e[0];\n      segments[0] = e[1];\n    }\n\n    return segments;\n  }\n\n  function offsetSegmentSplit(segment, amount) {\n    /*\r\n      We split each bezier segment into smaller pieces based\r\n      on inflection points, this ensures the control point\r\n      polygon is convex.\r\n        (A cubic bezier can have none, one, or two inflection points)\r\n    */\n    var flex = segment.inflectionPoints();\n    var left;\n    var right;\n    var split;\n    var mid;\n\n    if (flex.length === 0) {\n      return [offsetSegment(segment, amount)];\n    }\n\n    if (flex.length === 1 || floatEqual(flex[1], 1)) {\n      split = segment.split(flex[0]);\n      left = split[0];\n      right = split[1];\n      return [offsetSegment(left, amount), offsetSegment(right, amount)];\n    }\n\n    split = segment.split(flex[0]);\n    left = split[0];\n    var t = (flex[1] - flex[0]) / (1 - flex[0]);\n    split = split[1].split(t);\n    mid = split[0];\n    right = split[1];\n    return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n  }\n\n  function OffsetPathModifier() {}\n\n  extendPrototype([ShapeModifier], OffsetPathModifier);\n\n  OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n    this.lineJoin = data.lj;\n    this._isAnimated = this.amount.effectsSequence.length !== 0;\n  };\n\n  OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n    var outputBezier = shapePool.newElement();\n    outputBezier.c = inputBezier.c;\n    var count = inputBezier.length();\n\n    if (!inputBezier.c) {\n      count -= 1;\n    }\n\n    var i;\n    var j;\n    var segment;\n    var multiSegments = [];\n\n    for (i = 0; i < count; i += 1) {\n      segment = PolynomialBezier.shapeSegment(inputBezier, i);\n      multiSegments.push(offsetSegmentSplit(segment, amount));\n    }\n\n    if (!inputBezier.c) {\n      for (i = count - 1; i >= 0; i -= 1) {\n        segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n        multiSegments.push(offsetSegmentSplit(segment, amount));\n      }\n    }\n\n    multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints\n\n    var lastPoint = null;\n    var lastSeg = null;\n\n    for (i = 0; i < multiSegments.length; i += 1) {\n      var multiSegment = multiSegments[i];\n      if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n      lastSeg = multiSegment[multiSegment.length - 1];\n\n      for (j = 0; j < multiSegment.length; j += 1) {\n        segment = multiSegment[j];\n\n        if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n          outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n        } else {\n          outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n        }\n\n        outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n        lastPoint = segment.points[3];\n      }\n    }\n\n    if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n    return outputBezier;\n  };\n\n  OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n    var miterLimit = this.miterLimit.v;\n    var lineJoin = this.lineJoin;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function getFontProperties(fontData) {\n    var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n    var fWeight = 'normal';\n    var fStyle = 'normal';\n    var len = styles.length;\n    var styleName;\n\n    for (var i = 0; i < len; i += 1) {\n      styleName = styles[i].toLowerCase();\n\n      switch (styleName) {\n        case 'italic':\n          fStyle = 'italic';\n          break;\n\n        case 'bold':\n          fWeight = '700';\n          break;\n\n        case 'black':\n          fWeight = '900';\n          break;\n\n        case 'medium':\n          fWeight = '500';\n          break;\n\n        case 'regular':\n        case 'normal':\n          fWeight = '400';\n          break;\n\n        case 'light':\n        case 'thin':\n          fWeight = '200';\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    return {\n      style: fStyle,\n      weight: fontData.fWeight || fWeight\n    };\n  }\n\n  var FontManager = function () {\n    var maxWaitingTime = 5000;\n    var emptyChar = {\n      w: 0,\n      size: 0,\n      shapes: [],\n      data: {\n        shapes: []\n      }\n    };\n    var combinedCharacters = []; // Hindi characters\n\n    combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n    var BLACK_FLAG_CODE_POINT = 127988;\n    var CANCEL_TAG_CODE_POINT = 917631;\n    var A_TAG_CODE_POINT = 917601;\n    var Z_TAG_CODE_POINT = 917626;\n    var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n    var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n    var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n    var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n    var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n\n    function trimFontOptions(font) {\n      var familyArray = font.split(',');\n      var i;\n      var len = familyArray.length;\n      var enabledFamilies = [];\n\n      for (i = 0; i < len; i += 1) {\n        if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n          enabledFamilies.push(familyArray[i]);\n        }\n      }\n\n      return enabledFamilies.join(',');\n    }\n\n    function setUpNode(font, family) {\n      var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n      parentNode.setAttribute('aria-hidden', true);\n      parentNode.style.fontFamily = family;\n      var node = createTag('span'); // Characters that vary significantly among different fonts\n\n      node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n      parentNode.style.position = 'absolute';\n      parentNode.style.left = '-10000px';\n      parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n      parentNode.style.fontSize = '300px'; // Reset any font properties\n\n      parentNode.style.fontVariant = 'normal';\n      parentNode.style.fontStyle = 'normal';\n      parentNode.style.fontWeight = 'normal';\n      parentNode.style.letterSpacing = '0';\n      parentNode.appendChild(node);\n      document.body.appendChild(parentNode); // Remember width with no applied web font\n\n      var width = node.offsetWidth;\n      node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n      return {\n        node: node,\n        w: width,\n        parent: parentNode\n      };\n    }\n\n    function checkLoadedFonts() {\n      var i;\n      var len = this.fonts.length;\n      var node;\n      var w;\n      var loadedCount = len;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.fonts[i].loaded) {\n          loadedCount -= 1;\n        } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n          this.fonts[i].loaded = true;\n        } else {\n          node = this.fonts[i].monoCase.node;\n          w = this.fonts[i].monoCase.w;\n\n          if (node.offsetWidth !== w) {\n            loadedCount -= 1;\n            this.fonts[i].loaded = true;\n          } else {\n            node = this.fonts[i].sansCase.node;\n            w = this.fonts[i].sansCase.w;\n\n            if (node.offsetWidth !== w) {\n              loadedCount -= 1;\n              this.fonts[i].loaded = true;\n            }\n          }\n\n          if (this.fonts[i].loaded) {\n            this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n            this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n          }\n        }\n      }\n\n      if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n        setTimeout(this.checkLoadedFontsBinded, 20);\n      } else {\n        setTimeout(this.setIsLoadedBinded, 10);\n      }\n    }\n\n    function createHelper(fontData, def) {\n      var engine = document.body && def ? 'svg' : 'canvas';\n      var helper;\n      var fontProps = getFontProperties(fontData);\n\n      if (engine === 'svg') {\n        var tHelper = createNS('text');\n        tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n        tHelper.setAttribute('font-family', fontData.fFamily);\n        tHelper.setAttribute('font-style', fontProps.style);\n        tHelper.setAttribute('font-weight', fontProps.weight);\n        tHelper.textContent = '1';\n\n        if (fontData.fClass) {\n          tHelper.style.fontFamily = 'inherit';\n          tHelper.setAttribute('class', fontData.fClass);\n        } else {\n          tHelper.style.fontFamily = fontData.fFamily;\n        }\n\n        def.appendChild(tHelper);\n        helper = tHelper;\n      } else {\n        var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n        tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n        helper = tCanvasHelper;\n      }\n\n      function measure(text) {\n        if (engine === 'svg') {\n          helper.textContent = text;\n          return helper.getComputedTextLength();\n        }\n\n        return helper.measureText(text).width;\n      }\n\n      return {\n        measureText: measure\n      };\n    }\n\n    function addFonts(fontData, defs) {\n      if (!fontData) {\n        this.isLoaded = true;\n        return;\n      }\n\n      if (this.chars) {\n        this.isLoaded = true;\n        this.fonts = fontData.list;\n        return;\n      }\n\n      if (!document.body) {\n        this.isLoaded = true;\n        fontData.list.forEach(function (data) {\n          data.helper = createHelper(data);\n          data.cache = {};\n        });\n        this.fonts = fontData.list;\n        return;\n      }\n\n      var fontArr = fontData.list;\n      var i;\n      var len = fontArr.length;\n      var _pendingFonts = len;\n\n      for (i = 0; i < len; i += 1) {\n        var shouldLoadFont = true;\n        var loadedSelector;\n        var j;\n        fontArr[i].loaded = false;\n        fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n        fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n        if (!fontArr[i].fPath) {\n          fontArr[i].loaded = true;\n          _pendingFonts -= 1;\n        } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n          loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n          if (loadedSelector.length > 0) {\n            shouldLoadFont = false;\n          }\n\n          if (shouldLoadFont) {\n            var s = createTag('style');\n            s.setAttribute('f-forigin', fontArr[i].fOrigin);\n            s.setAttribute('f-origin', fontArr[i].origin);\n            s.setAttribute('f-family', fontArr[i].fFamily);\n            s.type = 'text/css';\n            s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n            defs.appendChild(s);\n          }\n        } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n          loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var l = createTag('link');\n            l.setAttribute('f-forigin', fontArr[i].fOrigin);\n            l.setAttribute('f-origin', fontArr[i].origin);\n            l.type = 'text/css';\n            l.rel = 'stylesheet';\n            l.href = fontArr[i].fPath;\n            document.body.appendChild(l);\n          }\n        } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n          loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (fontArr[i].fPath === loadedSelector[j].src) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var sc = createTag('link');\n            sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n            sc.setAttribute('f-origin', fontArr[i].origin);\n            sc.setAttribute('rel', 'stylesheet');\n            sc.setAttribute('href', fontArr[i].fPath);\n            defs.appendChild(sc);\n          }\n        }\n\n        fontArr[i].helper = createHelper(fontArr[i], defs);\n        fontArr[i].cache = {};\n        this.fonts.push(fontArr[i]);\n      }\n\n      if (_pendingFonts === 0) {\n        this.isLoaded = true;\n      } else {\n        // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n        // Adding this timeout seems to fix it\n        setTimeout(this.checkLoadedFonts.bind(this), 100);\n      }\n    }\n\n    function addChars(chars) {\n      if (!chars) {\n        return;\n      }\n\n      if (!this.chars) {\n        this.chars = [];\n      }\n\n      var i;\n      var len = chars.length;\n      var j;\n      var jLen = this.chars.length;\n      var found;\n\n      for (i = 0; i < len; i += 1) {\n        j = 0;\n        found = false;\n\n        while (j < jLen) {\n          if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n            found = true;\n          }\n\n          j += 1;\n        }\n\n        if (!found) {\n          this.chars.push(chars[i]);\n          jLen += 1;\n        }\n      }\n    }\n\n    function getCharData(_char, style, font) {\n      var i = 0;\n      var len = this.chars.length;\n\n      while (i < len) {\n        if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n          return this.chars[i];\n        }\n\n        i += 1;\n      }\n\n      if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n      && !this._warned) {\n        this._warned = true;\n        console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n      }\n\n      return emptyChar;\n    }\n\n    function measureText(_char2, fontName, size) {\n      var fontData = this.getFontByName(fontName); // Using the char instead of char.charCodeAt(0)\n      // to avoid collisions between equal chars\n\n      var index = _char2;\n\n      if (!fontData.cache[index]) {\n        var tHelper = fontData.helper;\n\n        if (_char2 === ' ') {\n          var doubleSize = tHelper.measureText('|' + _char2 + '|');\n          var singleSize = tHelper.measureText('||');\n          fontData.cache[index] = (doubleSize - singleSize) / 100;\n        } else {\n          fontData.cache[index] = tHelper.measureText(_char2) / 100;\n        }\n      }\n\n      return fontData.cache[index] * size;\n    }\n\n    function getFontByName(name) {\n      var i = 0;\n      var len = this.fonts.length;\n\n      while (i < len) {\n        if (this.fonts[i].fName === name) {\n          return this.fonts[i];\n        }\n\n        i += 1;\n      }\n\n      return this.fonts[0];\n    }\n\n    function getCodePoint(string) {\n      var codePoint = 0;\n      var first = string.charCodeAt(0);\n\n      if (first >= 0xD800 && first <= 0xDBFF) {\n        var second = string.charCodeAt(1);\n\n        if (second >= 0xDC00 && second <= 0xDFFF) {\n          codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        }\n      }\n\n      return codePoint;\n    } // Skin tone modifiers\n\n\n    function isModifier(firstCharCode, secondCharCode) {\n      var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n      return surrogateModifiers.indexOf(sum) !== -1;\n    }\n\n    function isZeroWidthJoiner(charCode) {\n      return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n    } // This codepoint may change the appearance of the preceding character.\n    // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n    // as a colorful image as compared to a monochrome text variant.\n\n\n    function isVariationSelector(charCode) {\n      return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n    } // The regional indicator symbols are a set of 26 alphabetic Unicode\n    /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n    // two-letter country codes in a way that allows optional special treatment.\n\n\n    function isRegionalCode(string) {\n      var codePoint = getCodePoint(string);\n\n      if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n        return true;\n      }\n\n      return false;\n    } // Some Emoji implementations represent combinations of\n    // two “regional indicator” letters as a single flag symbol.\n\n\n    function isFlagEmoji(string) {\n      return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n    }\n\n    function isCombinedCharacter(_char3) {\n      return combinedCharacters.indexOf(_char3) !== -1;\n    } // Regional flags start with a BLACK_FLAG_CODE_POINT\n    // folowed by 5 chars in the TAG range\n    // and end with a CANCEL_TAG_CODE_POINT\n\n\n    function isRegionalFlag(text, index) {\n      var codePoint = getCodePoint(text.substr(index, 2));\n\n      if (codePoint !== BLACK_FLAG_CODE_POINT) {\n        return false;\n      }\n\n      var count = 0;\n      index += 2;\n\n      while (count < 5) {\n        codePoint = getCodePoint(text.substr(index, 2));\n\n        if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n          return false;\n        }\n\n        count += 1;\n        index += 2;\n      }\n\n      return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n    }\n\n    function setIsLoaded() {\n      this.isLoaded = true;\n    }\n\n    var Font = function Font() {\n      this.fonts = [];\n      this.chars = null;\n      this.typekitLoaded = 0;\n      this.isLoaded = false;\n      this._warned = false;\n      this.initTime = Date.now();\n      this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n      this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n    };\n\n    Font.isModifier = isModifier;\n    Font.isZeroWidthJoiner = isZeroWidthJoiner;\n    Font.isFlagEmoji = isFlagEmoji;\n    Font.isRegionalCode = isRegionalCode;\n    Font.isCombinedCharacter = isCombinedCharacter;\n    Font.isRegionalFlag = isRegionalFlag;\n    Font.isVariationSelector = isVariationSelector;\n    Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\n    var fontPrototype = {\n      addChars: addChars,\n      addFonts: addFonts,\n      getCharData: getCharData,\n      getFontByName: getFontByName,\n      measureText: measureText,\n      checkLoadedFonts: checkLoadedFonts,\n      setIsLoaded: setIsLoaded\n    };\n    Font.prototype = fontPrototype;\n    return Font;\n  }();\n\n  function SlotManager(animationData) {\n    this.animationData = animationData;\n  }\n\n  SlotManager.prototype.getProp = function (data) {\n    if (this.animationData.slots && this.animationData.slots[data.sid]) {\n      return Object.assign(data, this.animationData.slots[data.sid].p);\n    }\n\n    return data;\n  };\n\n  function slotFactory(animationData) {\n    return new SlotManager(animationData);\n  }\n\n  function RenderableElement() {}\n\n  RenderableElement.prototype = {\n    initRenderable: function initRenderable() {\n      // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n      this.isInRange = false; // layer's display state\n\n      this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n      this.isTransparent = false; // list of animated components\n\n      this.renderableComponents = [];\n    },\n    addRenderableComponent: function addRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) === -1) {\n        this.renderableComponents.push(component);\n      }\n    },\n    removeRenderableComponent: function removeRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) !== -1) {\n        this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n      }\n    },\n    prepareRenderableFrame: function prepareRenderableFrame(num) {\n      this.checkLayerLimits(num);\n    },\n    checkTransparency: function checkTransparency() {\n      if (this.finalTransform.mProp.o.v <= 0) {\n        if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n          this.isTransparent = true;\n          this.hide();\n        }\n      } else if (this.isTransparent) {\n        this.isTransparent = false;\n        this.show();\n      }\n    },\n\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       *\r\n       */\n    checkLayerLimits: function checkLayerLimits(num) {\n      if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n        if (this.isInRange !== true) {\n          this.globalData._mdf = true;\n          this._mdf = true;\n          this.isInRange = true;\n          this.show();\n        }\n      } else if (this.isInRange !== false) {\n        this.globalData._mdf = true;\n        this.isInRange = false;\n        this.hide();\n      }\n    },\n    renderRenderable: function renderRenderable() {\n      var i;\n      var len = this.renderableComponents.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderableComponents[i].renderFrame(this._isFirstFrame);\n      }\n      /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n          this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n    },\n    sourceRectAtTime: function sourceRectAtTime() {\n      return {\n        top: 0,\n        left: 0,\n        width: 100,\n        height: 100\n      };\n    },\n    getLayerSize: function getLayerSize() {\n      if (this.data.ty === 5) {\n        return {\n          w: this.data.textData.width,\n          h: this.data.textData.height\n        };\n      }\n\n      return {\n        w: this.data.width,\n        h: this.data.height\n      };\n    }\n  };\n\n  var getBlendMode = function () {\n    var blendModeEnums = {\n      0: 'source-over',\n      1: 'multiply',\n      2: 'screen',\n      3: 'overlay',\n      4: 'darken',\n      5: 'lighten',\n      6: 'color-dodge',\n      7: 'color-burn',\n      8: 'hard-light',\n      9: 'soft-light',\n      10: 'difference',\n      11: 'exclusion',\n      12: 'hue',\n      13: 'saturation',\n      14: 'color',\n      15: 'luminosity'\n    };\n    return function (mode) {\n      return blendModeEnums[mode] || '';\n    };\n  }();\n\n  function SliderEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function AngleEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function ColorEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function PointEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function LayerIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function MaskIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function CheckboxEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function NoValueEffect() {\n    this.p = {};\n  }\n\n  function EffectsManager(data, element) {\n    var effects = data.ef || [];\n    this.effectElements = [];\n    var i;\n    var len = effects.length;\n    var effectItem;\n\n    for (i = 0; i < len; i += 1) {\n      effectItem = new GroupEffect(effects[i], element);\n      this.effectElements.push(effectItem);\n    }\n  }\n\n  function GroupEffect(data, element) {\n    this.init(data, element);\n  }\n\n  extendPrototype([DynamicPropertyContainer], GroupEffect);\n  GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n  GroupEffect.prototype.init = function (data, element) {\n    this.data = data;\n    this.effectElements = [];\n    this.initDynamicPropertyContainer(element);\n    var i;\n    var len = this.data.ef.length;\n    var eff;\n    var effects = this.data.ef;\n\n    for (i = 0; i < len; i += 1) {\n      eff = null;\n\n      switch (effects[i].ty) {\n        case 0:\n          eff = new SliderEffect(effects[i], element, this);\n          break;\n\n        case 1:\n          eff = new AngleEffect(effects[i], element, this);\n          break;\n\n        case 2:\n          eff = new ColorEffect(effects[i], element, this);\n          break;\n\n        case 3:\n          eff = new PointEffect(effects[i], element, this);\n          break;\n\n        case 4:\n        case 7:\n          eff = new CheckboxEffect(effects[i], element, this);\n          break;\n\n        case 10:\n          eff = new LayerIndexEffect(effects[i], element, this);\n          break;\n\n        case 11:\n          eff = new MaskIndexEffect(effects[i], element, this);\n          break;\n\n        case 5:\n          eff = new EffectsManager(effects[i], element, this);\n          break;\n        // case 6:\n\n        default:\n          eff = new NoValueEffect(effects[i], element, this);\n          break;\n      }\n\n      if (eff) {\n        this.effectElements.push(eff);\n      }\n    }\n  };\n\n  function BaseElement() {}\n\n  BaseElement.prototype = {\n    checkMasks: function checkMasks() {\n      if (!this.data.hasMask) {\n        return false;\n      }\n\n      var i = 0;\n      var len = this.data.masksProperties.length;\n\n      while (i < len) {\n        if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n          return true;\n        }\n\n        i += 1;\n      }\n\n      return false;\n    },\n    initExpressions: function initExpressions() {\n      var expressionsInterfaces = getExpressionInterfaces();\n\n      if (!expressionsInterfaces) {\n        return;\n      }\n\n      var LayerExpressionInterface = expressionsInterfaces('layer');\n      var EffectsExpressionInterface = expressionsInterfaces('effects');\n      var ShapeExpressionInterface = expressionsInterfaces('shape');\n      var TextExpressionInterface = expressionsInterfaces('text');\n      var CompExpressionInterface = expressionsInterfaces('comp');\n      this.layerInterface = LayerExpressionInterface(this);\n\n      if (this.data.hasMask && this.maskManager) {\n        this.layerInterface.registerMaskInterface(this.maskManager);\n      }\n\n      var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n      this.layerInterface.registerEffectsInterface(effectsInterface);\n\n      if (this.data.ty === 0 || this.data.xt) {\n        this.compInterface = CompExpressionInterface(this);\n      } else if (this.data.ty === 4) {\n        this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n        this.layerInterface.content = this.layerInterface.shapeInterface;\n      } else if (this.data.ty === 5) {\n        this.layerInterface.textInterface = TextExpressionInterface(this);\n        this.layerInterface.text = this.layerInterface.textInterface;\n      }\n    },\n    setBlendMode: function setBlendMode() {\n      var blendModeValue = getBlendMode(this.data.bm);\n      var elem = this.baseElement || this.layerElement;\n      elem.style['mix-blend-mode'] = blendModeValue;\n    },\n    initBaseData: function initBaseData(data, globalData, comp) {\n      this.globalData = globalData;\n      this.comp = comp;\n      this.data = data;\n      this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n      if (!this.data.sr) {\n        this.data.sr = 1;\n      } // effects manager\n\n\n      this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n    },\n    getType: function getType() {\n      return this.type;\n    },\n    sourceRectAtTime: function sourceRectAtTime() {}\n  };\n\n  /**\r\n   * @file\r\n   * Handles element's layer frame update.\r\n   * Checks layer in point and out point\r\n   *\r\n   */\n  function FrameElement() {}\n\n  FrameElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       */\n    initFrame: function initFrame() {\n      // set to true when inpoint is rendered\n      this._isFirstFrame = false; // list of animated properties\n\n      this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n      this._mdf = false;\n    },\n\n    /**\r\n       * @function\r\n       * Calculates all dynamic values\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       * @param {boolean} isVisible\r\n       * if layers is currently in range\r\n       *\r\n       */\n    prepareProperties: function prepareProperties(num, isVisible) {\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n          this.dynamicProperties[i].getValue();\n\n          if (this.dynamicProperties[i]._mdf) {\n            this.globalData._mdf = true;\n            this._mdf = true;\n          }\n        }\n      }\n    },\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n      }\n    }\n  };\n\n  function FootageElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.footageData = globalData.imageLoader.getAsset(this.assetData);\n    this.initBaseData(data, globalData, comp);\n  }\n\n  FootageElement.prototype.prepareFrame = function () {};\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n  FootageElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  FootageElement.prototype.renderFrame = function () {};\n\n  FootageElement.prototype.destroy = function () {};\n\n  FootageElement.prototype.initExpressions = function () {\n    var expressionsInterfaces = getExpressionInterfaces();\n\n    if (!expressionsInterfaces) {\n      return;\n    }\n\n    var FootageInterface = expressionsInterfaces('footage');\n    this.layerInterface = FootageInterface(this);\n  };\n\n  FootageElement.prototype.getFootageData = function () {\n    return this.footageData;\n  };\n\n  function AudioElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initBaseData(data, globalData, comp);\n    this._isPlaying = false;\n    this._canPlay = false;\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.audio = this.globalData.audioController.createAudio(assetPath);\n    this._currentTime = 0;\n    this.globalData.audioController.addAudio(this);\n    this._volumeMultiplier = 1;\n    this._volume = 1;\n    this._previousVolume = null;\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n    this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n      k: [100]\n    }, 1, 0.01, this);\n  }\n\n  AudioElement.prototype.prepareFrame = function (num) {\n    this.prepareRenderableFrame(num, true);\n    this.prepareProperties(num, true);\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n      this._currentTime = timeRemapped;\n    } else {\n      this._currentTime = num / this.data.sr;\n    }\n\n    this._volume = this.lv.v[0];\n    var totalVolume = this._volume * this._volumeMultiplier;\n\n    if (this._previousVolume !== totalVolume) {\n      this._previousVolume = totalVolume;\n      this.audio.volume(totalVolume);\n    }\n  };\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n  AudioElement.prototype.renderFrame = function () {\n    if (this.isInRange && this._canPlay) {\n      if (!this._isPlaying) {\n        this.audio.play();\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n        this._isPlaying = true;\n      } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n      }\n    }\n  };\n\n  AudioElement.prototype.show = function () {// this.audio.play()\n  };\n\n  AudioElement.prototype.hide = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n  };\n\n  AudioElement.prototype.pause = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n    this._canPlay = false;\n  };\n\n  AudioElement.prototype.resume = function () {\n    this._canPlay = true;\n  };\n\n  AudioElement.prototype.setRate = function (rateValue) {\n    this.audio.rate(rateValue);\n  };\n\n  AudioElement.prototype.volume = function (volumeValue) {\n    this._volumeMultiplier = volumeValue;\n    this._previousVolume = volumeValue * this._volume;\n    this.audio.volume(this._previousVolume);\n  };\n\n  AudioElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  AudioElement.prototype.destroy = function () {};\n\n  AudioElement.prototype.sourceRectAtTime = function () {};\n\n  AudioElement.prototype.initExpressions = function () {};\n\n  function BaseRenderer() {}\n\n  BaseRenderer.prototype.checkLayers = function (num) {\n    var i;\n    var len = this.layers.length;\n    var data;\n    this.completeLayers = true;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (!this.elements[i]) {\n        data = this.layers[i];\n\n        if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n          this.buildItem(i);\n        }\n      }\n\n      this.completeLayers = this.elements[i] ? this.completeLayers : false;\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.createItem = function (layer) {\n    switch (layer.ty) {\n      case 2:\n        return this.createImage(layer);\n\n      case 0:\n        return this.createComp(layer);\n\n      case 1:\n        return this.createSolid(layer);\n\n      case 3:\n        return this.createNull(layer);\n\n      case 4:\n        return this.createShape(layer);\n\n      case 5:\n        return this.createText(layer);\n\n      case 6:\n        return this.createAudio(layer);\n\n      case 13:\n        return this.createCamera(layer);\n\n      case 15:\n        return this.createFootage(layer);\n\n      default:\n        return this.createNull(layer);\n    }\n  };\n\n  BaseRenderer.prototype.createCamera = function () {\n    throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n  };\n\n  BaseRenderer.prototype.createAudio = function (data) {\n    return new AudioElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.createFootage = function (data) {\n    return new FootageElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.buildAllItems = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.buildItem(i);\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.includeLayers = function (newLayers) {\n    this.completeLayers = false;\n    var i;\n    var len = newLayers.length;\n    var j;\n    var jLen = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      j = 0;\n\n      while (j < jLen) {\n        if (this.layers[j].id === newLayers[i].id) {\n          this.layers[j] = newLayers[i];\n          break;\n        }\n\n        j += 1;\n      }\n    }\n  };\n\n  BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n    this.globalData.projectInterface = pInterface;\n  };\n\n  BaseRenderer.prototype.initItems = function () {\n    if (!this.globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n  };\n\n  BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n    var elements = this.elements;\n    var layers = this.layers;\n    var i = 0;\n    var len = layers.length;\n\n    while (i < len) {\n      if (layers[i].ind == parentName) {\n        // eslint-disable-line eqeqeq\n        if (!elements[i] || elements[i] === true) {\n          this.buildItem(i);\n          this.addPendingElement(element);\n        } else {\n          hierarchy.push(elements[i]);\n          elements[i].setAsParent();\n\n          if (layers[i].parent !== undefined) {\n            this.buildElementParenting(element, layers[i].parent, hierarchy);\n          } else {\n            element.setHierarchy(hierarchy);\n          }\n        }\n      }\n\n      i += 1;\n    }\n  };\n\n  BaseRenderer.prototype.addPendingElement = function (element) {\n    this.pendingElements.push(element);\n  };\n\n  BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i]);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  BaseRenderer.prototype.getElementById = function (ind) {\n    var i;\n    var len = this.elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i].data.ind === ind) {\n        return this.elements[i];\n      }\n    }\n\n    return null;\n  };\n\n  BaseRenderer.prototype.getElementByPath = function (path) {\n    var pathValue = path.shift();\n    var element;\n\n    if (typeof pathValue === 'number') {\n      element = this.elements[pathValue];\n    } else {\n      var i;\n      var len = this.elements.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.elements[i].data.nm === pathValue) {\n          element = this.elements[i];\n          break;\n        }\n      }\n    }\n\n    if (path.length === 0) {\n      return element;\n    }\n\n    return element.getElementByPath(path);\n  };\n\n  BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n    this.globalData.fontManager = new FontManager();\n    this.globalData.slotManager = slotFactory(animData);\n    this.globalData.fontManager.addChars(animData.chars);\n    this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n    this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n    this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n    this.globalData.imageLoader = this.animationItem.imagePreloader;\n    this.globalData.audioController = this.animationItem.audioController;\n    this.globalData.frameId = 0;\n    this.globalData.frameRate = animData.fr;\n    this.globalData.nm = animData.nm;\n    this.globalData.compSize = {\n      w: animData.w,\n      h: animData.h\n    };\n  };\n\n  var effectTypes = {\n    TRANSFORM_EFFECT: 'transformEFfect'\n  };\n\n  function TransformElement() {}\n\n  TransformElement.prototype = {\n    initTransform: function initTransform() {\n      var mat = new Matrix();\n      this.finalTransform = {\n        mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n          o: 0\n        },\n        _matMdf: false,\n        _localMatMdf: false,\n        _opMdf: false,\n        mat: mat,\n        localMat: mat,\n        localOpacity: 1\n      };\n\n      if (this.data.ao) {\n        this.finalTransform.mProp.autoOriented = true;\n      } // TODO: check TYPE 11: Guided elements\n\n\n      if (this.data.ty !== 11) {// this.createElements();\n      }\n    },\n    renderTransform: function renderTransform() {\n      this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n      this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n      if (this.hierarchy) {\n        var mat;\n        var finalMat = this.finalTransform.mat;\n        var i = 0;\n        var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n        if (!this.finalTransform._matMdf) {\n          while (i < len) {\n            if (this.hierarchy[i].finalTransform.mProp._mdf) {\n              this.finalTransform._matMdf = true;\n              break;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._matMdf) {\n          mat = this.finalTransform.mProp.v.props;\n          finalMat.cloneFromProps(mat);\n\n          for (i = 0; i < len; i += 1) {\n            finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n          }\n        }\n      }\n\n      if (this.finalTransform._matMdf) {\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderLocalTransform: function renderLocalTransform() {\n      if (this.localTransforms) {\n        var i = 0;\n        var len = this.localTransforms.length;\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n\n        if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n          while (i < len) {\n            if (this.localTransforms[i]._mdf) {\n              this.finalTransform._localMatMdf = true;\n            }\n\n            if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n              this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n              this.finalTransform._opMdf = true;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._localMatMdf) {\n          var localMat = this.finalTransform.localMat;\n          this.localTransforms[0].matrix.clone(localMat);\n\n          for (i = 1; i < len; i += 1) {\n            var lmat = this.localTransforms[i].matrix;\n            localMat.multiply(lmat);\n          }\n\n          localMat.multiply(this.finalTransform.mat);\n        }\n\n        if (this.finalTransform._opMdf) {\n          var localOp = this.finalTransform.localOpacity;\n\n          for (i = 0; i < len; i += 1) {\n            localOp *= this.localTransforms[i].opacity * 0.01;\n          }\n\n          this.finalTransform.localOpacity = localOp;\n        }\n      }\n    },\n    searchEffectTransforms: function searchEffectTransforms() {\n      if (this.renderableEffectsManager) {\n        var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n\n        if (transformEffects.length) {\n          this.localTransforms = [];\n          this.finalTransform.localMat = new Matrix();\n          var i = 0;\n          var len = transformEffects.length;\n\n          for (i = 0; i < len; i += 1) {\n            this.localTransforms.push(transformEffects[i]);\n          }\n        }\n      }\n    },\n    globalToLocal: function globalToLocal(pt) {\n      var transforms = [];\n      transforms.push(this.finalTransform);\n      var flag = true;\n      var comp = this.comp;\n\n      while (flag) {\n        if (comp.finalTransform) {\n          if (comp.data.hasMask) {\n            transforms.splice(0, 0, comp.finalTransform);\n          }\n\n          comp = comp.comp;\n        } else {\n          flag = false;\n        }\n      }\n\n      var i;\n      var len = transforms.length;\n      var ptNew;\n\n      for (i = 0; i < len; i += 1) {\n        ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n        pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n      }\n\n      return pt;\n    },\n    mHelper: new Matrix()\n  };\n\n  function MaskElement(data, element, globalData) {\n    this.data = data;\n    this.element = element;\n    this.globalData = globalData;\n    this.storedData = [];\n    this.masksProperties = this.data.masksProperties || [];\n    this.maskElement = null;\n    var defs = this.globalData.defs;\n    var i;\n    var len = this.masksProperties ? this.masksProperties.length : 0;\n    this.viewData = createSizedArray(len);\n    this.solidPath = '';\n    var path;\n    var properties = this.masksProperties;\n    var count = 0;\n    var currentMasks = [];\n    var j;\n    var jLen;\n    var layerId = createElementID();\n    var rect;\n    var expansor;\n    var feMorph;\n    var x;\n    var maskType = 'clipPath';\n    var maskRef = 'clip-path';\n\n    for (i = 0; i < len; i += 1) {\n      if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n        maskType = 'mask';\n        maskRef = 'mask';\n      }\n\n      if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n        rect = createNS('rect');\n        rect.setAttribute('fill', '#ffffff');\n        rect.setAttribute('width', this.element.comp.data.w || 0);\n        rect.setAttribute('height', this.element.comp.data.h || 0);\n        currentMasks.push(rect);\n      } else {\n        rect = null;\n      }\n\n      path = createNS('path');\n\n      if (properties[i].mode === 'n') {\n        // TODO move this to a factory or to a constructor\n        this.viewData[i] = {\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          elem: path,\n          lastPath: ''\n        };\n        defs.appendChild(path);\n      } else {\n        count += 1;\n        path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        path.setAttribute('clip-rule', 'nonzero');\n        var filterID;\n\n        if (properties[i].x.k !== 0) {\n          maskType = 'mask';\n          maskRef = 'mask';\n          x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n          filterID = createElementID();\n          expansor = createNS('filter');\n          expansor.setAttribute('id', filterID);\n          feMorph = createNS('feMorphology');\n          feMorph.setAttribute('operator', 'erode');\n          feMorph.setAttribute('in', 'SourceGraphic');\n          feMorph.setAttribute('radius', '0');\n          expansor.appendChild(feMorph);\n          defs.appendChild(expansor);\n          path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        } else {\n          feMorph = null;\n          x = null;\n        } // TODO move this to a factory or to a constructor\n\n\n        this.storedData[i] = {\n          elem: path,\n          x: x,\n          expan: feMorph,\n          lastPath: '',\n          lastOperator: '',\n          filterId: filterID,\n          lastRadius: 0\n        };\n\n        if (properties[i].mode === 'i') {\n          jLen = currentMasks.length;\n          var g = createNS('g');\n\n          for (j = 0; j < jLen; j += 1) {\n            g.appendChild(currentMasks[j]);\n          }\n\n          var mask = createNS('mask');\n          mask.setAttribute('mask-type', 'alpha');\n          mask.setAttribute('id', layerId + '_' + count);\n          mask.appendChild(path);\n          defs.appendChild(mask);\n          g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n          currentMasks.length = 0;\n          currentMasks.push(g);\n        } else {\n          currentMasks.push(path);\n        }\n\n        if (properties[i].inv && !this.solidPath) {\n          this.solidPath = this.createLayerSolidPath();\n        } // TODO move this to a factory or to a constructor\n\n\n        this.viewData[i] = {\n          elem: path,\n          lastPath: '',\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          invRect: rect\n        };\n\n        if (!this.viewData[i].prop.k) {\n          this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n        }\n      }\n    }\n\n    this.maskElement = createNS(maskType);\n    len = currentMasks.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.maskElement.appendChild(currentMasks[i]);\n    }\n\n    if (count > 0) {\n      this.maskElement.setAttribute('id', layerId);\n      this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n      defs.appendChild(this.maskElement);\n    }\n\n    if (this.viewData.length) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  MaskElement.prototype.getMaskProperty = function (pos) {\n    return this.viewData[pos].prop;\n  };\n\n  MaskElement.prototype.renderFrame = function (isFirstFrame) {\n    var finalMat = this.element.finalTransform.mat;\n    var i;\n    var len = this.masksProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.viewData[i].prop._mdf || isFirstFrame) {\n        this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n      }\n\n      if (this.viewData[i].op._mdf || isFirstFrame) {\n        this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n      }\n\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n          this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n        }\n\n        if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n          var feMorph = this.storedData[i].expan;\n\n          if (this.storedData[i].x.v < 0) {\n            if (this.storedData[i].lastOperator !== 'erode') {\n              this.storedData[i].lastOperator = 'erode';\n              this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n            }\n\n            feMorph.setAttribute('radius', -this.storedData[i].x.v);\n          } else {\n            if (this.storedData[i].lastOperator !== 'dilate') {\n              this.storedData[i].lastOperator = 'dilate';\n              this.storedData[i].elem.setAttribute('filter', null);\n            }\n\n            this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n          }\n        }\n      }\n    }\n  };\n\n  MaskElement.prototype.getMaskelement = function () {\n    return this.maskElement;\n  };\n\n  MaskElement.prototype.createLayerSolidPath = function () {\n    var path = 'M0,0 ';\n    path += ' h' + this.globalData.compSize.w;\n    path += ' v' + this.globalData.compSize.h;\n    path += ' h-' + this.globalData.compSize.w;\n    path += ' v-' + this.globalData.compSize.h + ' ';\n    return path;\n  };\n\n  MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n    var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    var i;\n    var len;\n    len = pathNodes._length;\n\n    for (i = 1; i < len; i += 1) {\n      // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n    } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n    if (pathNodes.c && len > 1) {\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    } // pathNodes.__renderedString = pathString;\n\n\n    if (viewData.lastPath !== pathString) {\n      var pathShapeValue = '';\n\n      if (viewData.elem) {\n        if (pathNodes.c) {\n          pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n        }\n\n        viewData.elem.setAttribute('d', pathShapeValue);\n      }\n\n      viewData.lastPath = pathString;\n    }\n  };\n\n  MaskElement.prototype.destroy = function () {\n    this.element = null;\n    this.globalData = null;\n    this.maskElement = null;\n    this.data = null;\n    this.masksProperties = null;\n  };\n\n  var filtersFactory = function () {\n    var ob = {};\n    ob.createFilter = createFilter;\n    ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n    function createFilter(filId, skipCoordinates) {\n      var fil = createNS('filter');\n      fil.setAttribute('id', filId);\n\n      if (skipCoordinates !== true) {\n        fil.setAttribute('filterUnits', 'objectBoundingBox');\n        fil.setAttribute('x', '0%');\n        fil.setAttribute('y', '0%');\n        fil.setAttribute('width', '100%');\n        fil.setAttribute('height', '100%');\n      }\n\n      return fil;\n    }\n\n    function createAlphaToLuminanceFilter() {\n      var feColorMatrix = createNS('feColorMatrix');\n      feColorMatrix.setAttribute('type', 'matrix');\n      feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n      feColorMatrix.setAttribute('values', '0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1');\n      return feColorMatrix;\n    }\n\n    return ob;\n  }();\n\n  var featureSupport = function () {\n    var ob = {\n      maskType: true,\n      svgLumaHidden: true,\n      offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\n    };\n\n    if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n      ob.maskType = false;\n    }\n\n    if (/firefox/i.test(navigator.userAgent)) {\n      ob.svgLumaHidden = false;\n    }\n\n    return ob;\n  }();\n\n  var registeredEffects$1 = {};\n  var idPrefix = 'filter_result_';\n\n  function SVGEffects(elem) {\n    var i;\n    var source = 'SourceGraphic';\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    var filId = createElementID();\n    var fil = filtersFactory.createFilter(filId, true);\n    var count = 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects$1[type]) {\n        var Effect = registeredEffects$1[type].effect;\n        filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n        source = idPrefix + count;\n\n        if (registeredEffects$1[type].countsAsEffect) {\n          count += 1;\n        }\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (count) {\n      elem.globalData.defs.appendChild(fil);\n      elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  SVGEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n\n    return effects;\n  };\n\n  function registerEffect$1(id, effect, countsAsEffect) {\n    registeredEffects$1[id] = {\n      effect: effect,\n      countsAsEffect: countsAsEffect\n    };\n  }\n\n  function SVGBaseElement() {}\n\n  SVGBaseElement.prototype = {\n    initRendererElement: function initRendererElement() {\n      this.layerElement = createNS('g');\n    },\n    createContainerElements: function createContainerElements() {\n      this.matteElement = createNS('g');\n      this.transformedElement = this.layerElement;\n      this.maskedElement = this.layerElement;\n      this._sizeChanged = false;\n      var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n      if (this.data.td) {\n        this.matteMasks = {};\n        var gg = createNS('g');\n        gg.setAttribute('id', this.layerId);\n        gg.appendChild(this.layerElement);\n        layerElementParent = gg;\n        this.globalData.defs.appendChild(gg);\n      } else if (this.data.tt) {\n        this.matteElement.appendChild(this.layerElement);\n        layerElementParent = this.matteElement;\n        this.baseElement = this.matteElement;\n      } else {\n        this.baseElement = this.layerElement;\n      }\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n      if (this.data.ty === 0 && !this.data.hd) {\n        var cp = createNS('clipPath');\n        var pt = createNS('path');\n        pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n        var clipId = createElementID();\n        cp.setAttribute('id', clipId);\n        cp.appendChild(pt);\n        this.globalData.defs.appendChild(cp);\n\n        if (this.checkMasks()) {\n          var cpGroup = createNS('g');\n          cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n          cpGroup.appendChild(this.layerElement);\n          this.transformedElement = cpGroup;\n\n          if (layerElementParent) {\n            layerElementParent.appendChild(this.transformedElement);\n          } else {\n            this.baseElement = this.transformedElement;\n          }\n        } else {\n          this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n        }\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      if (this.finalTransform._localMatMdf) {\n        this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\n      }\n    },\n    destroyBaseElement: function destroyBaseElement() {\n      this.layerElement = null;\n      this.matteElement = null;\n      this.maskManager.destroy();\n    },\n    getBaseElement: function getBaseElement() {\n      if (this.data.hd) {\n        return null;\n      }\n\n      return this.baseElement;\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n      this.renderableEffectsManager = new SVGEffects(this);\n      this.searchEffectTransforms();\n    },\n    getMatte: function getMatte(matteType) {\n      // This should not be a common case. But for backward compatibility, we'll create the matte object.\n      // It solves animations that have two consecutive layers marked as matte masks.\n      // Which is an undefined behavior in AE.\n      if (!this.matteMasks) {\n        this.matteMasks = {};\n      }\n\n      if (!this.matteMasks[matteType]) {\n        var id = this.layerId + '_' + matteType;\n        var filId;\n        var fil;\n        var useElement;\n        var gg;\n\n        if (matteType === 1 || matteType === 3) {\n          var masker = createNS('mask');\n          masker.setAttribute('id', id);\n          masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          masker.appendChild(useElement);\n          this.globalData.defs.appendChild(masker);\n\n          if (!featureSupport.maskType && matteType === 1) {\n            masker.setAttribute('mask-type', 'luminance');\n            filId = createElementID();\n            fil = filtersFactory.createFilter(filId);\n            this.globalData.defs.appendChild(fil);\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            gg.appendChild(useElement);\n            masker.appendChild(gg);\n            gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          }\n        } else if (matteType === 2) {\n          var maskGroup = createNS('mask');\n          maskGroup.setAttribute('id', id);\n          maskGroup.setAttribute('mask-type', 'alpha');\n          var maskGrouper = createNS('g');\n          maskGroup.appendChild(maskGrouper);\n          filId = createElementID();\n          fil = filtersFactory.createFilter(filId); /// /\n\n          var feCTr = createNS('feComponentTransfer');\n          feCTr.setAttribute('in', 'SourceGraphic');\n          fil.appendChild(feCTr);\n          var feFunc = createNS('feFuncA');\n          feFunc.setAttribute('type', 'table');\n          feFunc.setAttribute('tableValues', '1.0 0.0');\n          feCTr.appendChild(feFunc); /// /\n\n          this.globalData.defs.appendChild(fil);\n          var alphaRect = createNS('rect');\n          alphaRect.setAttribute('width', this.comp.data.w);\n          alphaRect.setAttribute('height', this.comp.data.h);\n          alphaRect.setAttribute('x', '0');\n          alphaRect.setAttribute('y', '0');\n          alphaRect.setAttribute('fill', '#ffffff');\n          alphaRect.setAttribute('opacity', '0');\n          maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          maskGrouper.appendChild(alphaRect);\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          maskGrouper.appendChild(useElement);\n\n          if (!featureSupport.maskType) {\n            maskGroup.setAttribute('mask-type', 'luminance');\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            maskGrouper.appendChild(alphaRect);\n            gg.appendChild(this.layerElement);\n            maskGrouper.appendChild(gg);\n          }\n\n          this.globalData.defs.appendChild(maskGroup);\n        }\n\n        this.matteMasks[matteType] = id;\n      }\n\n      return this.matteMasks[matteType];\n    },\n    setMatte: function setMatte(id) {\n      if (!this.matteElement) {\n        return;\n      }\n\n      this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n    }\n  };\n\n  /**\r\n   * @file\r\n   * Handles AE's layer parenting property.\r\n   *\r\n   */\n  function HierarchyElement() {}\n\n  HierarchyElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes hierarchy properties\r\n       *\r\n       */\n    initHierarchy: function initHierarchy() {\n      // element's parent list\n      this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n      this._isParent = false;\n      this.checkParenting();\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer's hierarchy.\r\n       * @param {array} hierarch\r\n       * layer's parent list\r\n       *\r\n       */\n    setHierarchy: function setHierarchy(hierarchy) {\n      this.hierarchy = hierarchy;\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer as parent.\r\n       *\r\n       */\n    setAsParent: function setAsParent() {\n      this._isParent = true;\n    },\n\n    /**\r\n       * @function\r\n       * Searches layer's parenting chain\r\n       *\r\n       */\n    checkParenting: function checkParenting() {\n      if (this.data.parent !== undefined) {\n        this.comp.buildElementParenting(this, this.data.parent, []);\n      }\n    }\n  };\n\n  function RenderableDOMElement() {}\n\n  (function () {\n    var _prototype = {\n      initElement: function initElement(data, globalData, comp) {\n        this.initFrame();\n        this.initBaseData(data, globalData, comp);\n        this.initTransform(data, globalData, comp);\n        this.initHierarchy();\n        this.initRenderable();\n        this.initRendererElement();\n        this.createContainerElements();\n        this.createRenderableComponents();\n        this.createContent();\n        this.hide();\n      },\n      hide: function hide() {\n        // console.log('HIDE', this);\n        if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n          var elem = this.baseElement || this.layerElement;\n          elem.style.display = 'none';\n          this.hidden = true;\n        }\n      },\n      show: function show() {\n        // console.log('SHOW', this);\n        if (this.isInRange && !this.isTransparent) {\n          if (!this.data.hd) {\n            var elem = this.baseElement || this.layerElement;\n            elem.style.display = 'block';\n          }\n\n          this.hidden = false;\n          this._isFirstFrame = true;\n        }\n      },\n      renderFrame: function renderFrame() {\n        // If it is exported as hidden (data.hd === true) no need to render\n        // If it is not visible no need to render\n        if (this.data.hd || this.hidden) {\n          return;\n        }\n\n        this.renderTransform();\n        this.renderRenderable();\n        this.renderLocalTransform();\n        this.renderElement();\n        this.renderInnerContent();\n\n        if (this._isFirstFrame) {\n          this._isFirstFrame = false;\n        }\n      },\n      renderInnerContent: function renderInnerContent() {},\n      prepareFrame: function prepareFrame(num) {\n        this._mdf = false;\n        this.prepareRenderableFrame(num);\n        this.prepareProperties(num, this.isInRange);\n        this.checkTransparency();\n      },\n      destroy: function destroy() {\n        this.innerElem = null;\n        this.destroyBaseElement();\n      }\n    };\n    extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n  })();\n\n  function IImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n\n    if (this.assetData && this.assetData.sid) {\n      this.assetData = globalData.slotManager.getProp(this.assetData);\n    }\n\n    this.initElement(data, globalData, comp);\n    this.sourceRect = {\n      top: 0,\n      left: 0,\n      width: this.assetData.w,\n      height: this.assetData.h\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n  IImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.innerElem = createNS('image');\n    this.innerElem.setAttribute('width', this.assetData.w + 'px');\n    this.innerElem.setAttribute('height', this.assetData.h + 'px');\n    this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n    this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n    this.layerElement.appendChild(this.innerElem);\n  };\n\n  IImageElement.prototype.sourceRectAtTime = function () {\n    return this.sourceRect;\n  };\n\n  function ProcessedElement(element, position) {\n    this.elem = element;\n    this.pos = position;\n  }\n\n  function IShapeElement() {}\n\n  IShapeElement.prototype = {\n    addShapeToModifiers: function addShapeToModifiers(data) {\n      var i;\n      var len = this.shapeModifiers.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapeModifiers[i].addShape(data);\n      }\n    },\n    isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n      var i = 0;\n      var len = this.shapeModifiers.length;\n\n      while (i < len) {\n        if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n    renderModifiers: function renderModifiers() {\n      if (!this.shapeModifiers.length) {\n        return;\n      }\n\n      var i;\n      var len = this.shapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].sh.reset();\n      }\n\n      len = this.shapeModifiers.length;\n      var shouldBreakProcess;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n        // TODO: find a better solution for this\n\n        if (shouldBreakProcess) {\n          break;\n        }\n      }\n    },\n    searchProcessedElement: function searchProcessedElement(elem) {\n      var elements = this.processedElements;\n      var i = 0;\n      var len = elements.length;\n\n      while (i < len) {\n        if (elements[i].elem === elem) {\n          return elements[i].pos;\n        }\n\n        i += 1;\n      }\n\n      return 0;\n    },\n    addProcessedElement: function addProcessedElement(elem, pos) {\n      var elements = this.processedElements;\n      var i = elements.length;\n\n      while (i) {\n        i -= 1;\n\n        if (elements[i].elem === elem) {\n          elements[i].pos = pos;\n          return;\n        }\n      }\n\n      elements.push(new ProcessedElement(elem, pos));\n    },\n    prepareFrame: function prepareFrame(num) {\n      this.prepareRenderableFrame(num);\n      this.prepareProperties(num, this.isInRange);\n    }\n  };\n\n  var lineCapEnum = {\n    1: 'butt',\n    2: 'round',\n    3: 'square'\n  };\n  var lineJoinEnum = {\n    1: 'miter',\n    2: 'round',\n    3: 'bevel'\n  };\n\n  function SVGShapeData(transformers, level, shape) {\n    this.caches = [];\n    this.styles = [];\n    this.transformers = transformers;\n    this.lStr = '';\n    this.sh = shape;\n    this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n    // For now, since shapes add up with other shapes. They have to be calculated every time.\n    // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n    this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n    var i = 0;\n    var len = transformers.length;\n\n    while (i < len) {\n      if (transformers[i].mProps.dynamicProperties.length) {\n        this._isAnimated = true;\n        break;\n      }\n\n      i += 1;\n    }\n  }\n\n  SVGShapeData.prototype.setAsAnimated = function () {\n    this._isAnimated = true;\n  };\n\n  function SVGStyleData(data, level) {\n    this.data = data;\n    this.type = data.ty;\n    this.d = '';\n    this.lvl = level;\n    this._mdf = false;\n    this.closed = data.hd === true;\n    this.pElem = createNS('path');\n    this.msElem = null;\n  }\n\n  SVGStyleData.prototype.reset = function () {\n    this.d = '';\n    this._mdf = false;\n  };\n\n  function DashProperty(elem, data, renderer, container) {\n    this.elem = elem;\n    this.frameId = -1;\n    this.dataProps = createSizedArray(data.length);\n    this.renderer = renderer;\n    this.k = false;\n    this.dashStr = '';\n    this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n    this.dashoffset = createTypedArray('float32', 1);\n    this.initDynamicPropertyContainer(container);\n    var i;\n    var len = data.length || 0;\n    var prop;\n\n    for (i = 0; i < len; i += 1) {\n      prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n      this.k = prop.k || this.k;\n      this.dataProps[i] = {\n        n: data[i].n,\n        p: prop\n      };\n    }\n\n    if (!this.k) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = this.k;\n  }\n\n  DashProperty.prototype.getValue = function (forceRender) {\n    if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n    this._mdf = this._mdf || forceRender;\n\n    if (this._mdf) {\n      var i = 0;\n      var len = this.dataProps.length;\n\n      if (this.renderer === 'svg') {\n        this.dashStr = '';\n      }\n\n      for (i = 0; i < len; i += 1) {\n        if (this.dataProps[i].n !== 'o') {\n          if (this.renderer === 'svg') {\n            this.dashStr += ' ' + this.dataProps[i].p.v;\n          } else {\n            this.dashArray[i] = this.dataProps[i].p.v;\n          }\n        } else {\n          this.dashoffset[0] = this.dataProps[i].p.v;\n        }\n      }\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], DashProperty);\n\n  function SVGStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n  function SVGFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n  function SVGNoStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n  function GradientProperty(elem, data, container) {\n    this.data = data;\n    this.c = createTypedArray('uint8c', data.p * 4);\n    var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n    this.o = createTypedArray('float32', cLength);\n    this._cmdf = false;\n    this._omdf = false;\n    this._collapsable = this.checkCollapsable();\n    this._hasOpacity = cLength;\n    this.initDynamicPropertyContainer(container);\n    this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n    this.k = this.prop.k;\n    this.getValue(true);\n  }\n\n  GradientProperty.prototype.comparePoints = function (values, points) {\n    var i = 0;\n    var len = this.o.length / 2;\n    var diff;\n\n    while (i < len) {\n      diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n      if (diff > 0.01) {\n        return false;\n      }\n\n      i += 1;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.checkCollapsable = function () {\n    if (this.o.length / 2 !== this.c.length / 4) {\n      return false;\n    }\n\n    if (this.data.k.k[0].s) {\n      var i = 0;\n      var len = this.data.k.k.length;\n\n      while (i < len) {\n        if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n          return false;\n        }\n\n        i += 1;\n      }\n    } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n      return false;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.getValue = function (forceRender) {\n    this.prop.getValue();\n    this._mdf = false;\n    this._cmdf = false;\n    this._omdf = false;\n\n    if (this.prop._mdf || forceRender) {\n      var i;\n      var len = this.data.p * 4;\n      var mult;\n      var val;\n\n      for (i = 0; i < len; i += 1) {\n        mult = i % 4 === 0 ? 100 : 255;\n        val = Math.round(this.prop.v[i] * mult);\n\n        if (this.c[i] !== val) {\n          this.c[i] = val;\n          this._cmdf = !forceRender;\n        }\n      }\n\n      if (this.o.length) {\n        len = this.prop.v.length;\n\n        for (i = this.data.p * 4; i < len; i += 1) {\n          mult = i % 2 === 0 ? 100 : 1;\n          val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n          if (this.o[i - this.data.p * 4] !== val) {\n            this.o[i - this.data.p * 4] = val;\n            this._omdf = !forceRender;\n          }\n        }\n      }\n\n      this._mdf = !forceRender;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n  function SVGGradientFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.initGradientData(elem, data, styleOb);\n  }\n\n  SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n    this.h = PropertyFactory.getProp(elem, data.h || {\n      k: 0\n    }, 0, 0.01, this);\n    this.a = PropertyFactory.getProp(elem, data.a || {\n      k: 0\n    }, 0, degToRads, this);\n    this.g = new GradientProperty(elem, data.g, this);\n    this.style = styleOb;\n    this.stops = [];\n    this.setGradientData(styleOb.pElem, data);\n    this.setGradientOpacity(data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n    var gradientId = createElementID();\n    var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n    gfill.setAttribute('id', gradientId);\n    gfill.setAttribute('spreadMethod', 'pad');\n    gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n    var stops = [];\n    var stop;\n    var j;\n    var jLen;\n    jLen = data.g.p * 4;\n\n    for (j = 0; j < jLen; j += 4) {\n      stop = createNS('stop');\n      gfill.appendChild(stop);\n      stops.push(stop);\n    }\n\n    pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n    this.gf = gfill;\n    this.cst = stops;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n    if (this.g._hasOpacity && !this.g._collapsable) {\n      var stop;\n      var j;\n      var jLen;\n      var mask = createNS('mask');\n      var maskElement = createNS('path');\n      mask.appendChild(maskElement);\n      var opacityId = createElementID();\n      var maskId = createElementID();\n      mask.setAttribute('id', maskId);\n      var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n      opFill.setAttribute('id', opacityId);\n      opFill.setAttribute('spreadMethod', 'pad');\n      opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n      jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n      var stops = this.stops;\n\n      for (j = data.g.p * 4; j < jLen; j += 2) {\n        stop = createNS('stop');\n        stop.setAttribute('stop-color', 'rgb(255,255,255)');\n        opFill.appendChild(stop);\n        stops.push(stop);\n      }\n\n      maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n      if (data.ty === 'gs') {\n        maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n        maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n        if (data.lj === 1) {\n          maskElement.setAttribute('stroke-miterlimit', data.ml);\n        }\n      }\n\n      this.of = opFill;\n      this.ms = mask;\n      this.ost = stops;\n      this.maskId = maskId;\n      styleOb.msElem = maskElement;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n  function SVGGradientStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.initGradientData(elem, data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n  function ShapeGroupData() {\n    this.it = [];\n    this.prevViewData = [];\n    this.gr = createNS('g');\n  }\n\n  function SVGTransformData(mProps, op, container) {\n    this.transform = {\n      mProps: mProps,\n      op: op,\n      container: container\n    };\n    this.elements = [];\n    this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n  }\n\n  var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n    if (length === 0) {\n      return '';\n    }\n\n    var _o = pathNodes.o;\n    var _i = pathNodes.i;\n    var _v = pathNodes.v;\n    var i;\n    var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n    for (i = 1; i < length; i += 1) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n    }\n\n    if (closed && length) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n      shapeString += 'z';\n    }\n\n    return shapeString;\n  };\n\n  var SVGElementsRenderer = function () {\n    var _identityMatrix = new Matrix();\n\n    var _matrixHelper = new Matrix();\n\n    var ob = {\n      createRenderFunction: createRenderFunction\n    };\n\n    function createRenderFunction(data) {\n      switch (data.ty) {\n        case 'fl':\n          return renderFill;\n\n        case 'gf':\n          return renderGradient;\n\n        case 'gs':\n          return renderGradientStroke;\n\n        case 'st':\n          return renderStroke;\n\n        case 'sh':\n        case 'el':\n        case 'rc':\n        case 'sr':\n          return renderPath;\n\n        case 'tr':\n          return renderContentTransform;\n\n        case 'no':\n          return renderNoop;\n\n        default:\n          return null;\n      }\n    }\n\n    function renderContentTransform(styleData, itemData, isFirstFrame) {\n      if (isFirstFrame || itemData.transform.op._mdf) {\n        itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n      }\n\n      if (isFirstFrame || itemData.transform.mProps._mdf) {\n        itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n      }\n    }\n\n    function renderNoop() {}\n\n    function renderPath(styleData, itemData, isFirstFrame) {\n      var j;\n      var jLen;\n      var pathStringTransformed;\n      var redraw;\n      var pathNodes;\n      var l;\n      var lLen = itemData.styles.length;\n      var lvl = itemData.lvl;\n      var paths;\n      var mat;\n      var iterations;\n      var k;\n\n      for (l = 0; l < lLen; l += 1) {\n        redraw = itemData.sh._mdf || isFirstFrame;\n\n        if (itemData.styles[l].lvl < lvl) {\n          mat = _matrixHelper.reset();\n          iterations = lvl - itemData.styles[l].lvl;\n          k = itemData.transformers.length - 1;\n\n          while (!redraw && iterations > 0) {\n            redraw = itemData.transformers[k].mProps._mdf || redraw;\n            iterations -= 1;\n            k -= 1;\n          }\n\n          if (redraw) {\n            iterations = lvl - itemData.styles[l].lvl;\n            k = itemData.transformers.length - 1;\n\n            while (iterations > 0) {\n              mat.multiply(itemData.transformers[k].mProps.v);\n              iterations -= 1;\n              k -= 1;\n            }\n          }\n        } else {\n          mat = _identityMatrix;\n        }\n\n        paths = itemData.sh.paths;\n        jLen = paths._length;\n\n        if (redraw) {\n          pathStringTransformed = '';\n\n          for (j = 0; j < jLen; j += 1) {\n            pathNodes = paths.shapes[j];\n\n            if (pathNodes && pathNodes._length) {\n              pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n            }\n          }\n\n          itemData.caches[l] = pathStringTransformed;\n        } else {\n          pathStringTransformed = itemData.caches[l];\n        }\n\n        itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n        itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n      }\n    }\n\n    function renderFill(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n\n      if (itemData.c._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n      }\n    }\n\n    function renderGradientStroke(styleData, itemData, isFirstFrame) {\n      renderGradient(styleData, itemData, isFirstFrame);\n      renderStroke(styleData, itemData, isFirstFrame);\n    }\n\n    function renderGradient(styleData, itemData, isFirstFrame) {\n      var gfill = itemData.gf;\n      var hasOpacity = itemData.g._hasOpacity;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (itemData.o._mdf || isFirstFrame) {\n        var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n        itemData.style.pElem.setAttribute(attr, itemData.o.v);\n      }\n\n      if (itemData.s._mdf || isFirstFrame) {\n        var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n        var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n        gfill.setAttribute(attr1, pt1[0]);\n        gfill.setAttribute(attr2, pt1[1]);\n\n        if (hasOpacity && !itemData.g._collapsable) {\n          itemData.of.setAttribute(attr1, pt1[0]);\n          itemData.of.setAttribute(attr2, pt1[1]);\n        }\n      }\n\n      var stops;\n      var i;\n      var len;\n      var stop;\n\n      if (itemData.g._cmdf || isFirstFrame) {\n        stops = itemData.cst;\n        var cValues = itemData.g.c;\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n          stop.setAttribute('offset', cValues[i * 4] + '%');\n          stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n        }\n      }\n\n      if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n        var oValues = itemData.g.o;\n\n        if (itemData.g._collapsable) {\n          stops = itemData.cst;\n        } else {\n          stops = itemData.ost;\n        }\n\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n\n          if (!itemData.g._collapsable) {\n            stop.setAttribute('offset', oValues[i * 2] + '%');\n          }\n\n          stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n        }\n      }\n\n      if (styleData.t === 1) {\n        if (itemData.e._mdf || isFirstFrame) {\n          gfill.setAttribute('x2', pt2[0]);\n          gfill.setAttribute('y2', pt2[1]);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('x2', pt2[0]);\n            itemData.of.setAttribute('y2', pt2[1]);\n          }\n        }\n      } else {\n        var rad;\n\n        if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n          rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          gfill.setAttribute('r', rad);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('r', rad);\n          }\n        }\n\n        if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n          if (!rad) {\n            rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          }\n\n          var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n          var percent = itemData.h.v;\n\n          if (percent >= 1) {\n            percent = 0.99;\n          } else if (percent <= -1) {\n            percent = -0.99;\n          }\n\n          var dist = rad * percent;\n          var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n          var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n          gfill.setAttribute('fx', x);\n          gfill.setAttribute('fy', y);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('fx', x);\n            itemData.of.setAttribute('fy', y);\n          }\n        } // gfill.setAttribute('fy','200');\n\n      }\n    }\n\n    function renderStroke(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n      var d = itemData.d;\n\n      if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n        styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n        styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n      }\n\n      if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n        styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n      }\n\n      if (itemData.w._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n        if (styleElem.msElem) {\n          styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n        }\n      }\n    }\n\n    return ob;\n  }();\n\n  function SVGShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n  SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n  SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n  SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n  SVGShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n  };\n  /*\r\n  This method searches for multiple shapes that affect a single element and one of them is animated\r\n  */\n\n\n  SVGShapeElement.prototype.filterUniqueShapes = function () {\n    var i;\n    var len = this.shapes.length;\n    var shape;\n    var j;\n    var jLen = this.stylesList.length;\n    var style;\n    var tempShapes = [];\n    var areAnimated = false;\n\n    for (j = 0; j < jLen; j += 1) {\n      style = this.stylesList[j];\n      areAnimated = false;\n      tempShapes.length = 0;\n\n      for (i = 0; i < len; i += 1) {\n        shape = this.shapes[i];\n\n        if (shape.styles.indexOf(style) !== -1) {\n          tempShapes.push(shape);\n          areAnimated = shape._isAnimated || areAnimated;\n        }\n      }\n\n      if (tempShapes.length > 1 && areAnimated) {\n        this.setShapesAsAnimated(tempShapes);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n    var i;\n    var len = shapes.length;\n\n    for (i = 0; i < len; i += 1) {\n      shapes[i].setAsAnimated();\n    }\n  };\n\n  SVGShapeElement.prototype.createStyleElement = function (data, level) {\n    // TODO: prevent drawing of hidden styles\n    var elementData;\n    var styleOb = new SVGStyleData(data, level);\n    var pathElement = styleOb.pElem;\n\n    if (data.ty === 'st') {\n      elementData = new SVGStrokeStyleData(this, data, styleOb);\n    } else if (data.ty === 'fl') {\n      elementData = new SVGFillStyleData(this, data, styleOb);\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n      elementData = new GradientConstructor(this, data, styleOb);\n      this.globalData.defs.appendChild(elementData.gf);\n\n      if (elementData.maskId) {\n        this.globalData.defs.appendChild(elementData.ms);\n        this.globalData.defs.appendChild(elementData.of);\n        pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n      }\n    } else if (data.ty === 'no') {\n      elementData = new SVGNoStyleData(this, data, styleOb);\n    }\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n      pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n      pathElement.setAttribute('fill-opacity', '0');\n\n      if (data.lj === 1) {\n        pathElement.setAttribute('stroke-miterlimit', data.ml);\n      }\n    }\n\n    if (data.r === 2) {\n      pathElement.setAttribute('fill-rule', 'evenodd');\n    }\n\n    if (data.ln) {\n      pathElement.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      pathElement.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    this.stylesList.push(styleOb);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createGroupElement = function (data) {\n    var elementData = new ShapeGroupData();\n\n    if (data.ln) {\n      elementData.gr.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      elementData.gr.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createTransformElement = function (data, container) {\n    var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n    var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n    var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n    var i = 0;\n    var len = this.animatedContents.length;\n\n    while (i < len) {\n      if (this.animatedContents[i].element === element) {\n        return;\n      }\n\n      i += 1;\n    }\n\n    this.animatedContents.push({\n      fn: SVGElementsRenderer.createRenderFunction(data),\n      element: element,\n      data: data\n    });\n  };\n\n  SVGShapeElement.prototype.setElementStyles = function (elementData) {\n    var arr = elementData.styles;\n    var j;\n    var jLen = this.stylesList.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      if (!this.stylesList[j].closed) {\n        arr.push(this.stylesList[j]);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n  };\n\n  SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n    var ownTransformers = [].concat(transformers);\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var currentTransform;\n    var modifier;\n    var processedPos;\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._render = render;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], level);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        if (arr[i]._render) {\n          if (itemsData[i].style.pElem.parentNode !== container) {\n            container.appendChild(itemsData[i].style.pElem);\n          }\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n        if (arr[i]._render) {\n          if (itemsData[i].gr.parentNode !== container) {\n            container.appendChild(itemsData[i].gr);\n          }\n        }\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          itemsData[i] = this.createTransformElement(arr[i], container);\n        }\n\n        currentTransform = itemsData[i].transform;\n        ownTransformers.push(currentTransform);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n        }\n\n        this.setElementStyles(itemsData[i]);\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          render = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    len = ownStyles.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownStyles[i].closed = true;\n    }\n\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  SVGShapeElement.prototype.renderInnerContent = function () {\n    this.renderModifiers();\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.stylesList[i].reset();\n    }\n\n    this.renderShape();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.stylesList[i]._mdf || this._isFirstFrame) {\n        if (this.stylesList[i].msElem) {\n          this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n          this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n        }\n\n        this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.renderShape = function () {\n    var i;\n    var len = this.animatedContents.length;\n    var animatedContent;\n\n    for (i = 0; i < len; i += 1) {\n      animatedContent = this.animatedContents[i];\n\n      if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n        animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.destroy = function () {\n    this.destroyBaseElement();\n    this.shapesData = null;\n    this.itemsData = null;\n  };\n\n  function LetterProps(o, sw, sc, fc, m, p) {\n    this.o = o;\n    this.sw = sw;\n    this.sc = sc;\n    this.fc = fc;\n    this.m = m;\n    this.p = p;\n    this._mdf = {\n      o: true,\n      sw: !!sw,\n      sc: !!sc,\n      fc: !!fc,\n      m: true,\n      p: true\n    };\n  }\n\n  LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n    this._mdf.o = false;\n    this._mdf.sw = false;\n    this._mdf.sc = false;\n    this._mdf.fc = false;\n    this._mdf.m = false;\n    this._mdf.p = false;\n    var updated = false;\n\n    if (this.o !== o) {\n      this.o = o;\n      this._mdf.o = true;\n      updated = true;\n    }\n\n    if (this.sw !== sw) {\n      this.sw = sw;\n      this._mdf.sw = true;\n      updated = true;\n    }\n\n    if (this.sc !== sc) {\n      this.sc = sc;\n      this._mdf.sc = true;\n      updated = true;\n    }\n\n    if (this.fc !== fc) {\n      this.fc = fc;\n      this._mdf.fc = true;\n      updated = true;\n    }\n\n    if (this.m !== m) {\n      this.m = m;\n      this._mdf.m = true;\n      updated = true;\n    }\n\n    if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n      this.p = p;\n      this._mdf.p = true;\n      updated = true;\n    }\n\n    return updated;\n  };\n\n  function TextProperty(elem, data) {\n    this._frameId = initialDefaultFrame;\n    this.pv = '';\n    this.v = '';\n    this.kf = false;\n    this._isFirstFrame = true;\n    this._mdf = false;\n\n    if (data.d && data.d.sid) {\n      data.d = elem.globalData.slotManager.getProp(data.d);\n    }\n\n    this.data = data;\n    this.elem = elem;\n    this.comp = this.elem.comp;\n    this.keysIndex = 0;\n    this.canResize = false;\n    this.minimumFontSize = 1;\n    this.effectsSequence = [];\n    this.currentData = {\n      ascent: 0,\n      boxWidth: this.defaultBoxWidth,\n      f: '',\n      fStyle: '',\n      fWeight: '',\n      fc: '',\n      j: '',\n      justifyOffset: '',\n      l: [],\n      lh: 0,\n      lineWidths: [],\n      ls: '',\n      of: '',\n      s: '',\n      sc: '',\n      sw: 0,\n      t: 0,\n      tr: 0,\n      sz: 0,\n      ps: null,\n      fillColorAnim: false,\n      strokeColorAnim: false,\n      strokeWidthAnim: false,\n      yOffset: 0,\n      finalSize: 0,\n      finalText: [],\n      finalLineHeight: 0,\n      __complete: false\n    };\n    this.copyData(this.currentData, this.data.d.k[0].s);\n\n    if (!this.searchProperty()) {\n      this.completeTextData(this.currentData);\n    }\n  }\n\n  TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n  TextProperty.prototype.copyData = function (obj, data) {\n    for (var s in data) {\n      if (Object.prototype.hasOwnProperty.call(data, s)) {\n        obj[s] = data[s];\n      }\n    }\n\n    return obj;\n  };\n\n  TextProperty.prototype.setCurrentData = function (data) {\n    if (!data.__complete) {\n      this.completeTextData(data);\n    }\n\n    this.currentData = data;\n    this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n    this._mdf = true;\n  };\n\n  TextProperty.prototype.searchProperty = function () {\n    return this.searchKeyframes();\n  };\n\n  TextProperty.prototype.searchKeyframes = function () {\n    this.kf = this.data.d.k.length > 1;\n\n    if (this.kf) {\n      this.addEffect(this.getKeyframeValue.bind(this));\n    }\n\n    return this.kf;\n  };\n\n  TextProperty.prototype.addEffect = function (effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.getValue = function (_finalValue) {\n    if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n      return;\n    }\n\n    this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n    var currentValue = this.currentData;\n    var currentIndex = this.keysIndex;\n\n    if (this.lock) {\n      this.setCurrentData(this.currentData);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = false;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n    for (i = 0; i < len; i += 1) {\n      // Checking if index changed to prevent creating a new object every time the expression updates.\n      if (currentIndex !== this.keysIndex) {\n        finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n      } else {\n        finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n      }\n    }\n\n    if (currentValue !== finalValue) {\n      this.setCurrentData(finalValue);\n    }\n\n    this.v = this.currentData;\n    this.pv = this.v;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  };\n\n  TextProperty.prototype.getKeyframeValue = function () {\n    var textKeys = this.data.d.k;\n    var frameNum = this.elem.comp.renderedFrame;\n    var i = 0;\n    var len = textKeys.length;\n\n    while (i <= len - 1) {\n      if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    if (this.keysIndex !== i) {\n      this.keysIndex = i;\n    }\n\n    return this.data.d.k[this.keysIndex].s;\n  };\n\n  TextProperty.prototype.buildFinalText = function (text) {\n    var charactersArray = [];\n    var i = 0;\n    var len = text.length;\n    var charCode;\n    var secondCharCode;\n    var shouldCombine = false;\n    var shouldCombineNext = false;\n    var currentChars = '';\n\n    while (i < len) {\n      shouldCombine = shouldCombineNext;\n      shouldCombineNext = false;\n      charCode = text.charCodeAt(i);\n      currentChars = text.charAt(i);\n\n      if (FontManager.isCombinedCharacter(charCode)) {\n        shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate)\n      } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n        if (FontManager.isRegionalFlag(text, i)) {\n          currentChars = text.substr(i, 14);\n        } else {\n          secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate)\n\n          if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n            if (FontManager.isModifier(charCode, secondCharCode)) {\n              currentChars = text.substr(i, 2);\n              shouldCombine = true;\n            } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n              currentChars = text.substr(i, 4);\n            } else {\n              currentChars = text.substr(i, 2);\n            }\n          }\n        }\n      } else if (charCode > 0xDBFF) {\n        secondCharCode = text.charCodeAt(i + 1);\n\n        if (FontManager.isVariationSelector(charCode)) {\n          shouldCombine = true;\n        }\n      } else if (FontManager.isZeroWidthJoiner(charCode)) {\n        shouldCombine = true;\n        shouldCombineNext = true;\n      }\n\n      if (shouldCombine) {\n        charactersArray[charactersArray.length - 1] += currentChars;\n        shouldCombine = false;\n      } else {\n        charactersArray.push(currentChars);\n      }\n\n      i += currentChars.length;\n    }\n\n    return charactersArray;\n  };\n\n  TextProperty.prototype.completeTextData = function (documentData) {\n    documentData.__complete = true;\n    var fontManager = this.elem.globalData.fontManager;\n    var data = this.data;\n    var letters = [];\n    var i;\n    var len;\n    var newLineFlag;\n    var index = 0;\n    var val;\n    var anchorGrouping = data.m.g;\n    var currentSize = 0;\n    var currentPos = 0;\n    var currentLine = 0;\n    var lineWidths = [];\n    var lineWidth = 0;\n    var maxLineWidth = 0;\n    var j;\n    var jLen;\n    var fontData = fontManager.getFontByName(documentData.f);\n    var charData;\n    var cLength = 0;\n    var fontProps = getFontProperties(fontData);\n    documentData.fWeight = fontProps.weight;\n    documentData.fStyle = fontProps.style;\n    documentData.finalSize = documentData.s;\n    documentData.finalText = this.buildFinalText(documentData.t);\n    len = documentData.finalText.length;\n    documentData.finalLineHeight = documentData.lh;\n    var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n    var charCode;\n\n    if (documentData.sz) {\n      var flag = true;\n      var boxWidth = documentData.sz[0];\n      var boxHeight = documentData.sz[1];\n      var currentHeight;\n      var finalText;\n\n      while (flag) {\n        finalText = this.buildFinalText(documentData.t);\n        currentHeight = 0;\n        lineWidth = 0;\n        len = finalText.length;\n        trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n        var lastSpaceIndex = -1;\n\n        for (i = 0; i < len; i += 1) {\n          charCode = finalText[i].charCodeAt(0);\n          newLineFlag = false;\n\n          if (finalText[i] === ' ') {\n            lastSpaceIndex = i;\n          } else if (charCode === 13 || charCode === 3) {\n            lineWidth = 0;\n            newLineFlag = true;\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n          }\n\n          if (fontManager.chars) {\n            charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n            cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n          } else {\n            // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n            cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n          }\n\n          if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n            if (lastSpaceIndex === -1) {\n              len += 1;\n            } else {\n              i = lastSpaceIndex;\n            }\n\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n            finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n            lastSpaceIndex = -1;\n            lineWidth = 0;\n          } else {\n            lineWidth += cLength;\n            lineWidth += trackingOffset;\n          }\n        }\n\n        currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n        if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n          documentData.finalSize -= 1;\n          documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n        } else {\n          documentData.finalText = finalText;\n          len = documentData.finalText.length;\n          flag = false;\n        }\n      }\n    }\n\n    lineWidth = -trackingOffset;\n    cLength = 0;\n    var uncollapsedSpaces = 0;\n    var currentChar;\n\n    for (i = 0; i < len; i += 1) {\n      newLineFlag = false;\n      currentChar = documentData.finalText[i];\n      charCode = currentChar.charCodeAt(0);\n\n      if (charCode === 13 || charCode === 3) {\n        uncollapsedSpaces = 0;\n        lineWidths.push(lineWidth);\n        maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n        lineWidth = -2 * trackingOffset;\n        val = '';\n        newLineFlag = true;\n        currentLine += 1;\n      } else {\n        val = currentChar;\n      }\n\n      if (fontManager.chars) {\n        charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n        cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n      } else {\n        // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n        // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n        cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n      } //\n\n\n      if (currentChar === ' ') {\n        uncollapsedSpaces += cLength + trackingOffset;\n      } else {\n        lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n        uncollapsedSpaces = 0;\n      }\n\n      letters.push({\n        l: cLength,\n        an: cLength,\n        add: currentSize,\n        n: newLineFlag,\n        anIndexes: [],\n        val: val,\n        line: currentLine,\n        animatorJustifyOffset: 0\n      });\n\n      if (anchorGrouping == 2) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || val === ' ' || i === len - 1) {\n          if (val === '' || val === ' ') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          index += 1;\n          currentSize = 0;\n        }\n      } else if (anchorGrouping == 3) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || i === len - 1) {\n          if (val === '') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          currentSize = 0;\n          index += 1;\n        }\n      } else {\n        letters[index].ind = index;\n        letters[index].extra = 0;\n        index += 1;\n      }\n    }\n\n    documentData.l = letters;\n    maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n    lineWidths.push(lineWidth);\n\n    if (documentData.sz) {\n      documentData.boxWidth = documentData.sz[0];\n      documentData.justifyOffset = 0;\n    } else {\n      documentData.boxWidth = maxLineWidth;\n\n      switch (documentData.j) {\n        case 1:\n          documentData.justifyOffset = -documentData.boxWidth;\n          break;\n\n        case 2:\n          documentData.justifyOffset = -documentData.boxWidth / 2;\n          break;\n\n        default:\n          documentData.justifyOffset = 0;\n      }\n    }\n\n    documentData.lineWidths = lineWidths;\n    var animators = data.a;\n    var animatorData;\n    var letterData;\n    jLen = animators.length;\n    var based;\n    var ind;\n    var indexes = [];\n\n    for (j = 0; j < jLen; j += 1) {\n      animatorData = animators[j];\n\n      if (animatorData.a.sc) {\n        documentData.strokeColorAnim = true;\n      }\n\n      if (animatorData.a.sw) {\n        documentData.strokeWidthAnim = true;\n      }\n\n      if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n        documentData.fillColorAnim = true;\n      }\n\n      ind = 0;\n      based = animatorData.s.b;\n\n      for (i = 0; i < len; i += 1) {\n        letterData = letters[i];\n        letterData.anIndexes[j] = ind;\n\n        if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n          // eslint-disable-line eqeqeq\n          if (animatorData.s.rn === 1) {\n            indexes.push(ind);\n          }\n\n          ind += 1;\n        }\n      }\n\n      data.a[j].s.totalChars = ind;\n      var currentInd = -1;\n      var newInd;\n\n      if (animatorData.s.rn === 1) {\n        for (i = 0; i < len; i += 1) {\n          letterData = letters[i];\n\n          if (currentInd != letterData.anIndexes[j]) {\n            // eslint-disable-line eqeqeq\n            currentInd = letterData.anIndexes[j];\n            newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n          }\n\n          letterData.anIndexes[j] = newInd;\n        }\n      }\n    }\n\n    documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n    documentData.ls = documentData.ls || 0;\n    documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n  };\n\n  TextProperty.prototype.updateDocumentData = function (newData, index) {\n    index = index === undefined ? this.keysIndex : index;\n    var dData = this.copyData({}, this.data.d.k[index].s);\n    dData = this.copyData(dData, newData);\n    this.data.d.k[index].s = dData;\n    this.recalculate(index);\n    this.setCurrentData(dData);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.recalculate = function (index) {\n    var dData = this.data.d.k[index].s;\n    dData.__complete = false;\n    this.keysIndex = 0;\n    this._isFirstFrame = true;\n    this.getValue(dData);\n  };\n\n  TextProperty.prototype.canResizeFont = function (_canResize) {\n    this.canResize = _canResize;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n    this.minimumFontSize = Math.floor(_fontValue) || 1;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  var TextSelectorProp = function () {\n    var max = Math.max;\n    var min = Math.min;\n    var floor = Math.floor;\n\n    function TextSelectorPropFactory(elem, data) {\n      this._currentTextLength = -1;\n      this.k = false;\n      this.data = data;\n      this.elem = elem;\n      this.comp = elem.comp;\n      this.finalS = 0;\n      this.finalE = 0;\n      this.initDynamicPropertyContainer(elem);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: 0\n      }, 0, 0, this);\n\n      if ('e' in data) {\n        this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n      } else {\n        this.e = {\n          v: 100\n        };\n      }\n\n      this.o = PropertyFactory.getProp(elem, data.o || {\n        k: 0\n      }, 0, 0, this);\n      this.xe = PropertyFactory.getProp(elem, data.xe || {\n        k: 0\n      }, 0, 0, this);\n      this.ne = PropertyFactory.getProp(elem, data.ne || {\n        k: 0\n      }, 0, 0, this);\n      this.sm = PropertyFactory.getProp(elem, data.sm || {\n        k: 100\n      }, 0, 0, this);\n      this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n      if (!this.dynamicProperties.length) {\n        this.getValue();\n      }\n    }\n\n    TextSelectorPropFactory.prototype = {\n      getMult: function getMult(ind) {\n        if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n          this.getValue();\n        }\n\n        var x1 = 0;\n        var y1 = 0;\n        var x2 = 1;\n        var y2 = 1;\n\n        if (this.ne.v > 0) {\n          x1 = this.ne.v / 100.0;\n        } else {\n          y1 = -this.ne.v / 100.0;\n        }\n\n        if (this.xe.v > 0) {\n          x2 = 1.0 - this.xe.v / 100.0;\n        } else {\n          y2 = 1.0 + this.xe.v / 100.0;\n        }\n\n        var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n        var mult = 0;\n        var s = this.finalS;\n        var e = this.finalE;\n        var type = this.data.sh;\n\n        if (type === 2) {\n          if (e === s) {\n            mult = ind >= e ? 1 : 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 3) {\n          if (e === s) {\n            mult = ind >= e ? 0 : 1;\n          } else {\n            mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 4) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n            if (mult < 0.5) {\n              mult *= 2;\n            } else {\n              mult = 1 - 2 * (mult - 0.5);\n            }\n          }\n\n          mult = easer(mult);\n        } else if (type === 5) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            var tot = e - s;\n            /* ind += 0.5;\r\n                      mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            var x = -tot / 2 + ind;\n            var a = tot / 2;\n            mult = Math.sqrt(1 - x * x / (a * a));\n          }\n\n          mult = easer(mult);\n        } else if (type === 6) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n          }\n\n          mult = easer(mult);\n        } else {\n          if (ind >= floor(s)) {\n            if (ind - s < 0) {\n              mult = max(0, min(min(e, 1) - (s - ind), 1));\n            } else {\n              mult = max(0, min(e - ind, 1));\n            }\n          }\n\n          mult = easer(mult);\n        } // Smoothness implementation.\n        // The smoothness represents a reduced range of the original [0; 1] range.\n        // if smoothness is 25%, the new range will be [0.375; 0.625]\n        // Steps are:\n        // - find the lower value of the new range (threshold)\n        // - if multiplier is smaller than that value, floor it to 0\n        // - if it is larger,\n        //     - subtract the threshold\n        //     - divide it by the smoothness (this will return the range to [0; 1])\n        // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n        if (this.sm.v !== 100) {\n          var smoothness = this.sm.v * 0.01;\n\n          if (smoothness === 0) {\n            smoothness = 0.00000001;\n          }\n\n          var threshold = 0.5 - smoothness * 0.5;\n\n          if (mult < threshold) {\n            mult = 0;\n          } else {\n            mult = (mult - threshold) / smoothness;\n\n            if (mult > 1) {\n              mult = 1;\n            }\n          }\n        }\n\n        return mult * this.a.v;\n      },\n      getValue: function getValue(newCharsFlag) {\n        this.iterateDynamicProperties();\n        this._mdf = newCharsFlag || this._mdf;\n        this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n        if (newCharsFlag && this.data.r === 2) {\n          this.e.v = this._currentTextLength;\n        }\n\n        var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n        var o = this.o.v / divisor;\n        var s = this.s.v / divisor + o;\n        var e = this.e.v / divisor + o;\n\n        if (s > e) {\n          var _s = s;\n          s = e;\n          e = _s;\n        }\n\n        this.finalS = s;\n        this.finalE = e;\n      }\n    };\n    extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n    function getTextSelectorProp(elem, data, arr) {\n      return new TextSelectorPropFactory(elem, data, arr);\n    }\n\n    return {\n      getTextSelectorProp: getTextSelectorProp\n    };\n  }();\n\n  function TextAnimatorDataProperty(elem, animatorProps, container) {\n    var defaultData = {\n      propType: false\n    };\n    var getProp = PropertyFactory.getProp;\n    var textAnimatorAnimatables = animatorProps.a;\n    this.a = {\n      r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n      rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n      ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n      sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n      sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n      s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n      a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n      o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n      p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n      sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n      sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n      fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n      fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n      fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n      fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n      t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n    };\n    this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n    this.s.t = animatorProps.s.t;\n  }\n\n  function TextAnimatorProperty(textData, renderType, elem) {\n    this._isFirstFrame = true;\n    this._hasMaskedPath = false;\n    this._frameId = -1;\n    this._textData = textData;\n    this._renderType = renderType;\n    this._elem = elem;\n    this._animatorsData = createSizedArray(this._textData.a.length);\n    this._pathData = {};\n    this._moreOptions = {\n      alignment: {}\n    };\n    this.renderedLetters = [];\n    this.lettersChangedFlag = false;\n    this.initDynamicPropertyContainer(elem);\n  }\n\n  TextAnimatorProperty.prototype.searchProperties = function () {\n    var i;\n    var len = this._textData.a.length;\n    var animatorProps;\n    var getProp = PropertyFactory.getProp;\n\n    for (i = 0; i < len; i += 1) {\n      animatorProps = this._textData.a[i];\n      this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n    }\n\n    if (this._textData.p && 'm' in this._textData.p) {\n      this._pathData = {\n        a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n        f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n        l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n        r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n        p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n        m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n      };\n      this._hasMaskedPath = true;\n    } else {\n      this._hasMaskedPath = false;\n    }\n\n    this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n  };\n\n  TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n    this.lettersChangedFlag = lettersChangedFlag;\n\n    if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n      return;\n    }\n\n    this._isFirstFrame = false;\n    var alignment = this._moreOptions.alignment.v;\n    var animators = this._animatorsData;\n    var textData = this._textData;\n    var matrixHelper = this.mHelper;\n    var renderType = this._renderType;\n    var renderedLettersCount = this.renderedLetters.length;\n    var xPos;\n    var yPos;\n    var i;\n    var len;\n    var letters = documentData.l;\n    var pathInfo;\n    var currentLength;\n    var currentPoint;\n    var segmentLength;\n    var flag;\n    var pointInd;\n    var segmentInd;\n    var prevPoint;\n    var points;\n    var segments;\n    var partialLength;\n    var totalLength;\n    var perc;\n    var tanAngle;\n    var mask;\n\n    if (this._hasMaskedPath) {\n      mask = this._pathData.m;\n\n      if (!this._pathData.n || this._pathData._mdf) {\n        var paths = mask.v;\n\n        if (this._pathData.r.v) {\n          paths = paths.reverse();\n        } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n        pathInfo = {\n          tLength: 0,\n          segments: []\n        };\n        len = paths._length - 1;\n        var bezierData;\n        totalLength = 0;\n\n        for (i = 0; i < len; i += 1) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        i = len;\n\n        if (mask.v.c) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        this._pathData.pi = pathInfo;\n      }\n\n      pathInfo = this._pathData.pi;\n      currentLength = this._pathData.f.v;\n      segmentInd = 0;\n      pointInd = 1;\n      segmentLength = 0;\n      flag = true;\n      segments = pathInfo.segments;\n\n      if (currentLength < 0 && mask.v.c) {\n        if (pathInfo.tLength < Math.abs(currentLength)) {\n          currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n        }\n\n        segmentInd = segments.length - 1;\n        points = segments[segmentInd].points;\n        pointInd = points.length - 1;\n\n        while (currentLength < 0) {\n          currentLength += points[pointInd].partialLength;\n          pointInd -= 1;\n\n          if (pointInd < 0) {\n            segmentInd -= 1;\n            points = segments[segmentInd].points;\n            pointInd = points.length - 1;\n          }\n        }\n      }\n\n      points = segments[segmentInd].points;\n      prevPoint = points[pointInd - 1];\n      currentPoint = points[pointInd];\n      partialLength = currentPoint.partialLength;\n    }\n\n    len = letters.length;\n    xPos = 0;\n    yPos = 0;\n    var yOff = documentData.finalSize * 1.2 * 0.714;\n    var firstLine = true;\n    var animatorProps;\n    var animatorSelector;\n    var j;\n    var jLen;\n    var letterValue;\n    jLen = animators.length;\n    var mult;\n    var ind = -1;\n    var offf;\n    var xPathPos;\n    var yPathPos;\n    var initPathPos = currentLength;\n    var initSegmentInd = segmentInd;\n    var initPointInd = pointInd;\n    var currentLine = -1;\n    var elemOpacity;\n    var sc;\n    var sw;\n    var fc;\n    var k;\n    var letterSw;\n    var letterSc;\n    var letterFc;\n    var letterM = '';\n    var letterP = this.defaultPropsArray;\n    var letterO; //\n\n    if (documentData.j === 2 || documentData.j === 1) {\n      var animatorJustifyOffset = 0;\n      var animatorFirstCharOffset = 0;\n      var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n      var lastIndex = 0;\n      var isNewLine = true;\n\n      for (i = 0; i < len; i += 1) {\n        if (letters[i].n) {\n          if (animatorJustifyOffset) {\n            animatorJustifyOffset += animatorFirstCharOffset;\n          }\n\n          while (lastIndex < i) {\n            letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n            lastIndex += 1;\n          }\n\n          animatorJustifyOffset = 0;\n          isNewLine = true;\n        } else {\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.t.propType) {\n              if (isNewLine && documentData.j === 2) {\n                animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n              }\n\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n              } else {\n                animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n              }\n            }\n          }\n\n          isNewLine = false;\n        }\n      }\n\n      if (animatorJustifyOffset) {\n        animatorJustifyOffset += animatorFirstCharOffset;\n      }\n\n      while (lastIndex < i) {\n        letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n        lastIndex += 1;\n      }\n    } //\n\n\n    for (i = 0; i < len; i += 1) {\n      matrixHelper.reset();\n      elemOpacity = 1;\n\n      if (letters[i].n) {\n        xPos = 0;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        currentLength = initPathPos;\n        firstLine = false;\n\n        if (this._hasMaskedPath) {\n          segmentInd = initSegmentInd;\n          pointInd = initPointInd;\n          points = segments[segmentInd].points;\n          prevPoint = points[pointInd - 1];\n          currentPoint = points[pointInd];\n          partialLength = currentPoint.partialLength;\n          segmentLength = 0;\n        }\n\n        letterM = '';\n        letterFc = '';\n        letterSw = '';\n        letterO = '';\n        letterP = this.defaultPropsArray;\n      } else {\n        if (this._hasMaskedPath) {\n          if (currentLine !== letters[i].line) {\n            switch (documentData.j) {\n              case 1:\n                currentLength += totalLength - documentData.lineWidths[letters[i].line];\n                break;\n\n              case 2:\n                currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n                break;\n\n              default:\n                break;\n            }\n\n            currentLine = letters[i].line;\n          }\n\n          if (ind !== letters[i].ind) {\n            if (letters[ind]) {\n              currentLength += letters[ind].extra;\n            }\n\n            currentLength += letters[i].an / 2;\n            ind = letters[i].ind;\n          }\n\n          currentLength += alignment[0] * letters[i].an * 0.005;\n          var animatorOffset = 0;\n\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.p.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.p.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.p.v[0] * mult;\n              }\n            }\n\n            if (animatorProps.a.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.a.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.a.v[0] * mult;\n              }\n            }\n          }\n\n          flag = true; // Force alignment only works with a single line for now\n\n          if (this._pathData.a.v) {\n            currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n            currentLength += this._pathData.f.v;\n          }\n\n          while (flag) {\n            if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n              perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n              xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n              yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n              matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n              flag = false;\n            } else if (points) {\n              segmentLength += currentPoint.partialLength;\n              pointInd += 1;\n\n              if (pointInd >= points.length) {\n                pointInd = 0;\n                segmentInd += 1;\n\n                if (!segments[segmentInd]) {\n                  if (mask.v.c) {\n                    pointInd = 0;\n                    segmentInd = 0;\n                    points = segments[segmentInd].points;\n                  } else {\n                    segmentLength -= currentPoint.partialLength;\n                    points = null;\n                  }\n                } else {\n                  points = segments[segmentInd].points;\n                }\n              }\n\n              if (points) {\n                prevPoint = currentPoint;\n                currentPoint = points[pointInd];\n                partialLength = currentPoint.partialLength;\n              }\n            }\n          }\n\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0);\n        } else {\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n          matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.t.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n            if (xPos !== 0 || documentData.j !== 0) {\n              if (this._hasMaskedPath) {\n                if (mult.length) {\n                  currentLength += animatorProps.t.v * mult[0];\n                } else {\n                  currentLength += animatorProps.t.v * mult;\n                }\n              } else if (mult.length) {\n                xPos += animatorProps.t.v * mult[0];\n              } else {\n                xPos += animatorProps.t.v * mult;\n              }\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          sw = documentData.sw || 0;\n        }\n\n        if (documentData.strokeColorAnim) {\n          if (documentData.sc) {\n            sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n          } else {\n            sc = [0, 0, 0];\n          }\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.a.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.s.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n            } else {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          animatorSelector = animators[j].s;\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n          if (animatorProps.sk.propType) {\n            if (mult.length) {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n            } else {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n            }\n          }\n\n          if (animatorProps.r.propType) {\n            if (mult.length) {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n            } else {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult);\n            }\n          }\n\n          if (animatorProps.ry.propType) {\n            if (mult.length) {\n              matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n            } else {\n              matrixHelper.rotateY(animatorProps.ry.v * mult);\n            }\n          }\n\n          if (animatorProps.rx.propType) {\n            if (mult.length) {\n              matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n            } else {\n              matrixHelper.rotateX(animatorProps.rx.v * mult);\n            }\n          }\n\n          if (animatorProps.o.propType) {\n            if (mult.length) {\n              elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n            } else {\n              elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n            }\n          }\n\n          if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n            if (mult.length) {\n              sw += animatorProps.sw.v * mult[0];\n            } else {\n              sw += animatorProps.sw.v * mult;\n            }\n          }\n\n          if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n            for (k = 0; k < 3; k += 1) {\n              if (mult.length) {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n              } else {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n              }\n            }\n          }\n\n          if (documentData.fillColorAnim && documentData.fc) {\n            if (animatorProps.fc.propType) {\n              for (k = 0; k < 3; k += 1) {\n                if (mult.length) {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n                } else {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n                }\n              }\n            }\n\n            if (animatorProps.fh.propType) {\n              if (mult.length) {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n              } else {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n              }\n            }\n\n            if (animatorProps.fs.propType) {\n              if (mult.length) {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n              } else {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n              }\n            }\n\n            if (animatorProps.fb.propType) {\n              if (mult.length) {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n              } else {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n              }\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.p.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (this._hasMaskedPath) {\n              if (mult.length) {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n              } else {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n              }\n            } else if (mult.length) {\n              matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          letterSw = sw < 0 ? 0 : sw;\n        }\n\n        if (documentData.strokeColorAnim) {\n          letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n        }\n\n        if (this._hasMaskedPath) {\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n          if (this._pathData.p.v) {\n            tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n            var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n            if (currentPoint.point[0] < prevPoint.point[0]) {\n              rot += 180;\n            }\n\n            matrixHelper.rotate(-rot * Math.PI / 180);\n          }\n\n          matrixHelper.translate(xPathPos, yPathPos, 0);\n          currentLength -= alignment[0] * letters[i].an * 0.005;\n\n          if (letters[i + 1] && ind !== letters[i + 1].ind) {\n            currentLength += letters[i].an / 2;\n            currentLength += documentData.tr * 0.001 * documentData.finalSize;\n          }\n        } else {\n          matrixHelper.translate(xPos, yPos, 0);\n\n          if (documentData.ps) {\n            // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n            matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n          }\n\n          switch (documentData.j) {\n            case 1:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n              break;\n\n            case 2:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n              break;\n\n            default:\n              break;\n          }\n\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(offf, 0, 0);\n          matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n          xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n        }\n\n        if (renderType === 'html') {\n          letterM = matrixHelper.toCSS();\n        } else if (renderType === 'svg') {\n          letterM = matrixHelper.to2dCSS();\n        } else {\n          letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n        }\n\n        letterO = elemOpacity;\n      }\n\n      if (renderedLettersCount <= i) {\n        letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n        this.renderedLetters.push(letterValue);\n        renderedLettersCount += 1;\n        this.lettersChangedFlag = true;\n      } else {\n        letterValue = this.renderedLetters[i];\n        this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n      }\n    }\n  };\n\n  TextAnimatorProperty.prototype.getValue = function () {\n    if (this._elem.globalData.frameId === this._frameId) {\n      return;\n    }\n\n    this._frameId = this._elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  TextAnimatorProperty.prototype.mHelper = new Matrix();\n  TextAnimatorProperty.prototype.defaultPropsArray = [];\n  extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n  function ITextElement() {}\n\n  ITextElement.prototype.initElement = function (data, globalData, comp) {\n    this.lettersChangedFlag = true;\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n    this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n    this.initRenderable();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n    this.createContent();\n    this.hide();\n    this.textAnimator.searchProperties(this.dynamicProperties);\n  };\n\n  ITextElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n  };\n\n  ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n    var j;\n    var jLen = shapes.length;\n    var pathNodes;\n    var shapeStr = '';\n\n    for (j = 0; j < jLen; j += 1) {\n      if (shapes[j].ty === 'sh') {\n        pathNodes = shapes[j].ks.k;\n        shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n      }\n    }\n\n    return shapeStr;\n  };\n\n  ITextElement.prototype.updateDocumentData = function (newData, index) {\n    this.textProperty.updateDocumentData(newData, index);\n  };\n\n  ITextElement.prototype.canResizeFont = function (_canResize) {\n    this.textProperty.canResizeFont(_canResize);\n  };\n\n  ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n    this.textProperty.setMinimumFontSize(_fontSize);\n  };\n\n  ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n    if (documentData.ps) {\n      matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n    }\n\n    matrixHelper.translate(0, -documentData.ls, 0);\n\n    switch (documentData.j) {\n      case 1:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n        break;\n\n      case 2:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n        break;\n\n      default:\n        break;\n    }\n\n    matrixHelper.translate(xPos, yPos, 0);\n  };\n\n  ITextElement.prototype.buildColor = function (colorData) {\n    return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n  };\n\n  ITextElement.prototype.emptyProp = new LetterProps();\n\n  ITextElement.prototype.destroy = function () {};\n\n  ITextElement.prototype.validateText = function () {\n    if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n      this.buildNewText();\n      this.textProperty._isFirstFrame = false;\n      this.textProperty._mdf = false;\n    }\n  };\n\n  var emptyShapeData = {\n    shapes: []\n  };\n\n  function SVGTextLottieElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.renderType = 'svg';\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n  SVGTextLottieElement.prototype.createContent = function () {\n    if (this.data.singleShape && !this.globalData.fontManager.chars) {\n      this.textContainer = createNS('text');\n    }\n  };\n\n  SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n    var i = 0;\n    var len = textArray.length;\n    var textContents = [];\n    var currentTextContent = '';\n\n    while (i < len) {\n      if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n        textContents.push(currentTextContent);\n        currentTextContent = '';\n      } else {\n        currentTextContent += textArray[i];\n      }\n\n      i += 1;\n    }\n\n    textContents.push(currentTextContent);\n    return textContents;\n  };\n\n  SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n    // data should probably be cloned to apply scale separately to each instance of a text on different layers\n    // but since text internal content gets only rendered once and then it's never rerendered,\n    // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n    // Avoiding cloning is preferred since cloning each character shape data is expensive\n    if (data.shapes && data.shapes.length) {\n      var shape = data.shapes[0];\n\n      if (shape.it) {\n        var shapeItem = shape.it[shape.it.length - 1];\n\n        if (shapeItem.s) {\n          shapeItem.s.k[0] = scale;\n          shapeItem.s.k[1] = scale;\n        }\n      }\n    }\n\n    return data;\n  };\n\n  SVGTextLottieElement.prototype.buildNewText = function () {\n    this.addDynamicProperty(this);\n    var i;\n    var len;\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n    if (documentData.fc) {\n      this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n    } else {\n      this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n    }\n\n    if (documentData.sc) {\n      this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n      this.layerElement.setAttribute('stroke-width', documentData.sw);\n    }\n\n    this.layerElement.setAttribute('font-size', documentData.finalSize);\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (fontData.fClass) {\n      this.layerElement.setAttribute('class', fontData.fClass);\n    } else {\n      this.layerElement.setAttribute('font-family', fontData.fFamily);\n      var fWeight = documentData.fWeight;\n      var fStyle = documentData.fStyle;\n      this.layerElement.setAttribute('font-style', fStyle);\n      this.layerElement.setAttribute('font-weight', fWeight);\n    }\n\n    this.layerElement.setAttribute('aria-label', documentData.t);\n    var letters = documentData.l || [];\n    var usesGlyphs = !!this.globalData.fontManager.chars;\n    len = letters.length;\n    var tSpan;\n    var matrixHelper = this.mHelper;\n    var shapeStr = '';\n    var singleShape = this.data.singleShape;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n    if (singleShape && !usesGlyphs && !documentData.sz) {\n      var tElement = this.textContainer;\n      var justify = 'start';\n\n      switch (documentData.j) {\n        case 1:\n          justify = 'end';\n          break;\n\n        case 2:\n          justify = 'middle';\n          break;\n\n        default:\n          justify = 'start';\n          break;\n      }\n\n      tElement.setAttribute('text-anchor', justify);\n      tElement.setAttribute('letter-spacing', trackingOffset);\n      var textContent = this.buildTextContents(documentData.finalText);\n      len = textContent.length;\n      yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n      for (i = 0; i < len; i += 1) {\n        tSpan = this.textSpans[i].span || createNS('tspan');\n        tSpan.textContent = textContent[i];\n        tSpan.setAttribute('x', 0);\n        tSpan.setAttribute('y', yPos);\n        tSpan.style.display = 'inherit';\n        tElement.appendChild(tSpan);\n\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            glyph: null\n          };\n        }\n\n        this.textSpans[i].span = tSpan;\n        yPos += documentData.finalLineHeight;\n      }\n\n      this.layerElement.appendChild(tElement);\n    } else {\n      var cachedSpansLength = this.textSpans.length;\n      var charData;\n\n      for (i = 0; i < len; i += 1) {\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            childSpan: null,\n            glyph: null\n          };\n        }\n\n        if (!usesGlyphs || !singleShape || i === 0) {\n          tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n          if (cachedSpansLength <= i) {\n            tSpan.setAttribute('stroke-linecap', 'butt');\n            tSpan.setAttribute('stroke-linejoin', 'round');\n            tSpan.setAttribute('stroke-miterlimit', '4');\n            this.textSpans[i].span = tSpan;\n\n            if (usesGlyphs) {\n              var childSpan = createNS('g');\n              tSpan.appendChild(childSpan);\n              this.textSpans[i].childSpan = childSpan;\n            }\n\n            this.textSpans[i].span = tSpan;\n            this.layerElement.appendChild(tSpan);\n          }\n\n          tSpan.style.display = 'inherit';\n        }\n\n        matrixHelper.reset();\n\n        if (singleShape) {\n          if (letters[i].n) {\n            xPos = -trackingOffset;\n            yPos += documentData.yOffset;\n            yPos += firstLine ? 1 : 0;\n            firstLine = false;\n          }\n\n          this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n          xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n          xPos += trackingOffset;\n        }\n\n        if (usesGlyphs) {\n          charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n          var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n          if (charData.t === 1) {\n            glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n          } else {\n            var data = emptyShapeData;\n\n            if (charData.data && charData.data.shapes) {\n              data = this.buildShapeData(charData.data, documentData.finalSize);\n            }\n\n            glyphElement = new SVGShapeElement(data, this.globalData, this);\n          }\n\n          if (this.textSpans[i].glyph) {\n            var glyph = this.textSpans[i].glyph;\n            this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n            glyph.destroy();\n          }\n\n          this.textSpans[i].glyph = glyphElement;\n          glyphElement._debug = true;\n          glyphElement.prepareFrame(0);\n          glyphElement.renderFrame();\n          this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n          // this might have issues with strokes and might need a different solution\n\n          if (charData.t === 1) {\n            this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n          }\n        } else {\n          if (singleShape) {\n            tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n          }\n\n          tSpan.textContent = letters[i].val;\n          tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        } //\n\n      }\n\n      if (singleShape && tSpan) {\n        tSpan.setAttribute('d', shapeStr);\n      }\n    }\n\n    while (i < this.textSpans.length) {\n      this.textSpans[i].span.style.display = 'none';\n      i += 1;\n    }\n\n    this._sizeChanged = true;\n  };\n\n  SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n    this.prepareFrame(this.comp.renderedFrame - this.data.st);\n    this.renderInnerContent();\n\n    if (this._sizeChanged) {\n      this._sizeChanged = false;\n      var textBox = this.layerElement.getBBox();\n      this.bbox = {\n        top: textBox.y,\n        left: textBox.x,\n        width: textBox.width,\n        height: textBox.height\n      };\n    }\n\n    return this.bbox;\n  };\n\n  SVGTextLottieElement.prototype.getValue = function () {\n    var i;\n    var len = this.textSpans.length;\n    var glyphElement;\n    this.renderedFrame = this.comp.renderedFrame;\n\n    for (i = 0; i < len; i += 1) {\n      glyphElement = this.textSpans[i].glyph;\n\n      if (glyphElement) {\n        glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n        if (glyphElement._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  SVGTextLottieElement.prototype.renderInnerContent = function () {\n    this.validateText();\n\n    if (!this.data.singleShape || this._mdf) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n      if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n        this._sizeChanged = true;\n        var i;\n        var len;\n        var renderedLetters = this.textAnimator.renderedLetters;\n        var letters = this.textProperty.currentData.l;\n        len = letters.length;\n        var renderedLetter;\n        var textSpan;\n        var glyphElement;\n\n        for (i = 0; i < len; i += 1) {\n          if (!letters[i].n) {\n            renderedLetter = renderedLetters[i];\n            textSpan = this.textSpans[i].span;\n            glyphElement = this.textSpans[i].glyph;\n\n            if (glyphElement) {\n              glyphElement.renderFrame();\n            }\n\n            if (renderedLetter._mdf.m) {\n              textSpan.setAttribute('transform', renderedLetter.m);\n            }\n\n            if (renderedLetter._mdf.o) {\n              textSpan.setAttribute('opacity', renderedLetter.o);\n            }\n\n            if (renderedLetter._mdf.sw) {\n              textSpan.setAttribute('stroke-width', renderedLetter.sw);\n            }\n\n            if (renderedLetter._mdf.sc) {\n              textSpan.setAttribute('stroke', renderedLetter.sc);\n            }\n\n            if (renderedLetter._mdf.fc) {\n              textSpan.setAttribute('fill', renderedLetter.fc);\n            }\n          }\n        }\n      }\n    }\n  };\n\n  function ISolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([IImageElement], ISolidElement);\n\n  ISolidElement.prototype.createContent = function () {\n    var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n    /// /rect.style.height = this.data.sh;\n    /// /rect.style.fill = this.data.sc;\n\n    rect.setAttribute('width', this.data.sw);\n    rect.setAttribute('height', this.data.sh);\n    rect.setAttribute('fill', this.data.sc);\n    this.layerElement.appendChild(rect);\n  };\n\n  function NullElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initFrame();\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n  }\n\n  NullElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  NullElement.prototype.renderFrame = function () {};\n\n  NullElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  NullElement.prototype.destroy = function () {};\n\n  NullElement.prototype.sourceRectAtTime = function () {};\n\n  NullElement.prototype.hide = function () {};\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n  function SVGRendererBase() {}\n\n  extendPrototype([BaseRenderer], SVGRendererBase);\n\n  SVGRendererBase.prototype.createNull = function (data) {\n    return new NullElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createShape = function (data) {\n    return new SVGShapeElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createText = function (data) {\n    return new SVGTextLottieElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createImage = function (data) {\n    return new IImageElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createSolid = function (data) {\n    return new ISolidElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.configAnimation = function (animData) {\n    this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n    this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n    if (this.renderConfig.viewBoxSize) {\n      this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n    } else {\n      this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n    }\n\n    if (!this.renderConfig.viewBoxOnly) {\n      this.svgElement.setAttribute('width', animData.w);\n      this.svgElement.setAttribute('height', animData.h);\n      this.svgElement.style.width = '100%';\n      this.svgElement.style.height = '100%';\n      this.svgElement.style.transform = 'translate3d(0,0,0)';\n      this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n    }\n\n    if (this.renderConfig.width) {\n      this.svgElement.setAttribute('width', this.renderConfig.width);\n    }\n\n    if (this.renderConfig.height) {\n      this.svgElement.setAttribute('height', this.renderConfig.height);\n    }\n\n    if (this.renderConfig.className) {\n      this.svgElement.setAttribute('class', this.renderConfig.className);\n    }\n\n    if (this.renderConfig.id) {\n      this.svgElement.setAttribute('id', this.renderConfig.id);\n    }\n\n    if (this.renderConfig.focusable !== undefined) {\n      this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n    }\n\n    this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n    // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n    this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n    var defs = this.globalData.defs;\n    this.setupGlobalData(animData, defs);\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.data = animData;\n    var maskElement = createNS('clipPath');\n    var rect = createNS('rect');\n    rect.setAttribute('width', animData.w);\n    rect.setAttribute('height', animData.h);\n    rect.setAttribute('x', 0);\n    rect.setAttribute('y', 0);\n    var maskId = createElementID();\n    maskElement.setAttribute('id', maskId);\n    maskElement.appendChild(rect);\n    this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n    defs.appendChild(maskElement);\n    this.layers = animData.layers;\n    this.elements = createSizedArray(animData.layers.length);\n  };\n\n  SVGRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.layerElement = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  SVGRendererBase.prototype.updateContainerSize = function () {};\n\n  SVGRendererBase.prototype.findIndexByInd = function (ind) {\n    var i = 0;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ind === ind) {\n        return i;\n      }\n    }\n\n    return -1;\n  };\n\n  SVGRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    elements[pos] = true;\n    var element = this.createItem(this.layers[pos]);\n    elements[pos] = element;\n\n    if (getExpressionsPlugin()) {\n      if (this.layers[pos].ty === 0) {\n        this.globalData.projectInterface.registerComposition(element);\n      }\n\n      element.initExpressions();\n    }\n\n    this.appendElementInPos(element, pos);\n\n    if (this.layers[pos].tt) {\n      var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n\n      if (elementIndex === -1) {\n        return;\n      }\n\n      if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n        this.buildItem(elementIndex);\n        this.addPendingElement(element);\n      } else {\n        var matteElement = elements[elementIndex];\n        var matteMask = matteElement.getMatte(this.layers[pos].tt);\n        element.setMatte(matteMask);\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n\n      if (element.data.tt) {\n        var i = 0;\n        var len = this.elements.length;\n\n        while (i < len) {\n          if (this.elements[i] === element) {\n            var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n            var matteElement = this.elements[elementIndex];\n            var matteMask = matteElement.getMatte(this.layers[i].tt);\n            element.setMatte(matteMask);\n            break;\n          }\n\n          i += 1;\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.renderFrame = function (num) {\n    if (this.renderedFrame === num || this.destroyed) {\n      return;\n    }\n\n    if (num === null) {\n      num = this.renderedFrame;\n    } else {\n      this.renderedFrame = num;\n    } // console.log('-------');\n    // console.log('FRAME ',num);\n\n\n    this.globalData.frameNum = num;\n    this.globalData.frameId += 1;\n    this.globalData.projectInterface.currentFrame = num;\n    this.globalData._mdf = false;\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      for (i = 0; i < len; i += 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newElement = element.getBaseElement();\n\n    if (!newElement) {\n      return;\n    }\n\n    var i = 0;\n    var nextElement;\n\n    while (i < pos) {\n      if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n        nextElement = this.elements[i].getBaseElement();\n      }\n\n      i += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(newElement, nextElement);\n    } else {\n      this.layerElement.appendChild(newElement);\n    }\n  };\n\n  SVGRendererBase.prototype.hide = function () {\n    this.layerElement.style.display = 'none';\n  };\n\n  SVGRendererBase.prototype.show = function () {\n    this.layerElement.style.display = 'block';\n  };\n\n  function ICompElement() {}\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n  ICompElement.prototype.initElement = function (data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initTransform(data, globalData, comp);\n    this.initRenderable();\n    this.initHierarchy();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n\n    if (this.data.xt || !globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n\n    this.hide();\n  };\n  /* ICompElement.prototype.hide = function(){\r\n      if(!this.hidden){\r\n          this.hideElement();\r\n          var i,len = this.elements.length;\r\n          for( i = 0; i < len; i+=1 ){\r\n              if(this.elements[i]){\r\n                  this.elements[i].hide();\r\n              }\r\n          }\r\n      }\r\n  }; */\n\n\n  ICompElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n\n    if (!this.isInRange && !this.data.xt) {\n      return;\n    }\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n\n      if (timeRemapped === this.data.op) {\n        timeRemapped = this.data.op - 1;\n      }\n\n      this.renderedFrame = timeRemapped;\n    } else {\n      this.renderedFrame = num / this.data.sr;\n    }\n\n    var i;\n    var len = this.elements.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(this.renderedFrame);\n    } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n        if (this.elements[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  ICompElement.prototype.renderInnerContent = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  ICompElement.prototype.setElements = function (elems) {\n    this.elements = elems;\n  };\n\n  ICompElement.prototype.getElements = function () {\n    return this.elements;\n  };\n\n  ICompElement.prototype.destroyElements = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n  };\n\n  ICompElement.prototype.destroy = function () {\n    this.destroyElements();\n    this.destroyBaseElement();\n  };\n\n  function SVGCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = true;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n  SVGCompElement.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function SVGRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.svgElement = createNS('svg');\n    var ariaLabel = '';\n\n    if (config && config.title) {\n      var titleElement = createNS('title');\n      var titleId = createElementID();\n      titleElement.setAttribute('id', titleId);\n      titleElement.textContent = config.title;\n      this.svgElement.appendChild(titleElement);\n      ariaLabel += titleId;\n    }\n\n    if (config && config.description) {\n      var descElement = createNS('desc');\n      var descId = createElementID();\n      descElement.setAttribute('id', descId);\n      descElement.textContent = config.description;\n      this.svgElement.appendChild(descElement);\n      ariaLabel += ' ' + descId;\n    }\n\n    if (ariaLabel) {\n      this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n    }\n\n    var defs = createNS('defs');\n    this.svgElement.appendChild(defs);\n    var maskElement = createNS('g');\n    this.svgElement.appendChild(maskElement);\n    this.layerElement = maskElement;\n    this.renderConfig = {\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      progressiveLoad: config && config.progressiveLoad || false,\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      viewBoxOnly: config && config.viewBoxOnly || false,\n      viewBoxSize: config && config.viewBoxSize || false,\n      className: config && config.className || '',\n      id: config && config.id || '',\n      focusable: config && config.focusable,\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '100%',\n        height: config && config.filterSize && config.filterSize.height || '100%',\n        x: config && config.filterSize && config.filterSize.x || '0%',\n        y: config && config.filterSize && config.filterSize.y || '0%'\n      },\n      width: config && config.width,\n      height: config && config.height,\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      defs: defs,\n      renderConfig: this.renderConfig\n    };\n    this.elements = [];\n    this.pendingElements = [];\n    this.destroyed = false;\n    this.rendererType = 'svg';\n  }\n\n  extendPrototype([SVGRendererBase], SVGRenderer);\n\n  SVGRenderer.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function ShapeTransformManager() {\n    this.sequences = {};\n    this.sequenceList = [];\n    this.transform_key_count = 0;\n  }\n\n  ShapeTransformManager.prototype = {\n    addTransformSequence: function addTransformSequence(transforms) {\n      var i;\n      var len = transforms.length;\n      var key = '_';\n\n      for (i = 0; i < len; i += 1) {\n        key += transforms[i].transform.key + '_';\n      }\n\n      var sequence = this.sequences[key];\n\n      if (!sequence) {\n        sequence = {\n          transforms: [].concat(transforms),\n          finalTransform: new Matrix(),\n          _mdf: false\n        };\n        this.sequences[key] = sequence;\n        this.sequenceList.push(sequence);\n      }\n\n      return sequence;\n    },\n    processSequence: function processSequence(sequence, isFirstFrame) {\n      var i = 0;\n      var len = sequence.transforms.length;\n      var _mdf = isFirstFrame;\n\n      while (i < len && !isFirstFrame) {\n        if (sequence.transforms[i].transform.mProps._mdf) {\n          _mdf = true;\n          break;\n        }\n\n        i += 1;\n      }\n\n      if (_mdf) {\n        sequence.finalTransform.reset();\n\n        for (i = len - 1; i >= 0; i -= 1) {\n          sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n        }\n      }\n\n      sequence._mdf = _mdf;\n    },\n    processSequences: function processSequences(isFirstFrame) {\n      var i;\n      var len = this.sequenceList.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.processSequence(this.sequenceList[i], isFirstFrame);\n      }\n    },\n    getNewKey: function getNewKey() {\n      this.transform_key_count += 1;\n      return '_' + this.transform_key_count;\n    }\n  };\n\n  var lumaLoader = function lumaLoader() {\n    var id = '__lottie_element_luma_buffer';\n    var lumaBuffer = null;\n    var lumaBufferCtx = null;\n    var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n    // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n    // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n    // Naming it solution 2 to mark the extra comment lines.\n\n    /*\r\n    var svgString = [\r\n      '<svg xmlns=\"http://www.w3.org/2000/svg\">',\r\n      '<filter id=\"' + id + '\">',\r\n      '<feColorMatrix type=\"matrix\" color-interpolation-filters=\"sRGB\" values=\"',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0',\r\n      '\"/>',\r\n      '</filter>',\r\n      '</svg>',\r\n    ].join('');\r\n    var blob = new Blob([svgString], { type: 'image/svg+xml' });\r\n    var url = URL.createObjectURL(blob);\r\n    */\n\n    function createLumaSvgFilter() {\n      var _svg = createNS('svg');\n\n      var fil = createNS('filter');\n      var matrix = createNS('feColorMatrix');\n      fil.setAttribute('id', id);\n      matrix.setAttribute('type', 'matrix');\n      matrix.setAttribute('color-interpolation-filters', 'sRGB');\n      matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n      fil.appendChild(matrix);\n\n      _svg.appendChild(fil);\n\n      _svg.setAttribute('id', id + '_svg');\n\n      if (featureSupport.svgLumaHidden) {\n        _svg.style.display = 'none';\n      }\n\n      return _svg;\n    }\n\n    function loadLuma() {\n      if (!lumaBuffer) {\n        svg = createLumaSvgFilter();\n        document.body.appendChild(svg);\n        lumaBuffer = createTag('canvas');\n        lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n        lumaBufferCtx.filter = 'url(#' + id + ')';\n        lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n        lumaBufferCtx.fillRect(0, 0, 1, 1);\n      }\n    }\n\n    function getLuma(canvas) {\n      if (!lumaBuffer) {\n        loadLuma();\n      }\n\n      lumaBuffer.width = canvas.width;\n      lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n      lumaBufferCtx.filter = 'url(#' + id + ')';\n      return lumaBuffer;\n    }\n\n    return {\n      load: loadLuma,\n      get: getLuma\n    };\n  };\n\n  function createCanvas(width, height) {\n    if (featureSupport.offscreenCanvas) {\n      return new OffscreenCanvas(width, height);\n    }\n\n    var canvas = createTag('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n  }\n\n  var assetLoader = function () {\n    return {\n      loadLumaCanvas: lumaLoader.load,\n      getLumaCanvas: lumaLoader.get,\n      createCanvas: createCanvas\n    };\n  }();\n\n  var registeredEffects = {};\n\n  function CVEffects(elem) {\n    var i;\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects[type]) {\n        var Effect = registeredEffects[type].effect;\n        filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  CVEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n\n    return effects;\n  };\n\n  function registerEffect(id, effect) {\n    registeredEffects[id] = {\n      effect: effect\n    };\n  }\n\n  function CVMaskElement(data, element) {\n    this.data = data;\n    this.element = element;\n    this.masksProperties = this.data.masksProperties || [];\n    this.viewData = createSizedArray(this.masksProperties.length);\n    var i;\n    var len = this.masksProperties.length;\n    var hasMasks = false;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        hasMasks = true;\n      }\n\n      this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n    }\n\n    this.hasMasks = hasMasks;\n\n    if (hasMasks) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  CVMaskElement.prototype.renderFrame = function () {\n    if (!this.hasMasks) {\n      return;\n    }\n\n    var transform = this.element.finalTransform.mat;\n    var ctx = this.element.canvasContext;\n    var i;\n    var len = this.masksProperties.length;\n    var pt;\n    var pts;\n    var data;\n    ctx.beginPath();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.masksProperties[i].inv) {\n          ctx.moveTo(0, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n          ctx.lineTo(0, this.element.globalData.compSize.h);\n          ctx.lineTo(0, 0);\n        }\n\n        data = this.viewData[i].v;\n        pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n        ctx.moveTo(pt[0], pt[1]);\n        var j;\n        var jLen = data._length;\n\n        for (j = 1; j < jLen; j += 1) {\n          pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n          ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n        }\n\n        pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n        ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n      }\n    }\n\n    this.element.globalData.renderer.save(true);\n    ctx.clip();\n  };\n\n  CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n  CVMaskElement.prototype.destroy = function () {\n    this.element = null;\n  };\n\n  function CVBaseElement() {}\n\n  var operationsMap = {\n    1: 'source-in',\n    2: 'source-out',\n    3: 'source-in',\n    4: 'source-out'\n  };\n  CVBaseElement.prototype = {\n    createElements: function createElements() {},\n    initRendererElement: function initRendererElement() {},\n    createContainerElements: function createContainerElements() {\n      // If the layer is masked we will use two buffers to store each different states of the drawing\n      // This solution is not ideal for several reason. But unfortunately, because of the recursive\n      // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n      // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n      // It might be challenging because the layer most likely is transformed in some way\n      if (this.data.tt >= 1) {\n        this.buffers = [];\n        var canvasContext = this.globalData.canvasContext;\n        var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n        this.buffers.push(bufferCanvas);\n        var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n        this.buffers.push(bufferCanvas2);\n\n        if (this.data.tt >= 3 && !document._isProxy) {\n          assetLoader.loadLumaCanvas();\n        }\n      }\n\n      this.canvasContext = this.globalData.canvasContext;\n      this.transformCanvas = this.globalData.transformCanvas;\n      this.renderableEffectsManager = new CVEffects(this);\n      this.searchEffectTransforms();\n    },\n    createContent: function createContent() {},\n    setBlendMode: function setBlendMode() {\n      var globalData = this.globalData;\n\n      if (globalData.blendMode !== this.data.bm) {\n        globalData.blendMode = this.data.bm;\n        var blendModeValue = getBlendMode(this.data.bm);\n        globalData.canvasContext.globalCompositeOperation = blendModeValue;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new CVMaskElement(this.data, this);\n      this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n    },\n    hideElement: function hideElement() {\n      if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n        this.hidden = true;\n      }\n    },\n    showElement: function showElement() {\n      if (this.isInRange && !this.isTransparent) {\n        this.hidden = false;\n        this._isFirstFrame = true;\n        this.maskManager._isFirstFrame = true;\n      }\n    },\n    clearCanvas: function clearCanvas(canvasContext) {\n      canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n    },\n    prepareLayer: function prepareLayer() {\n      if (this.data.tt >= 1) {\n        var buffer = this.buffers[0];\n        var bufferCtx = buffer.getContext('2d');\n        this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing\n\n        bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas\n        // TODO: Check if there is a way to clear the canvas without resetting the transform\n\n        this.currentTransform = this.canvasContext.getTransform();\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n        this.clearCanvas(this.canvasContext);\n        this.canvasContext.setTransform(this.currentTransform);\n      }\n    },\n    exitLayer: function exitLayer() {\n      if (this.data.tt >= 1) {\n        var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing\n        // that only contains the content of this layer\n        // (if it is a composition, it also includes the nested layers)\n\n        var bufferCtx = buffer.getContext('2d');\n        this.clearCanvas(bufferCtx);\n        bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again\n\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n        this.clearCanvas(this.canvasContext);\n        this.canvasContext.setTransform(this.currentTransform); // We draw the mask\n\n        var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n        mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer)\n\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations\n        // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n\n        if (this.data.tt >= 3 && !document._isProxy) {\n          // We copy the painted mask to a buffer that has a color matrix filter applied to it\n          // that applies the rgb values to the alpha channel\n          var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n          var lumaBufferCtx = lumaBuffer.getContext('2d');\n          lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n          this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it\n\n          this.canvasContext.drawImage(lumaBuffer, 0, 0);\n        }\n\n        this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n        this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing)\n        // We use destination-over to draw the global drawing below the current layer\n\n        this.canvasContext.globalCompositeOperation = 'destination-over';\n        this.canvasContext.drawImage(this.buffers[0], 0, 0);\n        this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation\n\n        this.canvasContext.globalCompositeOperation = 'source-over';\n      }\n    },\n    renderFrame: function renderFrame(forceRender) {\n      if (this.hidden || this.data.hd) {\n        return;\n      }\n\n      if (this.data.td === 1 && !forceRender) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderLocalTransform();\n      this.setBlendMode();\n      var forceRealStack = this.data.ty === 0;\n      this.prepareLayer();\n      this.globalData.renderer.save(forceRealStack);\n      this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n      this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n      this.renderInnerContent();\n      this.globalData.renderer.restore(forceRealStack);\n      this.exitLayer();\n\n      if (this.maskManager.hasMasks) {\n        this.globalData.renderer.restore(true);\n      }\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.canvasContext = null;\n      this.data = null;\n      this.globalData = null;\n      this.maskManager.destroy();\n    },\n    mHelper: new Matrix()\n  };\n  CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n  CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n  function CVShapeData(element, data, styles, transformsManager) {\n    this.styledShapes = [];\n    this.tr = [0, 0, 0, 0, 0, 0];\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n    var i;\n    var len = styles.length;\n    var styledShape;\n\n    for (i = 0; i < len; i += 1) {\n      if (!styles[i].closed) {\n        styledShape = {\n          transforms: transformsManager.addTransformSequence(styles[i].transforms),\n          trNodes: []\n        };\n        this.styledShapes.push(styledShape);\n        styles[i].elements.push(styledShape);\n      }\n    }\n  }\n\n  CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n  function CVShapeElement(data, globalData, comp) {\n    this.shapes = [];\n    this.shapesData = data.shapes;\n    this.stylesList = [];\n    this.itemsData = [];\n    this.prevViewData = [];\n    this.shapeModifiers = [];\n    this.processedElements = [];\n    this.transformsManager = new ShapeTransformManager();\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n  CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n  CVShapeElement.prototype.transformHelper = {\n    opacity: 1,\n    _opMdf: false\n  };\n  CVShapeElement.prototype.dashResetter = [];\n\n  CVShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n  };\n\n  CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n    var styleElem = {\n      data: data,\n      type: data.ty,\n      preTransforms: this.transformsManager.addTransformSequence(transforms),\n      transforms: [],\n      elements: [],\n      closed: data.hd === true\n    };\n    var elementData = {};\n\n    if (data.ty === 'fl' || data.ty === 'st') {\n      elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n      if (!elementData.c.k) {\n        styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n      }\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n      elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n      elementData.h = PropertyFactory.getProp(this, data.h || {\n        k: 0\n      }, 0, 0.01, this);\n      elementData.a = PropertyFactory.getProp(this, data.a || {\n        k: 0\n      }, 0, degToRads, this);\n      elementData.g = new GradientProperty(this, data.g, this);\n    }\n\n    elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      styleElem.lc = lineCapEnum[data.lc || 2];\n      styleElem.lj = lineJoinEnum[data.lj || 2];\n\n      if (data.lj == 1) {\n        // eslint-disable-line eqeqeq\n        styleElem.ml = data.ml;\n      }\n\n      elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n      if (!elementData.w.k) {\n        styleElem.wi = elementData.w.v;\n      }\n\n      if (data.d) {\n        var d = new DashProperty(this, data.d, 'canvas', this);\n        elementData.d = d;\n\n        if (!elementData.d.k) {\n          styleElem.da = elementData.d.dashArray;\n          styleElem[\"do\"] = elementData.d.dashoffset[0];\n        }\n      }\n    } else {\n      styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n    }\n\n    this.stylesList.push(styleElem);\n    elementData.style = styleElem;\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createGroupElement = function () {\n    var elementData = {\n      it: [],\n      prevViewData: []\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createTransformElement = function (data) {\n    var elementData = {\n      transform: {\n        opacity: 1,\n        _opMdf: false,\n        key: this.transformsManager.getNewKey(),\n        op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n        mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n      }\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createShapeElement = function (data) {\n    var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    return elementData;\n  };\n\n  CVShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n  };\n\n  CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.push(transform);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.removeTransformFromStyleList = function () {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.pop();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.closeStyles = function (styles) {\n    var i;\n    var len = styles.length;\n\n    for (i = 0; i < len; i += 1) {\n      styles[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var processedPos;\n    var modifier;\n    var currentTransform;\n    var ownTransforms = [].concat(transforms);\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._shouldRender = shouldRender;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          currentTransform = this.createTransformElement(arr[i]);\n          itemsData[i] = currentTransform;\n        }\n\n        ownTransforms.push(itemsData[i]);\n        this.addTransformToStyleList(itemsData[i]);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i]);\n        }\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          shouldRender = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    this.removeTransformFromStyleList();\n    this.closeStyles(ownStyles);\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.renderInnerContent = function () {\n    this.transformHelper.opacity = 1;\n    this.transformHelper._opMdf = false;\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n    this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n  };\n\n  CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n    if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n      groupTransform.opacity = parentTransform.opacity;\n      groupTransform.opacity *= groupTransform.op.v;\n      groupTransform._opMdf = true;\n    }\n  };\n\n  CVShapeElement.prototype.drawLayer = function () {\n    var i;\n    var len = this.stylesList.length;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var elems;\n    var nodes;\n    var renderer = this.globalData.renderer;\n    var ctx = this.globalData.canvasContext;\n    var type;\n    var currentStyle;\n\n    for (i = 0; i < len; i += 1) {\n      currentStyle = this.stylesList[i];\n      type = currentStyle.type; // Skipping style when\n      // Stroke width equals 0\n      // style should not be rendered (extra unused repeaters)\n      // current opacity equals 0\n      // global opacity equals 0\n\n      if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n        renderer.save();\n        elems = currentStyle.elements;\n\n        if (type === 'st' || type === 'gs') {\n          renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n\n          renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi;\n\n          renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc;\n\n          renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj;\n\n          renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0;\n        } else {\n          renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n        }\n\n        renderer.ctxOpacity(currentStyle.coOp);\n\n        if (type !== 'st' && type !== 'gs') {\n          ctx.beginPath();\n        }\n\n        renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n        jLen = elems.length;\n\n        for (j = 0; j < jLen; j += 1) {\n          if (type === 'st' || type === 'gs') {\n            ctx.beginPath();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(currentStyle.da);\n              ctx.lineDashOffset = currentStyle[\"do\"];\n            }\n          }\n\n          nodes = elems[j].trNodes;\n          kLen = nodes.length;\n\n          for (k = 0; k < kLen; k += 1) {\n            if (nodes[k].t === 'm') {\n              ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n            } else if (nodes[k].t === 'c') {\n              ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n            } else {\n              ctx.closePath();\n            }\n          }\n\n          if (type === 'st' || type === 'gs') {\n            // ctx.stroke();\n            renderer.ctxStroke();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(this.dashResetter);\n            }\n          }\n        }\n\n        if (type !== 'st' && type !== 'gs') {\n          // ctx.fill(currentStyle.r);\n          this.globalData.renderer.ctxFill(currentStyle.r);\n        }\n\n        renderer.restore();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n    var i;\n    var len = items.length - 1;\n    var groupTransform;\n    groupTransform = parentTransform;\n\n    for (i = len; i >= 0; i -= 1) {\n      if (items[i].ty === 'tr') {\n        groupTransform = data[i].transform;\n        this.renderShapeTransform(parentTransform, groupTransform);\n      } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n        this.renderPath(items[i], data[i]);\n      } else if (items[i].ty === 'fl') {\n        this.renderFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'st') {\n        this.renderStroke(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n        this.renderGradientFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gr') {\n        this.renderShape(groupTransform, items[i].it, data[i].it);\n      } else if (items[i].ty === 'tm') {//\n      }\n    }\n\n    if (isMain) {\n      this.drawLayer();\n    }\n  };\n\n  CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n    if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n      var shapeNodes = styledShape.trNodes;\n      var paths = shape.paths;\n      var i;\n      var len;\n      var j;\n      var jLen = paths._length;\n      shapeNodes.length = 0;\n      var groupTransformMat = styledShape.transforms.finalTransform;\n\n      for (j = 0; j < jLen; j += 1) {\n        var pathNodes = paths.shapes[j];\n\n        if (pathNodes && pathNodes.v) {\n          len = pathNodes._length;\n\n          for (i = 1; i < len; i += 1) {\n            if (i === 1) {\n              shapeNodes.push({\n                t: 'm',\n                p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n              });\n            }\n\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n            });\n          }\n\n          if (len === 1) {\n            shapeNodes.push({\n              t: 'm',\n              p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n            });\n          }\n\n          if (pathNodes.c && len) {\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n            });\n            shapeNodes.push({\n              t: 'z'\n            });\n          }\n        }\n      }\n\n      styledShape.trNodes = shapeNodes;\n    }\n  };\n\n  CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n    if (pathData.hd !== true && pathData._shouldRender) {\n      var i;\n      var len = itemData.styledShapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n  };\n\n  CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var grd;\n\n    if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n      var ctx = this.globalData.canvasContext;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (styleData.t === 1) {\n        grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n      } else {\n        var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n        var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n        var percent = itemData.h.v;\n\n        if (percent >= 1) {\n          percent = 0.99;\n        } else if (percent <= -1) {\n          percent = -0.99;\n        }\n\n        var dist = rad * percent;\n        var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n        var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n        grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n      }\n\n      var i;\n      var len = styleData.g.p;\n      var cValues = itemData.g.c;\n      var opacity = 1;\n\n      for (i = 0; i < len; i += 1) {\n        if (itemData.g._hasOpacity && itemData.g._collapsable) {\n          opacity = itemData.g.o[i * 2 + 1];\n        }\n\n        grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n      }\n\n      styleElem.grd = grd;\n    }\n\n    styleElem.coOp = itemData.o.v * groupTransform.opacity;\n  };\n\n  CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var d = itemData.d;\n\n    if (d && (d._mdf || this._isFirstFrame)) {\n      styleElem.da = d.dashArray;\n      styleElem[\"do\"] = d.dashoffset[0];\n    }\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n\n    if (itemData.w._mdf || this._isFirstFrame) {\n      styleElem.wi = itemData.w.v;\n    }\n  };\n\n  CVShapeElement.prototype.destroy = function () {\n    this.shapesData = null;\n    this.globalData = null;\n    this.canvasContext = null;\n    this.stylesList.length = 0;\n    this.itemsData.length = 0;\n  };\n\n  function CVTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.yOffset = 0;\n    this.fillColorAnim = false;\n    this.strokeColorAnim = false;\n    this.strokeWidthAnim = false;\n    this.stroke = false;\n    this.fill = false;\n    this.justifyOffset = 0;\n    this.currentRender = null;\n    this.renderType = 'canvas';\n    this.values = {\n      fill: 'rgba(0,0,0,0)',\n      stroke: 'rgba(0,0,0,0)',\n      sWidth: 0,\n      fValue: ''\n    };\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n  CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n  CVTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var hasFill = false;\n\n    if (documentData.fc) {\n      hasFill = true;\n      this.values.fill = this.buildColor(documentData.fc);\n    } else {\n      this.values.fill = 'rgba(0,0,0,0)';\n    }\n\n    this.fill = hasFill;\n    var hasStroke = false;\n\n    if (documentData.sc) {\n      hasStroke = true;\n      this.values.stroke = this.buildColor(documentData.sc);\n      this.values.sWidth = documentData.sw;\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n    var i;\n    var len;\n    var letters = documentData.l;\n    var matrixHelper = this.mHelper;\n    this.stroke = hasStroke;\n    this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n    len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n    var charData;\n    var shapeData;\n    var k;\n    var kLen;\n    var shapes;\n    var j;\n    var jLen;\n    var pathNodes;\n    var commands;\n    var pathArr;\n    var singleShape = this.data.singleShape;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n      shapeData = charData && charData.data || {};\n      matrixHelper.reset();\n\n      if (singleShape && letters[i].n) {\n        xPos = -trackingOffset;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        firstLine = false;\n      }\n\n      shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n      jLen = shapes.length;\n      matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n      if (singleShape) {\n        this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n      }\n\n      commands = createSizedArray(jLen - 1);\n      var commandsCounter = 0;\n\n      for (j = 0; j < jLen; j += 1) {\n        if (shapes[j].ty === 'sh') {\n          kLen = shapes[j].ks.k.i.length;\n          pathNodes = shapes[j].ks.k;\n          pathArr = [];\n\n          for (k = 1; k < kLen; k += 1) {\n            if (k === 1) {\n              pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n            }\n\n            pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n          }\n\n          pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n          commands[commandsCounter] = pathArr;\n          commandsCounter += 1;\n        }\n      }\n\n      if (singleShape) {\n        xPos += letters[i].l;\n        xPos += trackingOffset;\n      }\n\n      if (this.textSpans[cnt]) {\n        this.textSpans[cnt].elem = commands;\n      } else {\n        this.textSpans[cnt] = {\n          elem: commands\n        };\n      }\n\n      cnt += 1;\n    }\n  };\n\n  CVTextElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    var ctx = this.canvasContext;\n    ctx.font = this.values.fValue;\n    this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt';\n\n    this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter';\n\n    this.globalData.renderer.ctxMiterLimit(4); // ctx.miterLimit = 4;\n\n    if (!this.data.singleShape) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n    }\n\n    var i;\n    var len;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var lastFill = null;\n    var lastStroke = null;\n    var lastStrokeW = null;\n    var commands;\n    var pathArr;\n    var renderer = this.globalData.renderer;\n\n    for (i = 0; i < len; i += 1) {\n      if (!letters[i].n) {\n        renderedLetter = renderedLetters[i];\n\n        if (renderedLetter) {\n          renderer.save();\n          renderer.ctxTransform(renderedLetter.p);\n          renderer.ctxOpacity(renderedLetter.o);\n        }\n\n        if (this.fill) {\n          if (renderedLetter && renderedLetter.fc) {\n            if (lastFill !== renderedLetter.fc) {\n              renderer.ctxFillStyle(renderedLetter.fc);\n              lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc;\n            }\n          } else if (lastFill !== this.values.fill) {\n            lastFill = this.values.fill;\n            renderer.ctxFillStyle(this.values.fill); // ctx.fillStyle = this.values.fill;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          renderer.ctxFill(); // this.globalData.canvasContext.fill();\n          /// ctx.fillText(this.textSpans[i].val,0,0);\n        }\n\n        if (this.stroke) {\n          if (renderedLetter && renderedLetter.sw) {\n            if (lastStrokeW !== renderedLetter.sw) {\n              lastStrokeW = renderedLetter.sw;\n              renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw;\n            }\n          } else if (lastStrokeW !== this.values.sWidth) {\n            lastStrokeW = this.values.sWidth;\n            renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth;\n          }\n\n          if (renderedLetter && renderedLetter.sc) {\n            if (lastStroke !== renderedLetter.sc) {\n              lastStroke = renderedLetter.sc;\n              renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc;\n            }\n          } else if (lastStroke !== this.values.stroke) {\n            lastStroke = this.values.stroke;\n            renderer.ctxStrokeStyle(this.values.stroke); // ctx.strokeStyle = this.values.stroke;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          renderer.ctxStroke(); // this.globalData.canvasContext.stroke();\n          /// ctx.strokeText(letters[i].val,0,0);\n        }\n\n        if (renderedLetter) {\n          this.globalData.renderer.restore();\n        }\n      }\n    }\n  };\n\n  function CVImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.img = globalData.imageLoader.getAsset(this.assetData);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n  CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVImageElement.prototype.createContent = function () {\n    if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n      var canvas = createTag('canvas');\n      canvas.width = this.assetData.w;\n      canvas.height = this.assetData.h;\n      var ctx = canvas.getContext('2d');\n      var imgW = this.img.width;\n      var imgH = this.img.height;\n      var imgRel = imgW / imgH;\n      var canvasRel = this.assetData.w / this.assetData.h;\n      var widthCrop;\n      var heightCrop;\n      var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n      if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n        heightCrop = imgH;\n        widthCrop = heightCrop * canvasRel;\n      } else {\n        widthCrop = imgW;\n        heightCrop = widthCrop / canvasRel;\n      }\n\n      ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n      this.img = canvas;\n    }\n  };\n\n  CVImageElement.prototype.renderInnerContent = function () {\n    this.canvasContext.drawImage(this.img, 0, 0);\n  };\n\n  CVImageElement.prototype.destroy = function () {\n    this.img = null;\n  };\n\n  function CVSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n  CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVSolidElement.prototype.renderInnerContent = function () {\n    // var ctx = this.canvasContext;\n    this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc;\n\n    this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n    //\n  };\n\n  function CanvasRendererBase() {}\n\n  extendPrototype([BaseRenderer], CanvasRendererBase);\n\n  CanvasRendererBase.prototype.createShape = function (data) {\n    return new CVShapeElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createText = function (data) {\n    return new CVTextElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createImage = function (data) {\n    return new CVImageElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createSolid = function (data) {\n    return new CVSolidElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  CanvasRendererBase.prototype.ctxTransform = function (props) {\n    if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n      return;\n    }\n\n    this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n  };\n\n  CanvasRendererBase.prototype.ctxOpacity = function (op) {\n    this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n  };\n\n  CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n    this.canvasContext.fillStyle = value;\n  };\n\n  CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n    this.canvasContext.strokeStyle = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n    this.canvasContext.lineWidth = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineCap = function (value) {\n    this.canvasContext.lineCap = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n    this.canvasContext.lineJoin = value;\n  };\n\n  CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n    this.canvasContext.miterLimit = value;\n  };\n\n  CanvasRendererBase.prototype.ctxFill = function (rule) {\n    this.canvasContext.fill(rule);\n  };\n\n  CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n    this.canvasContext.fillRect(x, y, w, h);\n  };\n\n  CanvasRendererBase.prototype.ctxStroke = function () {\n    this.canvasContext.stroke();\n  };\n\n  CanvasRendererBase.prototype.reset = function () {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    this.contextData.reset();\n  };\n\n  CanvasRendererBase.prototype.save = function () {\n    this.canvasContext.save();\n  };\n\n  CanvasRendererBase.prototype.restore = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    if (actionFlag) {\n      this.globalData.blendMode = 'source-over';\n    }\n\n    this.contextData.restore(actionFlag);\n  };\n\n  CanvasRendererBase.prototype.configAnimation = function (animData) {\n    if (this.animationItem.wrapper) {\n      this.animationItem.container = createTag('canvas');\n      var containerStyle = this.animationItem.container.style;\n      containerStyle.width = '100%';\n      containerStyle.height = '100%';\n      var origin = '0px 0px 0px';\n      containerStyle.transformOrigin = origin;\n      containerStyle.mozTransformOrigin = origin;\n      containerStyle.webkitTransformOrigin = origin;\n      containerStyle['-webkit-transform'] = origin;\n      containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n      this.animationItem.wrapper.appendChild(this.animationItem.container);\n      this.canvasContext = this.animationItem.container.getContext('2d');\n\n      if (this.renderConfig.className) {\n        this.animationItem.container.setAttribute('class', this.renderConfig.className);\n      }\n\n      if (this.renderConfig.id) {\n        this.animationItem.container.setAttribute('id', this.renderConfig.id);\n      }\n    } else {\n      this.canvasContext = this.renderConfig.context;\n    }\n\n    this.contextData.setContext(this.canvasContext);\n    this.data = animData;\n    this.layers = animData.layers;\n    this.transformCanvas = {\n      w: animData.w,\n      h: animData.h,\n      sx: 0,\n      sy: 0,\n      tx: 0,\n      ty: 0\n    };\n    this.setupGlobalData(animData, document.body);\n    this.globalData.canvasContext = this.canvasContext;\n    this.globalData.renderer = this;\n    this.globalData.isDashed = false;\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.globalData.transformCanvas = this.transformCanvas;\n    this.elements = createSizedArray(animData.layers.length);\n    this.updateContainerSize();\n  };\n\n  CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n    this.reset();\n    var elementWidth;\n    var elementHeight;\n\n    if (width) {\n      elementWidth = width;\n      elementHeight = height;\n      this.canvasContext.canvas.width = elementWidth;\n      this.canvasContext.canvas.height = elementHeight;\n    } else {\n      if (this.animationItem.wrapper && this.animationItem.container) {\n        elementWidth = this.animationItem.wrapper.offsetWidth;\n        elementHeight = this.animationItem.wrapper.offsetHeight;\n      } else {\n        elementWidth = this.canvasContext.canvas.width;\n        elementHeight = this.canvasContext.canvas.height;\n      }\n\n      this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n      this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n    }\n\n    var elementRel;\n    var animationRel;\n\n    if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n      var par = this.renderConfig.preserveAspectRatio.split(' ');\n      var fillType = par[1] || 'meet';\n      var pos = par[0] || 'xMidYMid';\n      var xPos = pos.substr(0, 4);\n      var yPos = pos.substr(4);\n      elementRel = elementWidth / elementHeight;\n      animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n      if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n        this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      } else {\n        this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      }\n\n      if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n      } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.tx = 0;\n      }\n\n      if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n      } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.ty = 0;\n      }\n    } else if (this.renderConfig.preserveAspectRatio === 'none') {\n      this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    } else {\n      this.transformCanvas.sx = this.renderConfig.dpr;\n      this.transformCanvas.sy = this.renderConfig.dpr;\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    }\n\n    this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n    /* var i, len = this.elements.length;\r\n      for(i=0;i<len;i+=1){\r\n          if(this.elements[i] && this.elements[i].data.ty === 0){\r\n              this.elements[i].resize(this.globalData.transformCanvas);\r\n          }\r\n      } */\n\n    this.ctxTransform(this.transformCanvas.props);\n    this.canvasContext.beginPath();\n    this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n    this.canvasContext.closePath();\n    this.canvasContext.clip();\n    this.renderFrame(this.renderedFrame, true);\n  };\n\n  CanvasRendererBase.prototype.destroy = function () {\n    if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.globalData.canvasContext = null;\n    this.animationItem.container = null;\n    this.destroyed = true;\n  };\n\n  CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n    if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n      return;\n    }\n\n    this.renderedFrame = num;\n    this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n    this.globalData.frameId += 1;\n    this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n    this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n    // console.log('NEW: ',num);\n\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      if (this.renderConfig.clearCanvas === true) {\n        this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n      } else {\n        this.save();\n      }\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n\n      if (this.renderConfig.clearCanvas !== true) {\n        this.restore();\n      }\n    }\n  };\n\n  CanvasRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    var element = this.createItem(this.layers[pos], this, this.globalData);\n    elements[pos] = element;\n    element.initExpressions();\n    /* if(this.layers[pos].ty === 0){\r\n          element.resize(this.globalData.transformCanvas);\r\n      } */\n  };\n\n  CanvasRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  CanvasRendererBase.prototype.hide = function () {\n    this.animationItem.container.style.display = 'none';\n  };\n\n  CanvasRendererBase.prototype.show = function () {\n    this.animationItem.container.style.display = 'block';\n  };\n\n  function CanvasContext() {\n    this.opacity = -1;\n    this.transform = createTypedArray('float32', 16);\n    this.fillStyle = '';\n    this.strokeStyle = '';\n    this.lineWidth = '';\n    this.lineCap = '';\n    this.lineJoin = '';\n    this.miterLimit = '';\n    this.id = Math.random();\n  }\n\n  function CVContextData() {\n    this.stack = [];\n    this.cArrPos = 0;\n    this.cTr = new Matrix();\n    var i;\n    var len = 15;\n\n    for (i = 0; i < len; i += 1) {\n      var canvasContext = new CanvasContext();\n      this.stack[i] = canvasContext;\n    }\n\n    this._length = len;\n    this.nativeContext = null;\n    this.transformMat = new Matrix();\n    this.currentOpacity = 1; //\n\n    this.currentFillStyle = '';\n    this.appliedFillStyle = ''; //\n\n    this.currentStrokeStyle = '';\n    this.appliedStrokeStyle = ''; //\n\n    this.currentLineWidth = '';\n    this.appliedLineWidth = ''; //\n\n    this.currentLineCap = '';\n    this.appliedLineCap = ''; //\n\n    this.currentLineJoin = '';\n    this.appliedLineJoin = ''; //\n\n    this.appliedMiterLimit = '';\n    this.currentMiterLimit = '';\n  }\n\n  CVContextData.prototype.duplicate = function () {\n    var newLength = this._length * 2;\n    var i = 0;\n\n    for (i = this._length; i < newLength; i += 1) {\n      this.stack[i] = new CanvasContext();\n    }\n\n    this._length = newLength;\n  };\n\n  CVContextData.prototype.reset = function () {\n    this.cArrPos = 0;\n    this.cTr.reset();\n    this.stack[this.cArrPos].opacity = 1;\n  };\n\n  CVContextData.prototype.restore = function (forceRestore) {\n    this.cArrPos -= 1;\n    var currentContext = this.stack[this.cArrPos];\n    var transform = currentContext.transform;\n    var i;\n    var arr = this.cTr.props;\n\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = transform[i];\n    }\n\n    if (forceRestore) {\n      this.nativeContext.restore();\n      var prevStack = this.stack[this.cArrPos + 1];\n      this.appliedFillStyle = prevStack.fillStyle;\n      this.appliedStrokeStyle = prevStack.strokeStyle;\n      this.appliedLineWidth = prevStack.lineWidth;\n      this.appliedLineCap = prevStack.lineCap;\n      this.appliedLineJoin = prevStack.lineJoin;\n      this.appliedMiterLimit = prevStack.miterLimit;\n    }\n\n    this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n\n    if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n      this.nativeContext.globalAlpha = currentContext.opacity;\n      this.currentOpacity = currentContext.opacity;\n    }\n\n    this.currentFillStyle = currentContext.fillStyle;\n    this.currentStrokeStyle = currentContext.strokeStyle;\n    this.currentLineWidth = currentContext.lineWidth;\n    this.currentLineCap = currentContext.lineCap;\n    this.currentLineJoin = currentContext.lineJoin;\n    this.currentMiterLimit = currentContext.miterLimit;\n  };\n\n  CVContextData.prototype.save = function (saveOnNativeFlag) {\n    if (saveOnNativeFlag) {\n      this.nativeContext.save();\n    }\n\n    var props = this.cTr.props;\n\n    if (this._length <= this.cArrPos) {\n      this.duplicate();\n    }\n\n    var currentStack = this.stack[this.cArrPos];\n    var i;\n\n    for (i = 0; i < 16; i += 1) {\n      currentStack.transform[i] = props[i];\n    }\n\n    this.cArrPos += 1;\n    var newStack = this.stack[this.cArrPos];\n    newStack.opacity = currentStack.opacity;\n    newStack.fillStyle = currentStack.fillStyle;\n    newStack.strokeStyle = currentStack.strokeStyle;\n    newStack.lineWidth = currentStack.lineWidth;\n    newStack.lineCap = currentStack.lineCap;\n    newStack.lineJoin = currentStack.lineJoin;\n    newStack.miterLimit = currentStack.miterLimit;\n  };\n\n  CVContextData.prototype.setOpacity = function (value) {\n    this.stack[this.cArrPos].opacity = value;\n  };\n\n  CVContextData.prototype.setContext = function (value) {\n    this.nativeContext = value;\n  };\n\n  CVContextData.prototype.fillStyle = function (value) {\n    if (this.stack[this.cArrPos].fillStyle !== value) {\n      this.currentFillStyle = value;\n      this.stack[this.cArrPos].fillStyle = value;\n    }\n  };\n\n  CVContextData.prototype.strokeStyle = function (value) {\n    if (this.stack[this.cArrPos].strokeStyle !== value) {\n      this.currentStrokeStyle = value;\n      this.stack[this.cArrPos].strokeStyle = value;\n    }\n  };\n\n  CVContextData.prototype.lineWidth = function (value) {\n    if (this.stack[this.cArrPos].lineWidth !== value) {\n      this.currentLineWidth = value;\n      this.stack[this.cArrPos].lineWidth = value;\n    }\n  };\n\n  CVContextData.prototype.lineCap = function (value) {\n    if (this.stack[this.cArrPos].lineCap !== value) {\n      this.currentLineCap = value;\n      this.stack[this.cArrPos].lineCap = value;\n    }\n  };\n\n  CVContextData.prototype.lineJoin = function (value) {\n    if (this.stack[this.cArrPos].lineJoin !== value) {\n      this.currentLineJoin = value;\n      this.stack[this.cArrPos].lineJoin = value;\n    }\n  };\n\n  CVContextData.prototype.miterLimit = function (value) {\n    if (this.stack[this.cArrPos].miterLimit !== value) {\n      this.currentMiterLimit = value;\n      this.stack[this.cArrPos].miterLimit = value;\n    }\n  };\n\n  CVContextData.prototype.transform = function (props) {\n    this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms\n\n    var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations\n\n    this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform\n\n    currentTransform.cloneFromProps(this.transformMat.props);\n    var trProps = currentTransform.props; // Applying the new transform to the canvas\n\n    this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n  };\n\n  CVContextData.prototype.opacity = function (op) {\n    var currentOpacity = this.stack[this.cArrPos].opacity;\n    currentOpacity *= op < 0 ? 0 : op;\n\n    if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n      if (this.currentOpacity !== op) {\n        this.nativeContext.globalAlpha = op;\n        this.currentOpacity = op;\n      }\n\n      this.stack[this.cArrPos].opacity = currentOpacity;\n    }\n  };\n\n  CVContextData.prototype.fill = function (rule) {\n    if (this.appliedFillStyle !== this.currentFillStyle) {\n      this.appliedFillStyle = this.currentFillStyle;\n      this.nativeContext.fillStyle = this.appliedFillStyle;\n    }\n\n    this.nativeContext.fill(rule);\n  };\n\n  CVContextData.prototype.fillRect = function (x, y, w, h) {\n    if (this.appliedFillStyle !== this.currentFillStyle) {\n      this.appliedFillStyle = this.currentFillStyle;\n      this.nativeContext.fillStyle = this.appliedFillStyle;\n    }\n\n    this.nativeContext.fillRect(x, y, w, h);\n  };\n\n  CVContextData.prototype.stroke = function () {\n    if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n      this.appliedStrokeStyle = this.currentStrokeStyle;\n      this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n    }\n\n    if (this.appliedLineWidth !== this.currentLineWidth) {\n      this.appliedLineWidth = this.currentLineWidth;\n      this.nativeContext.lineWidth = this.appliedLineWidth;\n    }\n\n    if (this.appliedLineCap !== this.currentLineCap) {\n      this.appliedLineCap = this.currentLineCap;\n      this.nativeContext.lineCap = this.appliedLineCap;\n    }\n\n    if (this.appliedLineJoin !== this.currentLineJoin) {\n      this.appliedLineJoin = this.currentLineJoin;\n      this.nativeContext.lineJoin = this.appliedLineJoin;\n    }\n\n    if (this.appliedMiterLimit !== this.currentMiterLimit) {\n      this.appliedMiterLimit = this.currentMiterLimit;\n      this.nativeContext.miterLimit = this.appliedMiterLimit;\n    }\n\n    this.nativeContext.stroke();\n  };\n\n  function CVCompElement(data, globalData, comp) {\n    this.completeLayers = false;\n    this.layers = data.layers;\n    this.pendingElements = [];\n    this.elements = createSizedArray(this.layers.length);\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n  CVCompElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.beginPath();\n    ctx.moveTo(0, 0);\n    ctx.lineTo(this.data.w, 0);\n    ctx.lineTo(this.data.w, this.data.h);\n    ctx.lineTo(0, this.data.h);\n    ctx.lineTo(0, 0);\n    ctx.clip();\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  CVCompElement.prototype.destroy = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.layers = null;\n    this.elements = null;\n  };\n\n  CVCompElement.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function CanvasRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: config && config.context || null,\n      progressiveLoad: config && config.progressiveLoad || false,\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      className: config && config.className || '',\n      id: config && config.id || '',\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.renderConfig.dpr = config && config.dpr || 1;\n\n    if (this.animationItem.wrapper) {\n      this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n    }\n\n    this.renderedFrame = -1;\n    this.globalData = {\n      frameNum: -1,\n      _mdf: false,\n      renderConfig: this.renderConfig,\n      currentGlobalAlpha: -1\n    };\n    this.contextData = new CVContextData();\n    this.elements = [];\n    this.pendingElements = [];\n    this.transformMat = new Matrix();\n    this.completeLayers = false;\n    this.rendererType = 'canvas';\n\n    if (this.renderConfig.clearCanvas) {\n      this.ctxTransform = this.contextData.transform.bind(this.contextData);\n      this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n      this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n      this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n      this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n      this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n      this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n      this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n      this.ctxFill = this.contextData.fill.bind(this.contextData);\n      this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n      this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n      this.save = this.contextData.save.bind(this.contextData);\n    }\n  }\n\n  extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n  CanvasRenderer.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function HBaseElement() {}\n\n  HBaseElement.prototype = {\n    checkBlendMode: function checkBlendMode() {},\n    initRendererElement: function initRendererElement() {\n      this.baseElement = createTag(this.data.tg || 'div');\n\n      if (this.data.hasMask) {\n        this.svgElement = createNS('svg');\n        this.layerElement = createNS('g');\n        this.maskedElement = this.layerElement;\n        this.svgElement.appendChild(this.layerElement);\n        this.baseElement.appendChild(this.svgElement);\n      } else {\n        this.layerElement = this.baseElement;\n      }\n\n      styleDiv(this.baseElement);\n    },\n    createContainerElements: function createContainerElements() {\n      this.renderableEffectsManager = new CVEffects(this);\n      this.transformedElement = this.baseElement;\n      this.maskedElement = this.layerElement;\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n      if (this.finalTransform._matMdf) {\n        var matrixValue = this.finalTransform.mat.toCSS();\n        transformedElementStyle.transform = matrixValue;\n        transformedElementStyle.webkitTransform = matrixValue;\n      }\n\n      if (this.finalTransform._opMdf) {\n        transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderFrame: function renderFrame() {\n      // If it is exported as hidden (data.hd === true) no need to render\n      // If it is not visible no need to render\n      if (this.data.hd || this.hidden) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderElement();\n      this.renderInnerContent();\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.layerElement = null;\n      this.transformedElement = null;\n\n      if (this.matteElement) {\n        this.matteElement = null;\n      }\n\n      if (this.maskManager) {\n        this.maskManager.destroy();\n        this.maskManager = null;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n    },\n    addEffects: function addEffects() {},\n    setMatte: function setMatte() {}\n  };\n  HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n  HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n  HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n  function HSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n  HSolidElement.prototype.createContent = function () {\n    var rect;\n\n    if (this.data.hasMask) {\n      rect = createNS('rect');\n      rect.setAttribute('width', this.data.sw);\n      rect.setAttribute('height', this.data.sh);\n      rect.setAttribute('fill', this.data.sc);\n      this.svgElement.setAttribute('width', this.data.sw);\n      this.svgElement.setAttribute('height', this.data.sh);\n    } else {\n      rect = createTag('div');\n      rect.style.width = this.data.sw + 'px';\n      rect.style.height = this.data.sh + 'px';\n      rect.style.backgroundColor = this.data.sc;\n    }\n\n    this.layerElement.appendChild(rect);\n  };\n\n  function HShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.shapesContainer = createNS('g');\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n  HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n  HShapeElement.prototype.createContent = function () {\n    var cont;\n    this.baseElement.style.fontSize = 0;\n\n    if (this.data.hasMask) {\n      this.layerElement.appendChild(this.shapesContainer);\n      cont = this.svgElement;\n    } else {\n      cont = createNS('svg');\n      var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n      cont.setAttribute('width', size.w);\n      cont.setAttribute('height', size.h);\n      cont.appendChild(this.shapesContainer);\n      this.layerElement.appendChild(cont);\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n    this.filterUniqueShapes();\n    this.shapeCont = cont;\n  };\n\n  HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n    var i;\n    var len = transformers.length;\n\n    for (i = 0; i < len; i += 1) {\n      point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n    }\n\n    return point;\n  };\n\n  HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n    var shape = item.sh.v;\n    var transformers = item.transformers;\n    var i;\n    var len = shape._length;\n    var vPoint;\n    var oPoint;\n    var nextIPoint;\n    var nextVPoint;\n\n    if (len <= 1) {\n      return;\n    }\n\n    for (i = 0; i < len - 1; i += 1) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n\n    if (shape.c) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n  };\n\n  HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n    this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n    var bounds = this.shapeBoundingBox;\n    boundingBox.x = bmMin(bounds.left, boundingBox.x);\n    boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n    boundingBox.y = bmMin(bounds.top, boundingBox.y);\n    boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n  };\n\n  HShapeElement.prototype.shapeBoundingBox = {\n    left: 0,\n    right: 0,\n    top: 0,\n    bottom: 0\n  };\n  HShapeElement.prototype.tempBoundingBox = {\n    x: 0,\n    xMax: 0,\n    y: 0,\n    yMax: 0,\n    width: 0,\n    height: 0\n  };\n\n  HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n    var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n    for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n      // eslint-disable-line no-plusplus\n      b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n      a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n      c = 3 * p1[i] - 3 * p0[i];\n      b |= 0; // eslint-disable-line no-bitwise\n\n      a |= 0; // eslint-disable-line no-bitwise\n\n      c |= 0; // eslint-disable-line no-bitwise\n\n      if (a === 0 && b === 0) {//\n      } else if (a === 0) {\n        t = -c / b;\n\n        if (t > 0 && t < 1) {\n          bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n        }\n      } else {\n        b2ac = b * b - 4 * c * a;\n\n        if (b2ac >= 0) {\n          t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n          if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n          t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n          if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n        }\n      }\n    }\n\n    this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n    this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n    this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n    this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n  };\n\n  HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n    return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n  };\n\n  HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n    var i;\n    var len = itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (itemsData[i] && itemsData[i].sh) {\n        this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n      } else if (itemsData[i] && itemsData[i].it) {\n        this.calculateBoundingBox(itemsData[i].it, boundingBox);\n      } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n        this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n      }\n    }\n  };\n\n  HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n    var width = 0;\n\n    if (widthProperty.keyframes) {\n      for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n        var kfw = widthProperty.keyframes[i].s;\n\n        if (kfw > width) {\n          width = kfw;\n        }\n      }\n\n      width *= widthProperty.mult;\n    } else {\n      width = widthProperty.v * widthProperty.mult;\n    }\n\n    boundingBox.x -= width;\n    boundingBox.xMax += width;\n    boundingBox.y -= width;\n    boundingBox.yMax += width;\n  };\n\n  HShapeElement.prototype.currentBoxContains = function (box) {\n    return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n  };\n\n  HShapeElement.prototype.renderInnerContent = function () {\n    this._renderShapeFrame();\n\n    if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n      var tempBoundingBox = this.tempBoundingBox;\n      var max = 999999;\n      tempBoundingBox.x = max;\n      tempBoundingBox.xMax = -max;\n      tempBoundingBox.y = max;\n      tempBoundingBox.yMax = -max;\n      this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n      tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n      tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n      if (this.currentBoxContains(tempBoundingBox)) {\n        return;\n      }\n\n      var changed = false;\n\n      if (this.currentBBox.w !== tempBoundingBox.width) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.shapeCont.setAttribute('width', tempBoundingBox.width);\n        changed = true;\n      }\n\n      if (this.currentBBox.h !== tempBoundingBox.height) {\n        this.currentBBox.h = tempBoundingBox.height;\n        this.shapeCont.setAttribute('height', tempBoundingBox.height);\n        changed = true;\n      }\n\n      if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.currentBBox.h = tempBoundingBox.height;\n        this.currentBBox.x = tempBoundingBox.x;\n        this.currentBBox.y = tempBoundingBox.y;\n        this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        var shapeStyle = this.shapeCont.style;\n        var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        shapeStyle.transform = shapeTransform;\n        shapeStyle.webkitTransform = shapeTransform;\n      }\n    }\n  };\n\n  function HTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.textPaths = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n    this.renderType = 'svg';\n    this.isMasked = false;\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n  HTextElement.prototype.createContent = function () {\n    this.isMasked = this.checkMasks();\n\n    if (this.isMasked) {\n      this.renderType = 'svg';\n      this.compW = this.comp.data.w;\n      this.compH = this.comp.data.h;\n      this.svgElement.setAttribute('width', this.compW);\n      this.svgElement.setAttribute('height', this.compH);\n      var g = createNS('g');\n      this.maskedElement.appendChild(g);\n      this.innerElem = g;\n    } else {\n      this.renderType = 'html';\n      this.innerElem = this.layerElement;\n    }\n\n    this.checkParenting();\n  };\n\n  HTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var innerElemStyle = this.innerElem.style;\n    var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n    innerElemStyle.fill = textColor;\n    innerElemStyle.color = textColor;\n\n    if (documentData.sc) {\n      innerElemStyle.stroke = this.buildColor(documentData.sc);\n      innerElemStyle.strokeWidth = documentData.sw + 'px';\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (!this.globalData.fontManager.chars) {\n      innerElemStyle.fontSize = documentData.finalSize + 'px';\n      innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n      if (fontData.fClass) {\n        this.innerElem.className = fontData.fClass;\n      } else {\n        innerElemStyle.fontFamily = fontData.fFamily;\n        var fWeight = documentData.fWeight;\n        var fStyle = documentData.fStyle;\n        innerElemStyle.fontStyle = fStyle;\n        innerElemStyle.fontWeight = fWeight;\n      }\n    }\n\n    var i;\n    var len;\n    var letters = documentData.l;\n    len = letters.length;\n    var tSpan;\n    var tParent;\n    var tCont;\n    var matrixHelper = this.mHelper;\n    var shapes;\n    var shapeStr = '';\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.globalData.fontManager.chars) {\n        if (!this.textPaths[cnt]) {\n          tSpan = createNS('path');\n          tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n          tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n          tSpan.setAttribute('stroke-miterlimit', '4');\n        } else {\n          tSpan = this.textPaths[cnt];\n        }\n\n        if (!this.isMasked) {\n          if (this.textSpans[cnt]) {\n            tParent = this.textSpans[cnt];\n            tCont = tParent.children[0];\n          } else {\n            tParent = createTag('div');\n            tParent.style.lineHeight = 0;\n            tCont = createNS('svg');\n            tCont.appendChild(tSpan);\n            styleDiv(tParent);\n          }\n        }\n      } else if (!this.isMasked) {\n        if (this.textSpans[cnt]) {\n          tParent = this.textSpans[cnt];\n          tSpan = this.textPaths[cnt];\n        } else {\n          tParent = createTag('span');\n          styleDiv(tParent);\n          tSpan = createTag('span');\n          styleDiv(tSpan);\n          tParent.appendChild(tSpan);\n        }\n      } else {\n        tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n      } // tSpan.setAttribute('visibility', 'hidden');\n\n\n      if (this.globalData.fontManager.chars) {\n        var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n        var shapeData;\n\n        if (charData) {\n          shapeData = charData.data;\n        } else {\n          shapeData = null;\n        }\n\n        matrixHelper.reset();\n\n        if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n          shapes = shapeData.shapes[0].it;\n          matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n          shapeStr = this.createPathShape(matrixHelper, shapes);\n          tSpan.setAttribute('d', shapeStr);\n        }\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent);\n\n          if (shapeData && shapeData.shapes) {\n            // document.body.appendChild is needed to get exact measure of shape\n            document.body.appendChild(tCont);\n            var boundingBox = tCont.getBBox();\n            tCont.setAttribute('width', boundingBox.width + 2);\n            tCont.setAttribute('height', boundingBox.height + 2);\n            tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n            var tContStyle = tCont.style;\n            var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n            tContStyle.transform = tContTranslation;\n            tContStyle.webkitTransform = tContTranslation;\n            letters[i].yOffset = boundingBox.y - 1;\n          } else {\n            tCont.setAttribute('width', 1);\n            tCont.setAttribute('height', 1);\n          }\n\n          tParent.appendChild(tCont);\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } else {\n        tSpan.textContent = letters[i].val;\n        tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent); //\n\n          var tStyle = tSpan.style;\n          var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n          tStyle.transform = tSpanTranslation;\n          tStyle.webkitTransform = tSpanTranslation;\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } //\n\n\n      if (!this.isMasked) {\n        this.textSpans[cnt] = tParent;\n      } else {\n        this.textSpans[cnt] = tSpan;\n      }\n\n      this.textSpans[cnt].style.display = 'block';\n      this.textPaths[cnt] = tSpan;\n      cnt += 1;\n    }\n\n    while (cnt < this.textSpans.length) {\n      this.textSpans[cnt].style.display = 'none';\n      cnt += 1;\n    }\n  };\n\n  HTextElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    var svgStyle;\n\n    if (this.data.singleShape) {\n      if (!this._isFirstFrame && !this.lettersChangedFlag) {\n        return;\n      }\n\n      if (this.isMasked && this.finalTransform._matMdf) {\n        // Todo Benchmark if using this is better than getBBox\n        this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n        svgStyle = this.svgElement.style;\n        var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n        svgStyle.transform = translation;\n        svgStyle.webkitTransform = translation;\n      }\n    }\n\n    this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n    if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n      return;\n    }\n\n    var i;\n    var len;\n    var count = 0;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var textSpan;\n    var textPath;\n\n    for (i = 0; i < len; i += 1) {\n      if (letters[i].n) {\n        count += 1;\n      } else {\n        textSpan = this.textSpans[i];\n        textPath = this.textPaths[i];\n        renderedLetter = renderedLetters[count];\n        count += 1;\n\n        if (renderedLetter._mdf.m) {\n          if (!this.isMasked) {\n            textSpan.style.webkitTransform = renderedLetter.m;\n            textSpan.style.transform = renderedLetter.m;\n          } else {\n            textSpan.setAttribute('transform', renderedLetter.m);\n          }\n        } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n        textSpan.style.opacity = renderedLetter.o;\n\n        if (renderedLetter.sw && renderedLetter._mdf.sw) {\n          textPath.setAttribute('stroke-width', renderedLetter.sw);\n        }\n\n        if (renderedLetter.sc && renderedLetter._mdf.sc) {\n          textPath.setAttribute('stroke', renderedLetter.sc);\n        }\n\n        if (renderedLetter.fc && renderedLetter._mdf.fc) {\n          textPath.setAttribute('fill', renderedLetter.fc);\n          textPath.style.color = renderedLetter.fc;\n        }\n      }\n    }\n\n    if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n      var boundingBox = this.innerElem.getBBox();\n\n      if (this.currentBBox.w !== boundingBox.width) {\n        this.currentBBox.w = boundingBox.width;\n        this.svgElement.setAttribute('width', boundingBox.width);\n      }\n\n      if (this.currentBBox.h !== boundingBox.height) {\n        this.currentBBox.h = boundingBox.height;\n        this.svgElement.setAttribute('height', boundingBox.height);\n      }\n\n      var margin = 1;\n\n      if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n        this.currentBBox.w = boundingBox.width + margin * 2;\n        this.currentBBox.h = boundingBox.height + margin * 2;\n        this.currentBBox.x = boundingBox.x - margin;\n        this.currentBBox.y = boundingBox.y - margin;\n        this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        svgStyle = this.svgElement.style;\n        var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        svgStyle.transform = svgTransform;\n        svgStyle.webkitTransform = svgTransform;\n      }\n    }\n  };\n\n  function HCameraElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initHierarchy();\n    var getProp = PropertyFactory.getProp;\n    this.pe = getProp(this, data.pe, 0, 0, this);\n\n    if (data.ks.p.s) {\n      this.px = getProp(this, data.ks.p.x, 1, 0, this);\n      this.py = getProp(this, data.ks.p.y, 1, 0, this);\n      this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n    } else {\n      this.p = getProp(this, data.ks.p, 1, 0, this);\n    }\n\n    if (data.ks.a) {\n      this.a = getProp(this, data.ks.a, 1, 0, this);\n    }\n\n    if (data.ks.or.k.length && data.ks.or.k[0].to) {\n      var i;\n      var len = data.ks.or.k.length;\n\n      for (i = 0; i < len; i += 1) {\n        data.ks.or.k[i].to = null;\n        data.ks.or.k[i].ti = null;\n      }\n    }\n\n    this.or = getProp(this, data.ks.or, 1, degToRads, this);\n    this.or.sh = true;\n    this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n    this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n    this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n    this.mat = new Matrix();\n    this._prevMat = new Matrix();\n    this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n    this.finalTransform = {\n      mProp: this\n    };\n  }\n\n  extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n  HCameraElement.prototype.setup = function () {\n    var i;\n    var len = this.comp.threeDElements.length;\n    var comp;\n    var perspectiveStyle;\n    var containerStyle;\n\n    for (i = 0; i < len; i += 1) {\n      // [perspectiveElem,container]\n      comp = this.comp.threeDElements[i];\n\n      if (comp.type === '3d') {\n        perspectiveStyle = comp.perspectiveElem.style;\n        containerStyle = comp.container.style;\n        var perspective = this.pe.v + 'px';\n        var origin = '0px 0px 0px';\n        var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n        perspectiveStyle.perspective = perspective;\n        perspectiveStyle.webkitPerspective = perspective;\n        containerStyle.transformOrigin = origin;\n        containerStyle.mozTransformOrigin = origin;\n        containerStyle.webkitTransformOrigin = origin;\n        perspectiveStyle.transform = matrix;\n        perspectiveStyle.webkitTransform = matrix;\n      }\n    }\n  };\n\n  HCameraElement.prototype.createElements = function () {};\n\n  HCameraElement.prototype.hide = function () {};\n\n  HCameraElement.prototype.renderFrame = function () {\n    var _mdf = this._isFirstFrame;\n    var i;\n    var len;\n\n    if (this.hierarchy) {\n      len = this.hierarchy.length;\n\n      for (i = 0; i < len; i += 1) {\n        _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n      }\n    }\n\n    if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n      this.mat.reset();\n\n      if (this.hierarchy) {\n        len = this.hierarchy.length - 1;\n\n        for (i = len; i >= 0; i -= 1) {\n          var mTransf = this.hierarchy[i].finalTransform.mProp;\n          this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n          this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n          this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n          this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n          this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n        }\n      }\n\n      if (this.p) {\n        this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n      } else {\n        this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n      }\n\n      if (this.a) {\n        var diffVector;\n\n        if (this.p) {\n          diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n        } else {\n          diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n        }\n\n        var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n        var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n        var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n        var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n        var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n        this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n      }\n\n      this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n      this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n      this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n      this.mat.translate(0, 0, this.pe.v);\n      var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n      if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n        len = this.comp.threeDElements.length;\n        var comp;\n        var perspectiveStyle;\n        var containerStyle;\n\n        for (i = 0; i < len; i += 1) {\n          comp = this.comp.threeDElements[i];\n\n          if (comp.type === '3d') {\n            if (hasMatrixChanged) {\n              var matValue = this.mat.toCSS();\n              containerStyle = comp.container.style;\n              containerStyle.transform = matValue;\n              containerStyle.webkitTransform = matValue;\n            }\n\n            if (this.pe._mdf) {\n              perspectiveStyle = comp.perspectiveElem.style;\n              perspectiveStyle.perspective = this.pe.v + 'px';\n              perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n            }\n          }\n        }\n\n        this.mat.clone(this._prevMat);\n      }\n    }\n\n    this._isFirstFrame = false;\n  };\n\n  HCameraElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  HCameraElement.prototype.destroy = function () {};\n\n  HCameraElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  function HImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n  HImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    var img = new Image();\n\n    if (this.data.hasMask) {\n      this.imageElem = createNS('image');\n      this.imageElem.setAttribute('width', this.assetData.w + 'px');\n      this.imageElem.setAttribute('height', this.assetData.h + 'px');\n      this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n      this.layerElement.appendChild(this.imageElem);\n      this.baseElement.setAttribute('width', this.assetData.w);\n      this.baseElement.setAttribute('height', this.assetData.h);\n    } else {\n      this.layerElement.appendChild(img);\n    }\n\n    img.crossOrigin = 'anonymous';\n    img.src = assetPath;\n\n    if (this.data.ln) {\n      this.baseElement.setAttribute('id', this.data.ln);\n    }\n  };\n\n  function HybridRendererBase(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      }\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([BaseRenderer], HybridRendererBase);\n  HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n  HybridRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newDOMElement = element.getBaseElement();\n\n    if (!newDOMElement) {\n      return;\n    }\n\n    var layer = this.layers[pos];\n\n    if (!layer.ddd || !this.supports3d) {\n      if (this.threeDElements) {\n        this.addTo3dContainer(newDOMElement, pos);\n      } else {\n        var i = 0;\n        var nextDOMElement;\n        var nextLayer;\n        var tmpDOMElement;\n\n        while (i < pos) {\n          if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n            nextLayer = this.elements[i];\n            tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n            nextDOMElement = tmpDOMElement || nextDOMElement;\n          }\n\n          i += 1;\n        }\n\n        if (nextDOMElement) {\n          if (!layer.ddd || !this.supports3d) {\n            this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n          }\n        } else if (!layer.ddd || !this.supports3d) {\n          this.layerElement.appendChild(newDOMElement);\n        }\n      }\n    } else {\n      this.addTo3dContainer(newDOMElement, pos);\n    }\n  };\n\n  HybridRendererBase.prototype.createShape = function (data) {\n    if (!this.supports3d) {\n      return new SVGShapeElement(data, this.globalData, this);\n    }\n\n    return new HShapeElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createText = function (data) {\n    if (!this.supports3d) {\n      return new SVGTextLottieElement(data, this.globalData, this);\n    }\n\n    return new HTextElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createCamera = function (data) {\n    this.camera = new HCameraElement(data, this.globalData, this);\n    return this.camera;\n  };\n\n  HybridRendererBase.prototype.createImage = function (data) {\n    if (!this.supports3d) {\n      return new IImageElement(data, this.globalData, this);\n    }\n\n    return new HImageElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createSolid = function (data) {\n    if (!this.supports3d) {\n      return new ISolidElement(data, this.globalData, this);\n    }\n\n    return new HSolidElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n        return this.threeDElements[i].perspectiveElem;\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n    var perspectiveElem = createTag('div');\n    var style;\n    var containerStyle;\n    styleDiv(perspectiveElem);\n    var container = createTag('div');\n    styleDiv(container);\n\n    if (type === '3d') {\n      style = perspectiveElem.style;\n      style.width = this.globalData.compSize.w + 'px';\n      style.height = this.globalData.compSize.h + 'px';\n      var center = '50% 50%';\n      style.webkitTransformOrigin = center;\n      style.mozTransformOrigin = center;\n      style.transformOrigin = center;\n      containerStyle = container.style;\n      var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n      containerStyle.transform = matrix;\n      containerStyle.webkitTransform = matrix;\n    }\n\n    perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n    var threeDContainerData = {\n      container: container,\n      perspectiveElem: perspectiveElem,\n      startPos: pos,\n      endPos: pos,\n      type: type\n    };\n    this.threeDElements.push(threeDContainerData);\n    return threeDContainerData;\n  };\n\n  HybridRendererBase.prototype.build3dContainers = function () {\n    var i;\n    var len = this.layers.length;\n    var lastThreeDContainerData;\n    var currentContainer = '';\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n        if (currentContainer !== '3d') {\n          currentContainer = '3d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      } else {\n        if (currentContainer !== '2d') {\n          currentContainer = '2d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      }\n    }\n\n    len = this.threeDElements.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n    }\n  };\n\n  HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (pos <= this.threeDElements[i].endPos) {\n        var j = this.threeDElements[i].startPos;\n        var nextElement;\n\n        while (j < pos) {\n          if (this.elements[j] && this.elements[j].getBaseElement) {\n            nextElement = this.elements[j].getBaseElement();\n          }\n\n          j += 1;\n        }\n\n        if (nextElement) {\n          this.threeDElements[i].container.insertBefore(elem, nextElement);\n        } else {\n          this.threeDElements[i].container.appendChild(elem);\n        }\n\n        break;\n      }\n\n      i += 1;\n    }\n  };\n\n  HybridRendererBase.prototype.configAnimation = function (animData) {\n    var resizerElem = createTag('div');\n    var wrapper = this.animationItem.wrapper;\n    var style = resizerElem.style;\n    style.width = animData.w + 'px';\n    style.height = animData.h + 'px';\n    this.resizerElem = resizerElem;\n    styleDiv(resizerElem);\n    style.transformStyle = 'flat';\n    style.mozTransformStyle = 'flat';\n    style.webkitTransformStyle = 'flat';\n\n    if (this.renderConfig.className) {\n      resizerElem.setAttribute('class', this.renderConfig.className);\n    }\n\n    wrapper.appendChild(resizerElem);\n    style.overflow = 'hidden';\n    var svg = createNS('svg');\n    svg.setAttribute('width', '1');\n    svg.setAttribute('height', '1');\n    styleDiv(svg);\n    this.resizerElem.appendChild(svg);\n    var defs = createNS('defs');\n    svg.appendChild(defs);\n    this.data = animData; // Mask animation\n\n    this.setupGlobalData(animData, svg);\n    this.globalData.defs = defs;\n    this.layers = animData.layers;\n    this.layerElement = this.resizerElem;\n    this.build3dContainers();\n    this.updateContainerSize();\n  };\n\n  HybridRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.animationItem.container = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  HybridRendererBase.prototype.updateContainerSize = function () {\n    var elementWidth = this.animationItem.wrapper.offsetWidth;\n    var elementHeight = this.animationItem.wrapper.offsetHeight;\n    var elementRel = elementWidth / elementHeight;\n    var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n    var sx;\n    var sy;\n    var tx;\n    var ty;\n\n    if (animationRel > elementRel) {\n      sx = elementWidth / this.globalData.compSize.w;\n      sy = elementWidth / this.globalData.compSize.w;\n      tx = 0;\n      ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n    } else {\n      sx = elementHeight / this.globalData.compSize.h;\n      sy = elementHeight / this.globalData.compSize.h;\n      tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n      ty = 0;\n    }\n\n    var style = this.resizerElem.style;\n    style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n    style.transform = style.webkitTransform;\n  };\n\n  HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n  HybridRendererBase.prototype.hide = function () {\n    this.resizerElem.style.display = 'none';\n  };\n\n  HybridRendererBase.prototype.show = function () {\n    this.resizerElem.style.display = 'block';\n  };\n\n  HybridRendererBase.prototype.initItems = function () {\n    this.buildAllItems();\n\n    if (this.camera) {\n      this.camera.setup();\n    } else {\n      var cWidth = this.globalData.compSize.w;\n      var cHeight = this.globalData.compSize.h;\n      var i;\n      var len = this.threeDElements.length;\n\n      for (i = 0; i < len; i += 1) {\n        var style = this.threeDElements[i].perspectiveElem.style;\n        style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n        style.perspective = style.webkitPerspective;\n      }\n    }\n  };\n\n  HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n    var floatingContainer = createTag('div');\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  function HCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = !data.hasMask;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n  HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n  HCompElement.prototype.createContainerElements = function () {\n    this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n    if (this.data.hasMask) {\n      this.svgElement.setAttribute('width', this.data.w);\n      this.svgElement.setAttribute('height', this.data.h);\n      this.transformedElement = this.baseElement;\n    } else {\n      this.transformedElement = this.layerElement;\n    }\n  };\n\n  HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n    var j = 0;\n    var nextElement;\n\n    while (j < pos) {\n      if (this.elements[j] && this.elements[j].getBaseElement) {\n        nextElement = this.elements[j].getBaseElement();\n      }\n\n      j += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(elem, nextElement);\n    } else {\n      this.layerElement.appendChild(elem);\n    }\n  };\n\n  HCompElement.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  function HybridRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      },\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([HybridRendererBase], HybridRenderer);\n\n  HybridRenderer.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  var CompExpressionInterface = function () {\n    return function (comp) {\n      function _thisLayerFunction(name) {\n        var i = 0;\n        var len = comp.layers.length;\n\n        while (i < len) {\n          if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n            return comp.elements[i].layerInterface;\n          }\n\n          i += 1;\n        }\n\n        return null; // return {active:false};\n      }\n\n      Object.defineProperty(_thisLayerFunction, '_name', {\n        value: comp.data.nm\n      });\n      _thisLayerFunction.layer = _thisLayerFunction;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n      _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n      _thisLayerFunction.displayStartTime = 0;\n      _thisLayerFunction.numLayers = comp.layers.length;\n      return _thisLayerFunction;\n    };\n  }();\n\n  function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n  /* eslint-disable */\n\n  /*\r\n   Copyright 2014 David Bau.\r\n\r\n   Permission is hereby granted, free of charge, to any person obtaining\r\n   a copy of this software and associated documentation files (the\r\n   \"Software\"), to deal in the Software without restriction, including\r\n   without limitation the rights to use, copy, modify, merge, publish,\r\n   distribute, sublicense, and/or sell copies of the Software, and to\r\n   permit persons to whom the Software is furnished to do so, subject to\r\n   the following conditions:\r\n\r\n   The above copyright notice and this permission notice shall be\r\n   included in all copies or substantial portions of the Software.\r\n\r\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n   */\n  function seedRandom(pool, math) {\n    //\n    // The following constants are related to IEEE 754 limits.\n    //\n    var global = this,\n        width = 256,\n        // each RC4 output is 0 <= x < 256\n    chunks = 6,\n        // at least six RC4 outputs for each double\n    digits = 52,\n        // there are 52 significant digits in a double\n    rngname = 'random',\n        // rngname: name for Math.random and Math.seedrandom\n    startdenom = math.pow(width, chunks),\n        significance = math.pow(2, digits),\n        overflow = significance * 2,\n        mask = width - 1,\n        nodecrypto; // node.js crypto module, initialized at the bottom.\n    //\n    // seedrandom()\n    // This is the seedrandom function described above.\n    //\n\n    function seedrandom(seed, options, callback) {\n      var key = [];\n      options = options === true ? {\n        entropy: true\n      } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n      var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n      var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n      // randomness in every bit of the mantissa of the IEEE 754 value.\n\n      var prng = function prng() {\n        var n = arc4.g(chunks),\n            // Start with a numerator n < 2 ^ 48\n        d = startdenom,\n            //   and denominator d = 2 ^ 48.\n        x = 0; //   and no 'extra last byte'.\n\n        while (n < significance) {\n          // Fill up all significant digits by\n          n = (n + x) * width; //   shifting numerator and\n\n          d *= width; //   denominator and generating a\n\n          x = arc4.g(1); //   new least-significant-byte.\n        }\n\n        while (n >= overflow) {\n          // To avoid rounding up, before adding\n          n /= 2; //   last byte, shift everything\n\n          d /= 2; //   right using integer math until\n\n          x >>>= 1; //   we have exactly the desired bits.\n        }\n\n        return (n + x) / d; // Form the number within [0, 1).\n      };\n\n      prng.int32 = function () {\n        return arc4.g(4) | 0;\n      };\n\n      prng.quick = function () {\n        return arc4.g(4) / 0x100000000;\n      };\n\n      prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n      mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n      return (options.pass || callback || function (prng, seed, is_math_call, state) {\n        if (state) {\n          // Load the arc4 state from the given state if it has an S array.\n          if (state.S) {\n            copy(state, arc4);\n          } // Only provide the .state method if requested via options.state.\n\n\n          prng.state = function () {\n            return copy(arc4, {});\n          };\n        } // If called as a method of Math (Math.seedrandom()), mutate\n        // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n        if (is_math_call) {\n          math[rngname] = prng;\n          return seed;\n        } // Otherwise, it is a newer calling convention, so return the\n        // prng directly.\n        else return prng;\n      })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n    }\n\n    math['seed' + rngname] = seedrandom; //\n    // ARC4\n    //\n    // An ARC4 implementation.  The constructor takes a key in the form of\n    // an array of at most (width) integers that should be 0 <= x < (width).\n    //\n    // The g(count) method returns a pseudorandom integer that concatenates\n    // the next (count) outputs from ARC4.  Its return value is a number x\n    // that is in the range 0 <= x < (width ^ count).\n    //\n\n    function ARC4(key) {\n      var t,\n          keylen = key.length,\n          me = this,\n          i = 0,\n          j = me.i = me.j = 0,\n          s = me.S = []; // The empty key [] is treated as [0].\n\n      if (!keylen) {\n        key = [keylen++];\n      } // Set up S using the standard key scheduling algorithm.\n\n\n      while (i < width) {\n        s[i] = i++;\n      }\n\n      for (i = 0; i < width; i++) {\n        s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n        s[j] = t;\n      } // The \"g\" method returns the next (count) outputs as one number.\n\n\n      me.g = function (count) {\n        // Using instance members instead of closure state nearly doubles speed.\n        var t,\n            r = 0,\n            i = me.i,\n            j = me.j,\n            s = me.S;\n\n        while (count--) {\n          t = s[i = mask & i + 1];\n          r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n        }\n\n        me.i = i;\n        me.j = j;\n        return r; // For robust unpredictability, the function call below automatically\n        // discards an initial batch of values.  This is called RC4-drop[256].\n        // See http://google.com/search?q=rsa+fluhrer+response&btnI\n      };\n    } //\n    // copy()\n    // Copies internal state of ARC4 to or from a plain object.\n    //\n\n\n    function copy(f, t) {\n      t.i = f.i;\n      t.j = f.j;\n      t.S = f.S.slice();\n      return t;\n    } //\n    // flatten()\n    // Converts an object tree to nested arrays of strings.\n    //\n\n\n    function flatten(obj, depth) {\n      var result = [],\n          typ = _typeof$2(obj),\n          prop;\n\n      if (depth && typ == 'object') {\n        for (prop in obj) {\n          try {\n            result.push(flatten(obj[prop], depth - 1));\n          } catch (e) {}\n        }\n      }\n\n      return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n    } //\n    // mixkey()\n    // Mixes a string seed into a key that is an array of integers, and\n    // returns a shortened string seed that is equivalent to the result key.\n    //\n\n\n    function mixkey(seed, key) {\n      var stringseed = seed + '',\n          smear,\n          j = 0;\n\n      while (j < stringseed.length) {\n        key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n      }\n\n      return tostring(key);\n    } //\n    // autoseed()\n    // Returns an object for autoseeding, using window.crypto and Node crypto\n    // module if available.\n    //\n\n\n    function autoseed() {\n      try {\n        if (nodecrypto) {\n          return tostring(nodecrypto.randomBytes(width));\n        }\n\n        var out = new Uint8Array(width);\n        (global.crypto || global.msCrypto).getRandomValues(out);\n        return tostring(out);\n      } catch (e) {\n        var browser = global.navigator,\n            plugins = browser && browser.plugins;\n        return [+new Date(), global, plugins, global.screen, tostring(pool)];\n      }\n    } //\n    // tostring()\n    // Converts an array of charcodes to a string\n    //\n\n\n    function tostring(a) {\n      return String.fromCharCode.apply(0, a);\n    } //\n    // When seedrandom.js is loaded, we immediately mix a few bits\n    // from the built-in RNG into the entropy pool.  Because we do\n    // not want to interfere with deterministic PRNG state later,\n    // seedrandom will not call math.random on its own again after\n    // initialization.\n    //\n\n\n    mixkey(math.random(), pool); //\n    // Nodejs and AMD support: export the implementation as a module using\n    // either convention.\n    //\n    // End anonymous scope, and pass initial values.\n  }\n\n  ;\n\n  function initialize$2(BMMath) {\n    seedRandom([], BMMath);\n  }\n\n  var propTypes = {\n    SHAPE: 'shape'\n  };\n\n  function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n  var ExpressionManager = function () {\n    'use strict';\n\n    var ob = {};\n    var Math = BMMath;\n    var window = null;\n    var document = null;\n    var XMLHttpRequest = null;\n    var fetch = null;\n    var frames = null;\n    var _lottieGlobal = {};\n    initialize$2(BMMath);\n\n    function resetFrame() {\n      _lottieGlobal = {};\n    }\n\n    function $bm_isInstanceOfArray(arr) {\n      return arr.constructor === Array || arr.constructor === Float32Array;\n    }\n\n    function isNumerable(tOfV, v) {\n      return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n    }\n\n    function $bm_neg(a) {\n      var tOfA = _typeof$1(a);\n\n      if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n        return -a;\n      }\n\n      if ($bm_isInstanceOfArray(a)) {\n        var i;\n        var lenA = a.length;\n        var retArr = [];\n\n        for (i = 0; i < lenA; i += 1) {\n          retArr[i] = -a[i];\n        }\n\n        return retArr;\n      }\n\n      if (a.propType) {\n        return a.v;\n      }\n\n      return -a;\n    }\n\n    var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n    var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n    var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n    function sum(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n        return a + b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] += b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a + b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] + b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    var add = sum;\n\n    function sub(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        if (tOfA === 'string') {\n          a = parseInt(a, 10);\n        }\n\n        if (tOfB === 'string') {\n          b = parseInt(b, 10);\n        }\n\n        return a - b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] -= b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a - b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] - b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    function mul(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a * b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] * b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a * b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function div(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a / b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] / b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a / b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function mod(a, b) {\n      if (typeof a === 'string') {\n        a = parseInt(a, 10);\n      }\n\n      if (typeof b === 'string') {\n        b = parseInt(b, 10);\n      }\n\n      return a % b;\n    }\n\n    var $bm_sum = sum;\n    var $bm_sub = sub;\n    var $bm_mul = mul;\n    var $bm_div = div;\n    var $bm_mod = mod;\n\n    function clamp(num, min, max) {\n      if (min > max) {\n        var mm = max;\n        max = min;\n        min = mm;\n      }\n\n      return Math.min(Math.max(num, min), max);\n    }\n\n    function radiansToDegrees(val) {\n      return val / degToRads;\n    }\n\n    var radians_to_degrees = radiansToDegrees;\n\n    function degreesToRadians(val) {\n      return val * degToRads;\n    }\n\n    var degrees_to_radians = radiansToDegrees;\n    var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n    function length(arr1, arr2) {\n      if (typeof arr1 === 'number' || arr1 instanceof Number) {\n        arr2 = arr2 || 0;\n        return Math.abs(arr1 - arr2);\n      }\n\n      if (!arr2) {\n        arr2 = helperLengthArray;\n      }\n\n      var i;\n      var len = Math.min(arr1.length, arr2.length);\n      var addedLength = 0;\n\n      for (i = 0; i < len; i += 1) {\n        addedLength += Math.pow(arr2[i] - arr1[i], 2);\n      }\n\n      return Math.sqrt(addedLength);\n    }\n\n    function normalize(vec) {\n      return div(vec, length(vec));\n    }\n\n    function rgbToHsl(val) {\n      var r = val[0];\n      var g = val[1];\n      var b = val[2];\n      var max = Math.max(r, g, b);\n      var min = Math.min(r, g, b);\n      var h;\n      var s;\n      var l = (max + min) / 2;\n\n      if (max === min) {\n        h = 0; // achromatic\n\n        s = 0; // achromatic\n      } else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n        switch (max) {\n          case r:\n            h = (g - b) / d + (g < b ? 6 : 0);\n            break;\n\n          case g:\n            h = (b - r) / d + 2;\n            break;\n\n          case b:\n            h = (r - g) / d + 4;\n            break;\n\n          default:\n            break;\n        }\n\n        h /= 6;\n      }\n\n      return [h, s, l, val[3]];\n    }\n\n    function hue2rgb(p, q, t) {\n      if (t < 0) t += 1;\n      if (t > 1) t -= 1;\n      if (t < 1 / 6) return p + (q - p) * 6 * t;\n      if (t < 1 / 2) return q;\n      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n      return p;\n    }\n\n    function hslToRgb(val) {\n      var h = val[0];\n      var s = val[1];\n      var l = val[2];\n      var r;\n      var g;\n      var b;\n\n      if (s === 0) {\n        r = l; // achromatic\n\n        b = l; // achromatic\n\n        g = l; // achromatic\n      } else {\n        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        var p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1 / 3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1 / 3);\n      }\n\n      return [r, g, b, val[3]];\n    }\n\n    function linear(t, tMin, tMax, value1, value2) {\n      if (value1 === undefined || value2 === undefined) {\n        value1 = tMin;\n        value2 = tMax;\n        tMin = 0;\n        tMax = 1;\n      }\n\n      if (tMax < tMin) {\n        var _tMin = tMax;\n        tMax = tMin;\n        tMin = _tMin;\n      }\n\n      if (t <= tMin) {\n        return value1;\n      }\n\n      if (t >= tMax) {\n        return value2;\n      }\n\n      var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n      if (!value1.length) {\n        return value1 + (value2 - value1) * perc;\n      }\n\n      var i;\n      var len = value1.length;\n      var arr = createTypedArray('float32', len);\n\n      for (i = 0; i < len; i += 1) {\n        arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n      }\n\n      return arr;\n    }\n\n    function random(min, max) {\n      if (max === undefined) {\n        if (min === undefined) {\n          min = 0;\n          max = 1;\n        } else {\n          max = min;\n          min = undefined;\n        }\n      }\n\n      if (max.length) {\n        var i;\n        var len = max.length;\n\n        if (!min) {\n          min = createTypedArray('float32', len);\n        }\n\n        var arr = createTypedArray('float32', len);\n        var rnd = BMMath.random();\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = min[i] + rnd * (max[i] - min[i]);\n        }\n\n        return arr;\n      }\n\n      if (min === undefined) {\n        min = 0;\n      }\n\n      var rndm = BMMath.random();\n      return min + rndm * (max - min);\n    }\n\n    function createPath(points, inTangents, outTangents, closed) {\n      var i;\n      var len = points.length;\n      var path = shapePool.newElement();\n      path.setPathData(!!closed, len);\n      var arrPlaceholder = [0, 0];\n      var inVertexPoint;\n      var outVertexPoint;\n\n      for (i = 0; i < len; i += 1) {\n        inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n        outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n        path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n      }\n\n      return path;\n    }\n\n    function initiateExpression(elem, data, property) {\n      // Bail out if we don't want expressions\n      function noOp(_value) {\n        return _value;\n      }\n\n      if (!elem.globalData.renderConfig.runExpressions) {\n        return noOp;\n      }\n\n      var val = data.x;\n      var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n      var _needsRandom = val.indexOf('random') !== -1;\n\n      var elemType = elem.data.ty;\n      var transform;\n      var $bm_transform;\n      var content;\n      var effect;\n      var thisProperty = property;\n      thisProperty.valueAtTime = thisProperty.getValueAtTime;\n      Object.defineProperty(thisProperty, 'value', {\n        get: function get() {\n          return thisProperty.v;\n        }\n      });\n      elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n      elem.comp.displayStartTime = 0;\n      var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      var width = elem.data.sw ? elem.data.sw : 0;\n      var height = elem.data.sh ? elem.data.sh : 0;\n      var name = elem.data.nm;\n      var loopIn;\n      var loop_in;\n      var loopOut;\n      var loop_out;\n      var smooth;\n      var toWorld;\n      var fromWorld;\n      var fromComp;\n      var toComp;\n      var fromCompToSurface;\n      var position;\n      var rotation;\n      var anchorPoint;\n      var scale;\n      var thisLayer;\n      var thisComp;\n      var mask;\n      var valueAtTime;\n      var velocityAtTime;\n      var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n      var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n      var numKeys = property.kf ? data.k.length : 0;\n      var active = !this.data || this.data.hd !== true;\n\n      var wiggle = function wiggle(freq, amp) {\n        var iWiggle;\n        var j;\n        var lenWiggle = this.pv.length ? this.pv.length : 1;\n        var addedAmps = createTypedArray('float32', lenWiggle);\n        freq = 5;\n        var iterations = Math.floor(time * freq);\n        iWiggle = 0;\n        j = 0;\n\n        while (iWiggle < iterations) {\n          // var rnd = BMMath.random();\n          for (j = 0; j < lenWiggle; j += 1) {\n            addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n          }\n\n          iWiggle += 1;\n        } // var rnd2 = BMMath.random();\n\n\n        var periods = time * freq;\n        var perc = periods - Math.floor(periods);\n        var arr = createTypedArray('float32', lenWiggle);\n\n        if (lenWiggle > 1) {\n          for (j = 0; j < lenWiggle; j += 1) {\n            arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n            // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n          }\n\n          return arr;\n        }\n\n        return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n      }.bind(this);\n\n      if (thisProperty.loopIn) {\n        loopIn = thisProperty.loopIn.bind(thisProperty);\n        loop_in = loopIn;\n      }\n\n      if (thisProperty.loopOut) {\n        loopOut = thisProperty.loopOut.bind(thisProperty);\n        loop_out = loopOut;\n      }\n\n      if (thisProperty.smooth) {\n        smooth = thisProperty.smooth.bind(thisProperty);\n      }\n\n      function loopInDuration(type, duration) {\n        return loopIn(type, duration, true);\n      }\n\n      function loopOutDuration(type, duration) {\n        return loopOut(type, duration, true);\n      }\n\n      if (this.getValueAtTime) {\n        valueAtTime = this.getValueAtTime.bind(this);\n      }\n\n      if (this.getVelocityAtTime) {\n        velocityAtTime = this.getVelocityAtTime.bind(this);\n      }\n\n      var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n      function lookAt(elem1, elem2) {\n        var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n        var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n        var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n        return [yaw, pitch, 0];\n      }\n\n      function easeOut(t, tMin, tMax, val1, val2) {\n        return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function easeIn(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n      }\n\n      function ease(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function applyEase(fn, t, tMin, tMax, val1, val2) {\n        if (val1 === undefined) {\n          val1 = tMin;\n          val2 = tMax;\n        } else {\n          t = (t - tMin) / (tMax - tMin);\n        }\n\n        if (t > 1) {\n          t = 1;\n        } else if (t < 0) {\n          t = 0;\n        }\n\n        var mult = fn(t);\n\n        if ($bm_isInstanceOfArray(val1)) {\n          var iKey;\n          var lenKey = val1.length;\n          var arr = createTypedArray('float32', lenKey);\n\n          for (iKey = 0; iKey < lenKey; iKey += 1) {\n            arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n          }\n\n          return arr;\n        }\n\n        return (val2 - val1) * mult + val1;\n      }\n\n      function nearestKey(time) {\n        var iKey;\n        var lenKey = data.k.length;\n        var index;\n        var keyTime;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          index = 0;\n          keyTime = 0;\n        } else {\n          index = -1;\n          time *= elem.comp.globalData.frameRate;\n\n          if (time < data.k[0].t) {\n            index = 1;\n            keyTime = data.k[0].t;\n          } else {\n            for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n              if (time === data.k[iKey].t) {\n                index = iKey + 1;\n                keyTime = data.k[iKey].t;\n                break;\n              } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n                if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n                  index = iKey + 2;\n                  keyTime = data.k[iKey + 1].t;\n                } else {\n                  index = iKey + 1;\n                  keyTime = data.k[iKey].t;\n                }\n\n                break;\n              }\n            }\n\n            if (index === -1) {\n              index = iKey + 1;\n              keyTime = data.k[iKey].t;\n            }\n          }\n        }\n\n        var obKey = {};\n        obKey.index = index;\n        obKey.time = keyTime / elem.comp.globalData.frameRate;\n        return obKey;\n      }\n\n      function key(ind) {\n        var obKey;\n        var iKey;\n        var lenKey;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          throw new Error('The property has no keyframe at index ' + ind);\n        }\n\n        ind -= 1;\n        obKey = {\n          time: data.k[ind].t / elem.comp.globalData.frameRate,\n          value: []\n        };\n        var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n        lenKey = arr.length;\n\n        for (iKey = 0; iKey < lenKey; iKey += 1) {\n          obKey[iKey] = arr[iKey];\n          obKey.value[iKey] = arr[iKey];\n        }\n\n        return obKey;\n      }\n\n      function framesToTime(fr, fps) {\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return fr / fps;\n      }\n\n      function timeToFrames(t, fps) {\n        if (!t && t !== 0) {\n          t = time;\n        }\n\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return t * fps;\n      }\n\n      function seedRandom(seed) {\n        BMMath.seedrandom(randSeed + seed);\n      }\n\n      function sourceRectAtTime() {\n        return elem.sourceRectAtTime();\n      }\n\n      function substring(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substring(init);\n          }\n\n          return value.substring(init, end);\n        }\n\n        return '';\n      }\n\n      function substr(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substr(init);\n          }\n\n          return value.substr(init, end);\n        }\n\n        return '';\n      }\n\n      function posterizeTime(framesPerSecond) {\n        time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n        value = valueAtTime(time);\n      }\n\n      var time;\n      var velocity;\n      var value;\n      var text;\n      var textIndex;\n      var textTotal;\n      var selectorValue;\n      var index = elem.data.ind;\n      var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n      var parent;\n      var randSeed = Math.floor(Math.random() * 1000000);\n      var globalData = elem.globalData;\n\n      function executeExpression(_value) {\n        // globalData.pushExpression();\n        value = _value;\n\n        if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n          return value;\n        }\n\n        if (this.propType === 'textSelector') {\n          textIndex = this.textIndex;\n          textTotal = this.textTotal;\n          selectorValue = this.selectorValue;\n        }\n\n        if (!thisLayer) {\n          text = elem.layerInterface.text;\n          thisLayer = elem.layerInterface;\n          thisComp = elem.comp.compInterface;\n          toWorld = thisLayer.toWorld.bind(thisLayer);\n          fromWorld = thisLayer.fromWorld.bind(thisLayer);\n          fromComp = thisLayer.fromComp.bind(thisLayer);\n          toComp = thisLayer.toComp.bind(thisLayer);\n          mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n          fromCompToSurface = fromComp;\n        }\n\n        if (!transform) {\n          transform = elem.layerInterface('ADBE Transform Group');\n          $bm_transform = transform;\n\n          if (transform) {\n            anchorPoint = transform.anchorPoint;\n            /* position = transform.position;\r\n                      rotation = transform.rotation;\r\n                      scale = transform.scale; */\n          }\n        }\n\n        if (elemType === 4 && !content) {\n          content = thisLayer('ADBE Root Vectors Group');\n        }\n\n        if (!effect) {\n          effect = thisLayer(4);\n        }\n\n        hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n        if (hasParent && !parent) {\n          parent = elem.hierarchy[0].layerInterface;\n        }\n\n        time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n        if (_needsRandom) {\n          seedRandom(randSeed + time);\n        }\n\n        if (needsVelocity) {\n          velocity = velocityAtTime(time);\n        }\n\n        expression_function();\n        this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n        // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n        scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n        return scoped_bm_rt;\n      } // Bundlers will see these as dead code and unless we reference them\n\n\n      executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n      return executeExpression;\n    }\n\n    ob.initiateExpression = initiateExpression;\n    ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];\n    ob.resetFrame = resetFrame;\n    return ob;\n  }();\n\n  var Expressions = function () {\n    var ob = {};\n    ob.initExpressions = initExpressions;\n    ob.resetFrame = ExpressionManager.resetFrame;\n\n    function initExpressions(animation) {\n      var stackCount = 0;\n      var registers = [];\n\n      function pushExpression() {\n        stackCount += 1;\n      }\n\n      function popExpression() {\n        stackCount -= 1;\n\n        if (stackCount === 0) {\n          releaseInstances();\n        }\n      }\n\n      function registerExpressionProperty(expression) {\n        if (registers.indexOf(expression) === -1) {\n          registers.push(expression);\n        }\n      }\n\n      function releaseInstances() {\n        var i;\n        var len = registers.length;\n\n        for (i = 0; i < len; i += 1) {\n          registers[i].release();\n        }\n\n        registers.length = 0;\n      }\n\n      animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n      animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n      animation.renderer.globalData.pushExpression = pushExpression;\n      animation.renderer.globalData.popExpression = popExpression;\n      animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n    }\n\n    return ob;\n  }();\n\n  var MaskManagerInterface = function () {\n    function MaskInterface(mask, data) {\n      this._mask = mask;\n      this._data = data;\n    }\n\n    Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n      get: function get() {\n        if (this._mask.prop.k) {\n          this._mask.prop.getValue();\n        }\n\n        return this._mask.prop;\n      }\n    });\n    Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n      get: function get() {\n        if (this._mask.op.k) {\n          this._mask.op.getValue();\n        }\n\n        return this._mask.op.v * 100;\n      }\n    });\n\n    var MaskManager = function MaskManager(maskManager) {\n      var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n      var i;\n      var len = maskManager.viewData.length;\n\n      for (i = 0; i < len; i += 1) {\n        _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n      }\n\n      var maskFunction = function maskFunction(name) {\n        i = 0;\n\n        while (i < len) {\n          if (maskManager.masksProperties[i].nm === name) {\n            return _masksInterfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      };\n\n      return maskFunction;\n    };\n\n    return MaskManager;\n  }();\n\n  var ExpressionPropertyInterface = function () {\n    var defaultUnidimensionalValue = {\n      pv: 0,\n      v: 0,\n      mult: 1\n    };\n    var defaultMultidimensionalValue = {\n      pv: [0, 0, 0],\n      v: [0, 0, 0],\n      mult: 1\n    };\n\n    function completeProperty(expressionValue, property, type) {\n      Object.defineProperty(expressionValue, 'velocity', {\n        get: function get() {\n          return property.getVelocityAtTime(property.comp.currentFrame);\n        }\n      });\n      expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n      expressionValue.key = function (pos) {\n        if (!expressionValue.numKeys) {\n          return 0;\n        }\n\n        var value = '';\n\n        if ('s' in property.keyframes[pos - 1]) {\n          value = property.keyframes[pos - 1].s;\n        } else if ('e' in property.keyframes[pos - 2]) {\n          value = property.keyframes[pos - 2].e;\n        } else {\n          value = property.keyframes[pos - 2].s;\n        }\n\n        var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n        valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n        valueProp.value = type === 'unidimensional' ? value[0] : value;\n        return valueProp;\n      };\n\n      expressionValue.valueAtTime = property.getValueAtTime;\n      expressionValue.speedAtTime = property.getSpeedAtTime;\n      expressionValue.velocityAtTime = property.getVelocityAtTime;\n      expressionValue.propertyGroup = property.propertyGroup;\n    }\n\n    function UnidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultUnidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var val = property.pv * mult;\n      var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n      expressionValue.value = val;\n      completeProperty(expressionValue, property, 'unidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        val = property.v * mult;\n\n        if (expressionValue.value !== val) {\n          expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n          expressionValue.value = val;\n          completeProperty(expressionValue, property, 'unidimensional');\n        }\n\n        return expressionValue;\n      };\n    }\n\n    function MultidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultMultidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var len = property.data && property.data.l || property.pv.length;\n      var expressionValue = createTypedArray('float32', len);\n      var arrValue = createTypedArray('float32', len);\n      expressionValue.value = arrValue;\n      completeProperty(expressionValue, property, 'multidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        for (var i = 0; i < len; i += 1) {\n          arrValue[i] = property.v[i] * mult;\n          expressionValue[i] = arrValue[i];\n        }\n\n        return expressionValue;\n      };\n    } // TODO: try to avoid using this getter\n\n\n    function defaultGetter() {\n      return defaultUnidimensionalValue;\n    }\n\n    return function (property) {\n      if (!property) {\n        return defaultGetter;\n      }\n\n      if (property.propType === 'unidimensional') {\n        return UnidimensionalPropertyInterface(property);\n      }\n\n      return MultidimensionalPropertyInterface(property);\n    };\n  }();\n\n  var TransformExpressionInterface = function () {\n    return function (transform) {\n      function _thisFunction(name) {\n        switch (name) {\n          case 'scale':\n          case 'Scale':\n          case 'ADBE Scale':\n          case 6:\n            return _thisFunction.scale;\n\n          case 'rotation':\n          case 'Rotation':\n          case 'ADBE Rotation':\n          case 'ADBE Rotate Z':\n          case 10:\n            return _thisFunction.rotation;\n\n          case 'ADBE Rotate X':\n            return _thisFunction.xRotation;\n\n          case 'ADBE Rotate Y':\n            return _thisFunction.yRotation;\n\n          case 'position':\n          case 'Position':\n          case 'ADBE Position':\n          case 2:\n            return _thisFunction.position;\n\n          case 'ADBE Position_0':\n            return _thisFunction.xPosition;\n\n          case 'ADBE Position_1':\n            return _thisFunction.yPosition;\n\n          case 'ADBE Position_2':\n            return _thisFunction.zPosition;\n\n          case 'anchorPoint':\n          case 'AnchorPoint':\n          case 'Anchor Point':\n          case 'ADBE AnchorPoint':\n          case 1:\n            return _thisFunction.anchorPoint;\n\n          case 'opacity':\n          case 'Opacity':\n          case 11:\n            return _thisFunction.opacity;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'rotation', {\n        get: ExpressionPropertyInterface(transform.r || transform.rz)\n      });\n      Object.defineProperty(_thisFunction, 'zRotation', {\n        get: ExpressionPropertyInterface(transform.rz || transform.r)\n      });\n      Object.defineProperty(_thisFunction, 'xRotation', {\n        get: ExpressionPropertyInterface(transform.rx)\n      });\n      Object.defineProperty(_thisFunction, 'yRotation', {\n        get: ExpressionPropertyInterface(transform.ry)\n      });\n      Object.defineProperty(_thisFunction, 'scale', {\n        get: ExpressionPropertyInterface(transform.s)\n      });\n\n      var _px;\n\n      var _py;\n\n      var _pz;\n\n      var _transformFactory;\n\n      if (transform.p) {\n        _transformFactory = ExpressionPropertyInterface(transform.p);\n      } else {\n        _px = ExpressionPropertyInterface(transform.px);\n        _py = ExpressionPropertyInterface(transform.py);\n\n        if (transform.pz) {\n          _pz = ExpressionPropertyInterface(transform.pz);\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'position', {\n        get: function get() {\n          if (transform.p) {\n            return _transformFactory();\n          }\n\n          return [_px(), _py(), _pz ? _pz() : 0];\n        }\n      });\n      Object.defineProperty(_thisFunction, 'xPosition', {\n        get: ExpressionPropertyInterface(transform.px)\n      });\n      Object.defineProperty(_thisFunction, 'yPosition', {\n        get: ExpressionPropertyInterface(transform.py)\n      });\n      Object.defineProperty(_thisFunction, 'zPosition', {\n        get: ExpressionPropertyInterface(transform.pz)\n      });\n      Object.defineProperty(_thisFunction, 'anchorPoint', {\n        get: ExpressionPropertyInterface(transform.a)\n      });\n      Object.defineProperty(_thisFunction, 'opacity', {\n        get: ExpressionPropertyInterface(transform.o)\n      });\n      Object.defineProperty(_thisFunction, 'skew', {\n        get: ExpressionPropertyInterface(transform.sk)\n      });\n      Object.defineProperty(_thisFunction, 'skewAxis', {\n        get: ExpressionPropertyInterface(transform.sa)\n      });\n      Object.defineProperty(_thisFunction, 'orientation', {\n        get: ExpressionPropertyInterface(transform.or)\n      });\n      return _thisFunction;\n    };\n  }();\n\n  var LayerExpressionInterface = function () {\n    function getMatrix(time) {\n      var toWorldMat = new Matrix();\n\n      if (time !== undefined) {\n        var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n        propMatrix.clone(toWorldMat);\n      } else {\n        var transformMat = this._elem.finalTransform.mProp;\n        transformMat.applyToMatrix(toWorldMat);\n      }\n\n      return toWorldMat;\n    }\n\n    function toWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function toWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function fromWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function fromWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function applyPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n    }\n\n    function invertPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.inversePoint(arr);\n    }\n\n    function fromComp(arr) {\n      var toWorldMat = new Matrix();\n      toWorldMat.reset();\n\n      this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n        }\n\n        return toWorldMat.inversePoint(arr);\n      }\n\n      return toWorldMat.inversePoint(arr);\n    }\n\n    function sampleImage() {\n      return [1, 1, 1, 1];\n    }\n\n    return function (elem) {\n      var transformInterface;\n\n      function _registerMaskInterface(maskManager) {\n        _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n      }\n\n      function _registerEffectsInterface(effects) {\n        _thisLayerFunction.effect = effects;\n      }\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Root Vectors Group':\n          case 'Contents':\n          case 2:\n            return _thisLayerFunction.shapeInterface;\n\n          case 1:\n          case 6:\n          case 'Transform':\n          case 'transform':\n          case 'ADBE Transform Group':\n            return transformInterface;\n\n          case 4:\n          case 'ADBE Effect Parade':\n          case 'effects':\n          case 'Effects':\n            return _thisLayerFunction.effect;\n\n          case 'ADBE Text Properties':\n            return _thisLayerFunction.textInterface;\n\n          default:\n            return null;\n        }\n      }\n\n      _thisLayerFunction.getMatrix = getMatrix;\n      _thisLayerFunction.invertPoint = invertPoint;\n      _thisLayerFunction.applyPoint = applyPoint;\n      _thisLayerFunction.toWorld = toWorld;\n      _thisLayerFunction.toWorldVec = toWorldVec;\n      _thisLayerFunction.fromWorld = fromWorld;\n      _thisLayerFunction.fromWorldVec = fromWorldVec;\n      _thisLayerFunction.toComp = toWorld;\n      _thisLayerFunction.fromComp = fromComp;\n      _thisLayerFunction.sampleImage = sampleImage;\n      _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n      _thisLayerFunction._elem = elem;\n      transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n      var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n      Object.defineProperties(_thisLayerFunction, {\n        hasParent: {\n          get: function get() {\n            return elem.hierarchy.length;\n          }\n        },\n        parent: {\n          get: function get() {\n            return elem.hierarchy[0].layerInterface;\n          }\n        },\n        rotation: getDescriptor(transformInterface, 'rotation'),\n        scale: getDescriptor(transformInterface, 'scale'),\n        position: getDescriptor(transformInterface, 'position'),\n        opacity: getDescriptor(transformInterface, 'opacity'),\n        anchorPoint: anchorPointDescriptor,\n        anchor_point: anchorPointDescriptor,\n        transform: {\n          get: function get() {\n            return transformInterface;\n          }\n        },\n        active: {\n          get: function get() {\n            return elem.isInRange;\n          }\n        }\n      });\n      _thisLayerFunction.startTime = elem.data.st;\n      _thisLayerFunction.index = elem.data.ind;\n      _thisLayerFunction.source = elem.data.refId;\n      _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n      _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n      _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      _thisLayerFunction._name = elem.data.nm;\n      _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n      _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n      return _thisLayerFunction;\n    };\n  }();\n\n  var propertyGroupFactory = function () {\n    return function (interfaceFunction, parentPropertyGroup) {\n      return function (val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return parentPropertyGroup(val - 1);\n      };\n    };\n  }();\n\n  var PropertyInterface = function () {\n    return function (propertyName, propertyGroup) {\n      var interfaceFunction = {\n        _name: propertyName\n      };\n\n      function _propertyGroup(val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return propertyGroup(val - 1);\n      }\n\n      return _propertyGroup;\n    };\n  }();\n\n  var EffectsExpressionInterface = function () {\n    var ob = {\n      createEffectsInterface: createEffectsInterface\n    };\n\n    function createEffectsInterface(elem, propertyGroup) {\n      if (elem.effectsManager) {\n        var effectElements = [];\n        var effectsData = elem.data.ef;\n        var i;\n        var len = elem.effectsManager.effectElements.length;\n\n        for (i = 0; i < len; i += 1) {\n          effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n        }\n\n        var effects = elem.data.ef || [];\n\n        var groupInterface = function groupInterface(name) {\n          i = 0;\n          len = effects.length;\n\n          while (i < len) {\n            if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n              return effectElements[i];\n            }\n\n            i += 1;\n          }\n\n          return null;\n        };\n\n        Object.defineProperty(groupInterface, 'numProperties', {\n          get: function get() {\n            return effects.length;\n          }\n        });\n        return groupInterface;\n      }\n\n      return null;\n    }\n\n    function createGroupInterface(data, elements, propertyGroup, elem) {\n      function groupInterface(name) {\n        var effects = data.ef;\n        var i = 0;\n        var len = effects.length;\n\n        while (i < len) {\n          if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n            if (effects[i].ty === 5) {\n              return effectElements[i];\n            }\n\n            return effectElements[i]();\n          }\n\n          i += 1;\n        }\n\n        throw new Error();\n      }\n\n      var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n      var effectElements = [];\n      var i;\n      var len = data.ef.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (data.ef[i].ty === 5) {\n          effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n        } else {\n          effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n        }\n      }\n\n      if (data.mn === 'ADBE Color Control') {\n        Object.defineProperty(groupInterface, 'color', {\n          get: function get() {\n            return effectElements[0]();\n          }\n        });\n      }\n\n      Object.defineProperties(groupInterface, {\n        numProperties: {\n          get: function get() {\n            return data.np;\n          }\n        },\n        _name: {\n          value: data.nm\n        },\n        propertyGroup: {\n          value: _propertyGroup\n        }\n      });\n      groupInterface.enabled = data.en !== 0;\n      groupInterface.active = groupInterface.enabled;\n      return groupInterface;\n    }\n\n    function createValueInterface(element, type, elem, propertyGroup) {\n      var expressionProperty = ExpressionPropertyInterface(element.p);\n\n      function interfaceFunction() {\n        if (type === 10) {\n          return elem.comp.compInterface(element.p.v);\n        }\n\n        return expressionProperty();\n      }\n\n      if (element.p.setGroupProperty) {\n        element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n      }\n\n      return interfaceFunction;\n    }\n\n    return ob;\n  }();\n\n  var ShapePathInterface = function () {\n    return function pathInterfaceFactory(shape, view, propertyGroup) {\n      var prop = view.sh;\n\n      function interfaceFunction(val) {\n        if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n          return interfaceFunction.path;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        path: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        shape: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        ix: {\n          value: shape.ix\n        },\n        propertyIndex: {\n          value: shape.ix\n        },\n        mn: {\n          value: shape.mn\n        },\n        propertyGroup: {\n          value: propertyGroup\n        }\n      });\n      return interfaceFunction;\n    };\n  }();\n\n  var ShapeExpressionInterface = function () {\n    function iterateElements(shapes, view, propertyGroup) {\n      var arr = [];\n      var i;\n      var len = shapes ? shapes.length : 0;\n\n      for (i = 0; i < len; i += 1) {\n        if (shapes[i].ty === 'gr') {\n          arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'fl') {\n          arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'st') {\n          arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tm') {\n          arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n        } else if (shapes[i].ty === 'el') {\n          arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sr') {\n          arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sh') {\n          arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rc') {\n          arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rd') {\n          arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rp') {\n          arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'gf') {\n          arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else {\n          arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n        }\n      }\n\n      return arr;\n    }\n\n    function contentsInterfaceFactory(shape, view, propertyGroup) {\n      var interfaces;\n\n      var interfaceFunction = function _interfaceFunction(value) {\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        if (typeof value === 'number') {\n          return interfaces[value - 1];\n        }\n\n        return null;\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n      interfaceFunction.numProperties = interfaces.length;\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.transform = transformInterface;\n      interfaceFunction.propertyIndex = shape.cix;\n      interfaceFunction._name = shape.nm;\n      return interfaceFunction;\n    }\n\n    function groupInterfaceFactory(shape, view, propertyGroup) {\n      var interfaceFunction = function _interfaceFunction(value) {\n        switch (value) {\n          case 'ADBE Vectors Group':\n          case 'Contents':\n          case 2:\n            return interfaceFunction.content;\n          // Not necessary for now. Keeping them here in case a new case appears\n          // case 'ADBE Vector Transform Group':\n          // case 3:\n\n          default:\n            return interfaceFunction.transform;\n        }\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.content = content;\n      interfaceFunction.transform = transformInterface;\n      Object.defineProperty(interfaceFunction, '_name', {\n        get: function get() {\n          return shape.nm;\n        }\n      }); // interfaceFunction.content = interfaceFunction;\n\n      interfaceFunction.numProperties = shape.np;\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.nm = shape.nm;\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function fillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Start Point' || val === 'start point') {\n          return interfaceFunction.startPoint;\n        }\n\n        if (val === 'End Point' || val === 'end point') {\n          return interfaceFunction.endPoint;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        startPoint: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        endPoint: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        type: {\n          get: function get() {\n            return 'a';\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function defaultInterfaceFactory() {\n      function interfaceFunction() {\n        return null;\n      }\n\n      return interfaceFunction;\n    }\n\n    function strokeInterfaceFactory(shape, view, propertyGroup) {\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n      function addPropertyToDashOb(i) {\n        Object.defineProperty(dashOb, shape.d[i].nm, {\n          get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n        });\n      }\n\n      var i;\n      var len = shape.d ? shape.d.length : 0;\n      var dashOb = {};\n\n      for (i = 0; i < len; i += 1) {\n        addPropertyToDashOb(i);\n        view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n      }\n\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (val === 'Stroke Width' || val === 'stroke width') {\n          return interfaceFunction.strokeWidth;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        strokeWidth: {\n          get: ExpressionPropertyInterface(view.w)\n        },\n        dash: {\n          get: function get() {\n            return dashOb;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n      return interfaceFunction;\n    }\n\n    function trimInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === shape.e.ix || val === 'End' || val === 'end') {\n          return interfaceFunction.end;\n        }\n\n        if (val === shape.s.ix) {\n          return interfaceFunction.start;\n        }\n\n        if (val === shape.o.ix) {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.propertyGroup = propertyGroup;\n      Object.defineProperties(interfaceFunction, {\n        start: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        end: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function transformInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.a.ix === value || value === 'Anchor Point') {\n          return interfaceFunction.anchorPoint;\n        }\n\n        if (shape.o.ix === value || value === 'Opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (shape.p.ix === value || value === 'Position') {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.s.ix === value || value === 'Scale') {\n          return interfaceFunction.scale;\n        }\n\n        if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n          return interfaceFunction.skew;\n        }\n\n        if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n          return interfaceFunction.skewAxis;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n      view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n      view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (view.transform.mProps.sk) {\n        view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n        view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n      }\n\n      view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        opacity: {\n          get: ExpressionPropertyInterface(view.transform.mProps.o)\n        },\n        position: {\n          get: ExpressionPropertyInterface(view.transform.mProps.p)\n        },\n        anchorPoint: {\n          get: ExpressionPropertyInterface(view.transform.mProps.a)\n        },\n        scale: {\n          get: ExpressionPropertyInterface(view.transform.mProps.s)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(view.transform.mProps.r)\n        },\n        skew: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sk)\n        },\n        skewAxis: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sa)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.ty = 'tr';\n      interfaceFunction.mn = shape.mn;\n      interfaceFunction.propertyGroup = propertyGroup;\n      return interfaceFunction;\n    }\n\n    function ellipseInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.s.ix === value) {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function starInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.pt.ix === value) {\n          return interfaceFunction.points;\n        }\n\n        if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n          return interfaceFunction.outerRadius;\n        }\n\n        if (shape.os.ix === value) {\n          return interfaceFunction.outerRoundness;\n        }\n\n        if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n          return interfaceFunction.innerRadius;\n        }\n\n        if (shape.is && shape.is.ix === value) {\n          return interfaceFunction.innerRoundness;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n      prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n      prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (shape.ir) {\n        prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n        prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        points: {\n          get: ExpressionPropertyInterface(prop.pt)\n        },\n        outerRadius: {\n          get: ExpressionPropertyInterface(prop.or)\n        },\n        outerRoundness: {\n          get: ExpressionPropertyInterface(prop.os)\n        },\n        innerRadius: {\n          get: ExpressionPropertyInterface(prop.ir)\n        },\n        innerRoundness: {\n          get: ExpressionPropertyInterface(prop.is)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function rectInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.roundness;\n        }\n\n        if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        roundness: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function roundedInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.r.ix === value || value === 'Round Corners 1') {\n          return interfaceFunction.radius;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        radius: {\n          get: ExpressionPropertyInterface(prop.rd)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function repeaterInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.c.ix === value || value === 'Copies') {\n          return interfaceFunction.copies;\n        }\n\n        if (shape.o.ix === value || value === 'Offset') {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n      prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        copies: {\n          get: ExpressionPropertyInterface(prop.c)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(prop.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    return function (shapes, view, propertyGroup) {\n      var interfaces;\n\n      function _interfaceFunction(value) {\n        if (typeof value === 'number') {\n          value = value === undefined ? 1 : value;\n\n          if (value === 0) {\n            return propertyGroup;\n          }\n\n          return interfaces[value - 1];\n        }\n\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      function parentGroupWrapper() {\n        return propertyGroup;\n      }\n\n      _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n      interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n      _interfaceFunction.numProperties = interfaces.length;\n      _interfaceFunction._name = 'Contents';\n      return _interfaceFunction;\n    };\n  }();\n\n  var TextExpressionInterface = function () {\n    return function (elem) {\n      var _sourceText;\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Text Document':\n            return _thisLayerFunction.sourceText;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisLayerFunction, 'sourceText', {\n        get: function get() {\n          elem.textProperty.getValue();\n          var stringValue = elem.textProperty.currentData.t;\n\n          if (!_sourceText || stringValue !== _sourceText.value) {\n            _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n            // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n            _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n\n            Object.defineProperty(_sourceText, 'style', {\n              get: function get() {\n                return {\n                  fillColor: elem.textProperty.currentData.fc\n                };\n              }\n            });\n          }\n\n          return _sourceText;\n        }\n      });\n      return _thisLayerFunction;\n    };\n  }();\n\n  function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n  var FootageInterface = function () {\n    var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n      var currentPropertyName = '';\n      var currentProperty = elem.getFootageData();\n\n      function init() {\n        currentPropertyName = '';\n        currentProperty = elem.getFootageData();\n        return searchProperty;\n      }\n\n      function searchProperty(value) {\n        if (currentProperty[value]) {\n          currentPropertyName = value;\n          currentProperty = currentProperty[value];\n\n          if (_typeof(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        var propertyNameIndex = value.indexOf(currentPropertyName);\n\n        if (propertyNameIndex !== -1) {\n          var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n          currentProperty = currentProperty[index];\n\n          if (_typeof(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        return '';\n      }\n\n      return init;\n    };\n\n    var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n      function interfaceFunction(value) {\n        if (value === 'Outline') {\n          return interfaceFunction.outlineInterface();\n        }\n\n        return null;\n      }\n\n      interfaceFunction._name = 'Outline';\n      interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n      return interfaceFunction;\n    };\n\n    return function (elem) {\n      function _interfaceFunction(value) {\n        if (value === 'Data') {\n          return _interfaceFunction.dataInterface;\n        }\n\n        return null;\n      }\n\n      _interfaceFunction._name = 'Data';\n      _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n      return _interfaceFunction;\n    };\n  }();\n\n  var interfaces = {\n    layer: LayerExpressionInterface,\n    effects: EffectsExpressionInterface,\n    comp: CompExpressionInterface,\n    shape: ShapeExpressionInterface,\n    text: TextExpressionInterface,\n    footage: FootageInterface\n  };\n\n  function getInterface(type) {\n    return interfaces[type] || null;\n  }\n\n  var expressionHelpers = function () {\n    function searchExpressions(elem, data, prop) {\n      if (data.x) {\n        prop.k = true;\n        prop.x = true;\n        prop.initiateExpression = ExpressionManager.initiateExpression;\n        prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n      }\n    }\n\n    function getValueAtTime(frameNum) {\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastFrame) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n        this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n        this._cachingAtTime.lastFrame = frameNum;\n      }\n\n      return this._cachingAtTime.value;\n    }\n\n    function getSpeedAtTime(frameNum) {\n      var delta = -0.01;\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var speed = 0;\n\n      if (v1.length) {\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          speed += Math.pow(v2[i] - v1[i], 2);\n        }\n\n        speed = Math.sqrt(speed) * 100;\n      } else {\n        speed = 0;\n      }\n\n      return speed;\n    }\n\n    function getVelocityAtTime(frameNum) {\n      if (this.vel !== undefined) {\n        return this.vel;\n      }\n\n      var delta = -0.001; // frameNum += this.elem.data.st;\n\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var velocity;\n\n      if (v1.length) {\n        velocity = createTypedArray('float32', v1.length);\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          // removing frameRate\n          // if needed, don't add it here\n          // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n          velocity[i] = (v2[i] - v1[i]) / delta;\n        }\n      } else {\n        velocity = (v2 - v1) / delta;\n      }\n\n      return velocity;\n    }\n\n    function getStaticValueAtTime() {\n      return this.pv;\n    }\n\n    function setGroupProperty(propertyGroup) {\n      this.propertyGroup = propertyGroup;\n    }\n\n    return {\n      searchExpressions: searchExpressions,\n      getSpeedAtTime: getSpeedAtTime,\n      getVelocityAtTime: getVelocityAtTime,\n      getValueAtTime: getValueAtTime,\n      getStaticValueAtTime: getStaticValueAtTime,\n      setGroupProperty: setGroupProperty\n    };\n  }();\n\n  function addPropertyDecorator() {\n    function loopOut(type, duration, durationFlag) {\n      if (!this.k || !this.keyframes) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n      if (currentFrame <= lastKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var firstKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n        } else {\n          cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n        }\n\n        firstKeyFrame = lastKeyFrame - cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (iterations % 2 !== 0) {\n          return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n        var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n          }\n\n          return ret;\n        }\n\n        return (endV - initV) * repeats + current;\n      } else if (type === 'continue') {\n        var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(lastValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n          }\n\n          return ret;\n        }\n\n        return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n      }\n\n      return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function loopIn(type, duration, durationFlag) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var firstKeyFrame = keyframes[0].t;\n\n      if (currentFrame >= firstKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var lastKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        lastKeyFrame = keyframes[duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n        } else {\n          cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n        }\n\n        lastKeyFrame = firstKeyFrame + cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n        if (iterations % 2 === 0) {\n          return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n        var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n          }\n\n          return ret;\n        }\n\n        return current - (endV - initV) * repeats;\n      } else if (type === 'continue') {\n        var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(firstValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n          }\n\n          return ret;\n        }\n\n        return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n      }\n\n      return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function smooth(width, samples) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      width = (width || 0.4) * 0.5;\n      samples = Math.floor(samples || 5);\n\n      if (samples <= 1) {\n        return this.pv;\n      }\n\n      var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n      var initFrame = currentTime - width;\n      var endFrame = currentTime + width;\n      var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n      var i = 0;\n      var j = 0;\n      var value;\n\n      if (this.pv.length) {\n        value = createTypedArray('float32', this.pv.length);\n      } else {\n        value = 0;\n      }\n\n      var sampleValue;\n\n      while (i < samples) {\n        sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n        if (this.pv.length) {\n          for (j = 0; j < this.pv.length; j += 1) {\n            value[j] += sampleValue[j];\n          }\n        } else {\n          value += sampleValue;\n        }\n\n        i += 1;\n      }\n\n      if (this.pv.length) {\n        for (j = 0; j < this.pv.length; j += 1) {\n          value[j] /= samples;\n        }\n      } else {\n        value /= samples;\n      }\n\n      return value;\n    }\n\n    function getTransformValueAtTime(time) {\n      if (!this._transformCachingAtTime) {\n        this._transformCachingAtTime = {\n          v: new Matrix()\n        };\n      } /// /\n\n\n      var matrix = this._transformCachingAtTime.v;\n      matrix.cloneFromProps(this.pre.props);\n\n      if (this.appliedTransformations < 1) {\n        var anchor = this.a.getValueAtTime(time);\n        matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n      }\n\n      if (this.appliedTransformations < 2) {\n        var scale = this.s.getValueAtTime(time);\n        matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n      }\n\n      if (this.sk && this.appliedTransformations < 3) {\n        var skew = this.sk.getValueAtTime(time);\n        var skewAxis = this.sa.getValueAtTime(time);\n        matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n      }\n\n      if (this.r && this.appliedTransformations < 4) {\n        var rotation = this.r.getValueAtTime(time);\n        matrix.rotate(-rotation * this.r.mult);\n      } else if (!this.r && this.appliedTransformations < 4) {\n        var rotationZ = this.rz.getValueAtTime(time);\n        var rotationY = this.ry.getValueAtTime(time);\n        var rotationX = this.rx.getValueAtTime(time);\n        var orientation = this.or.getValueAtTime(time);\n        matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n      }\n\n      if (this.data.p && this.data.p.s) {\n        var positionX = this.px.getValueAtTime(time);\n        var positionY = this.py.getValueAtTime(time);\n\n        if (this.data.p.z) {\n          var positionZ = this.pz.getValueAtTime(time);\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n        } else {\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n        }\n      } else {\n        var position = this.p.getValueAtTime(time);\n        matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n      }\n\n      return matrix; /// /\n    }\n\n    function getTransformStaticValueAtTime() {\n      return this.v.clone(new Matrix());\n    }\n\n    var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n    TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n      var prop = getTransformProperty(elem, data, container);\n\n      if (prop.dynamicProperties.length) {\n        prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      return prop;\n    };\n\n    var propertyGetProp = PropertyFactory.getProp;\n\n    PropertyFactory.getProp = function (elem, data, type, mult, container) {\n      var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n      // prop.loopOut = loopOut;\n      // prop.loopIn = loopIn;\n\n      if (prop.kf) {\n        prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      prop.loopOut = loopOut;\n      prop.loopIn = loopIn;\n      prop.smooth = smooth;\n      prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n      prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n      prop.numKeys = data.a === 1 ? data.k.length : 0;\n      prop.propertyIndex = data.ix;\n      var value = 0;\n\n      if (type !== 0) {\n        value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n      }\n\n      prop._cachingAtTime = {\n        lastFrame: initialDefaultFrame,\n        lastIndex: 0,\n        value: value\n      };\n      expressionHelpers.searchExpressions(elem, data, prop);\n\n      if (prop.k) {\n        container.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n\n    function getShapeValueAtTime(frameNum) {\n      // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n      if (!this._cachingAtTime) {\n        this._cachingAtTime = {\n          shapeValue: shapePool.clone(this.pv),\n          lastIndex: 0,\n          lastTime: initialDefaultFrame\n        };\n      }\n\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastTime) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n        this._cachingAtTime.lastTime = frameNum;\n        this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n      }\n\n      return this._cachingAtTime.shapeValue;\n    }\n\n    var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n    var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n    function ShapeExpressions() {}\n\n    ShapeExpressions.prototype = {\n      vertices: function vertices(prop, time) {\n        if (this.k) {\n          this.getValue();\n        }\n\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        var i;\n        var len = shapePath._length;\n        var vertices = shapePath[prop];\n        var points = shapePath.v;\n        var arr = createSizedArray(len);\n\n        for (i = 0; i < len; i += 1) {\n          if (prop === 'i' || prop === 'o') {\n            arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n          } else {\n            arr[i] = [vertices[i][0], vertices[i][1]];\n          }\n        }\n\n        return arr;\n      },\n      points: function points(time) {\n        return this.vertices('v', time);\n      },\n      inTangents: function inTangents(time) {\n        return this.vertices('i', time);\n      },\n      outTangents: function outTangents(time) {\n        return this.vertices('o', time);\n      },\n      isClosed: function isClosed() {\n        return this.v.c;\n      },\n      pointOnPath: function pointOnPath(perc, time) {\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        if (!this._segmentsLength) {\n          this._segmentsLength = bez.getSegmentsLength(shapePath);\n        }\n\n        var segmentsLength = this._segmentsLength;\n        var lengths = segmentsLength.lengths;\n        var lengthPos = segmentsLength.totalLength * perc;\n        var i = 0;\n        var len = lengths.length;\n        var accumulatedLength = 0;\n        var pt;\n\n        while (i < len) {\n          if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n            var initIndex = i;\n            var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n            var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n            pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n            break;\n          } else {\n            accumulatedLength += lengths[i].addedLength;\n          }\n\n          i += 1;\n        }\n\n        if (!pt) {\n          pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n        }\n\n        return pt;\n      },\n      vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n        // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n        if (perc == 1) {\n          // eslint-disable-line eqeqeq\n          perc = this.v.c;\n        } else if (perc == 0) {\n          // eslint-disable-line eqeqeq\n          perc = 0.999;\n        }\n\n        var pt1 = this.pointOnPath(perc, time);\n        var pt2 = this.pointOnPath(perc + 0.001, time);\n        var xLength = pt2[0] - pt1[0];\n        var yLength = pt2[1] - pt1[1];\n        var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n        if (magnitude === 0) {\n          return [0, 0];\n        }\n\n        var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n        return unitVector;\n      },\n      tangentOnPath: function tangentOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'tangent');\n      },\n      normalOnPath: function normalOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'normal');\n      },\n      setGroupProperty: expressionHelpers.setGroupProperty,\n      getValueAtTime: expressionHelpers.getStaticValueAtTime\n    };\n    extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n    extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n    KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n    KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n    var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n    ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n      var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n      prop.propertyIndex = data.ix;\n      prop.lock = false;\n\n      if (type === 3) {\n        expressionHelpers.searchExpressions(elem, data.pt, prop);\n      } else if (type === 4) {\n        expressionHelpers.searchExpressions(elem, data.ks, prop);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n  }\n\n  function initialize$1() {\n    addPropertyDecorator();\n  }\n\n  function addDecorator() {\n    function searchExpressions() {\n      if (this.data.d.x) {\n        this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n        this.addEffect(this.getExpressionValue.bind(this));\n        return true;\n      }\n\n      return null;\n    }\n\n    TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n      var newValue = this.calculateExpression(text);\n\n      if (currentValue.t !== newValue) {\n        var newData = {};\n        this.copyData(newData, currentValue);\n        newData.t = newValue.toString();\n        newData.__complete = false;\n        return newData;\n      }\n\n      return currentValue;\n    };\n\n    TextProperty.prototype.searchProperty = function () {\n      var isKeyframed = this.searchKeyframes();\n      var hasExpressions = this.searchExpressions();\n      this.kf = isKeyframed || hasExpressions;\n      return this.kf;\n    };\n\n    TextProperty.prototype.searchExpressions = searchExpressions;\n  }\n\n  function initialize() {\n    addDecorator();\n  }\n\n  function SVGComposableEffect() {}\n\n  SVGComposableEffect.prototype = {\n    createMergeNode: function createMergeNode(resultId, ins) {\n      var feMerge = createNS('feMerge');\n      feMerge.setAttribute('result', resultId);\n      var feMergeNode;\n      var i;\n\n      for (i = 0; i < ins.length; i += 1) {\n        feMergeNode = createNS('feMergeNode');\n        feMergeNode.setAttribute('in', ins[i]);\n        feMerge.appendChild(feMergeNode);\n        feMerge.appendChild(feMergeNode);\n      }\n\n      return feMerge;\n    }\n  };\n\n  var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0';\n\n  function SVGTintFilter(filter, filterManager, elem, id, source) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');\n    this.linearFilter = feColorMatrix;\n    feColorMatrix.setAttribute('result', id + '_tint_1');\n    filter.appendChild(feColorMatrix);\n    feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id + '_tint_2');\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n    var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n    filter.appendChild(feMerge);\n  }\n\n  extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n  SVGTintFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var colorBlack = this.filterManager.effectElements[0].p.v;\n      var colorWhite = this.filterManager.effectElements[1].p.v;\n      var opacity = this.filterManager.effectElements[2].p.v / 100;\n      this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\n      this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0');\n    }\n  };\n\n  function SVGFillFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id);\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n  }\n\n  SVGFillFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color = this.filterManager.effectElements[2].p.v;\n      var opacity = this.filterManager.effectElements[6].p.v;\n      this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n    }\n  };\n\n  function SVGStrokeEffect(fil, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.elem = elem;\n    this.paths = [];\n  }\n\n  SVGStrokeEffect.prototype.initialize = function () {\n    var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n    var path;\n    var groupPath;\n    var i;\n    var len;\n\n    if (this.filterManager.effectElements[1].p.v === 1) {\n      len = this.elem.maskManager.masksProperties.length;\n      i = 0;\n    } else {\n      i = this.filterManager.effectElements[0].p.v - 1;\n      len = i + 1;\n    }\n\n    groupPath = createNS('g');\n    groupPath.setAttribute('fill', 'none');\n    groupPath.setAttribute('stroke-linecap', 'round');\n    groupPath.setAttribute('stroke-dashoffset', 1);\n\n    for (i; i < len; i += 1) {\n      path = createNS('path');\n      groupPath.appendChild(path);\n      this.paths.push({\n        p: path,\n        m: i\n      });\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 3) {\n      var mask = createNS('mask');\n      var id = createElementID();\n      mask.setAttribute('id', id);\n      mask.setAttribute('mask-type', 'alpha');\n      mask.appendChild(groupPath);\n      this.elem.globalData.defs.appendChild(mask);\n      var g = createNS('g');\n      g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n      while (elemChildren[0]) {\n        g.appendChild(elemChildren[0]);\n      }\n\n      this.elem.layerElement.appendChild(g);\n      this.masker = mask;\n      groupPath.setAttribute('stroke', '#fff');\n    } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (this.filterManager.effectElements[10].p.v === 2) {\n        elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n        while (elemChildren.length) {\n          this.elem.layerElement.removeChild(elemChildren[0]);\n        }\n      }\n\n      this.elem.layerElement.appendChild(groupPath);\n      this.elem.layerElement.removeAttribute('mask');\n      groupPath.setAttribute('stroke', '#fff');\n    }\n\n    this.initialized = true;\n    this.pathMasker = groupPath;\n  };\n\n  SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    var i;\n    var len = this.paths.length;\n    var mask;\n    var path;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.paths[i].m !== -1) {\n        mask = this.elem.maskManager.viewData[this.paths[i].m];\n        path = this.paths[i].p;\n\n        if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n          path.setAttribute('d', mask.lastPath);\n        }\n\n        if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n          var dasharrayValue;\n\n          if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n            var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var l = path.getTotalLength();\n            dasharrayValue = '0 0 0 ' + l * s + ' ';\n            var lineLength = l * (e - s);\n            var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n            var units = Math.floor(lineLength / segment);\n            var j;\n\n            for (j = 0; j < units; j += 1) {\n              dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n            }\n\n            dasharrayValue += '0 ' + l * 10 + ' 0 0';\n          } else {\n            dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n          }\n\n          path.setAttribute('stroke-dasharray', dasharrayValue);\n        }\n      }\n    }\n\n    if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n      this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n    }\n\n    if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n      this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n        var color = this.filterManager.effectElements[3].p.v;\n        this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n      }\n    }\n  };\n\n  function SVGTritoneFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n    filter.appendChild(feColorMatrix);\n    var feComponentTransfer = createNS('feComponentTransfer');\n    feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n    feComponentTransfer.setAttribute('result', id);\n    this.matrixFilter = feComponentTransfer;\n    var feFuncR = createNS('feFuncR');\n    feFuncR.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncR);\n    this.feFuncR = feFuncR;\n    var feFuncG = createNS('feFuncG');\n    feFuncG.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncG);\n    this.feFuncG = feFuncG;\n    var feFuncB = createNS('feFuncB');\n    feFuncB.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncB);\n    this.feFuncB = feFuncB;\n    filter.appendChild(feComponentTransfer);\n  }\n\n  SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color1 = this.filterManager.effectElements[0].p.v;\n      var color2 = this.filterManager.effectElements[1].p.v;\n      var color3 = this.filterManager.effectElements[2].p.v;\n      var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n      var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n      var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n      this.feFuncR.setAttribute('tableValues', tableR);\n      this.feFuncG.setAttribute('tableValues', tableG);\n      this.feFuncB.setAttribute('tableValues', tableB);\n    }\n  };\n\n  function SVGProLevelsFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var effectElements = this.filterManager.effectElements;\n    var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n    if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n      this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n    } // Green\n\n\n    if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n      this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n    } // Blue\n\n\n    if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n      this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n    } // Alpha\n\n\n    if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n      this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n    } // RGB\n\n\n    if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      filter.appendChild(feComponentTransfer);\n    }\n\n    if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n      feComponentTransfer = createNS('feComponentTransfer');\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      feComponentTransfer.setAttribute('result', id);\n      filter.appendChild(feComponentTransfer);\n      this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n      this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n      this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n    }\n  }\n\n  SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n    var feFunc = createNS(type);\n    feFunc.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFunc);\n    return feFunc;\n  };\n\n  SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n    var cnt = 0;\n    var segments = 256;\n    var perc;\n    var min = Math.min(inputBlack, inputWhite);\n    var max = Math.max(inputBlack, inputWhite);\n    var table = Array.call(null, {\n      length: segments\n    });\n    var colorValue;\n    var pos = 0;\n    var outputDelta = outputWhite - outputBlack;\n    var inputDelta = inputWhite - inputBlack;\n\n    while (cnt <= 256) {\n      perc = cnt / 256;\n\n      if (perc <= min) {\n        colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n      } else if (perc >= max) {\n        colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n      } else {\n        colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n      }\n\n      table[pos] = colorValue;\n      pos += 1;\n      cnt += 256 / (segments - 1);\n    }\n\n    return table.join(' ');\n  };\n\n  SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var val;\n      var effectElements = this.filterManager.effectElements;\n\n      if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n        val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n        this.feFuncRComposed.setAttribute('tableValues', val);\n        this.feFuncGComposed.setAttribute('tableValues', val);\n        this.feFuncBComposed.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n        val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n        this.feFuncR.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n        val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n        this.feFuncG.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n        val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n        this.feFuncB.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n        val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n        this.feFuncA.setAttribute('tableValues', val);\n      }\n    }\n  };\n\n  function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n    var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n    var filterSize = filterManager.data.fs || globalFilterSize;\n    filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n    filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n    filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n    filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('in', 'SourceAlpha');\n    feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n    feGaussianBlur.setAttribute('stdDeviation', '0');\n    this.feGaussianBlur = feGaussianBlur;\n    filter.appendChild(feGaussianBlur);\n    var feOffset = createNS('feOffset');\n    feOffset.setAttribute('dx', '25');\n    feOffset.setAttribute('dy', '0');\n    feOffset.setAttribute('in', id + '_drop_shadow_1');\n    feOffset.setAttribute('result', id + '_drop_shadow_2');\n    this.feOffset = feOffset;\n    filter.appendChild(feOffset);\n    var feFlood = createNS('feFlood');\n    feFlood.setAttribute('flood-color', '#00ff00');\n    feFlood.setAttribute('flood-opacity', '1');\n    feFlood.setAttribute('result', id + '_drop_shadow_3');\n    this.feFlood = feFlood;\n    filter.appendChild(feFlood);\n    var feComposite = createNS('feComposite');\n    feComposite.setAttribute('in', id + '_drop_shadow_3');\n    feComposite.setAttribute('in2', id + '_drop_shadow_2');\n    feComposite.setAttribute('operator', 'in');\n    feComposite.setAttribute('result', id + '_drop_shadow_4');\n    filter.appendChild(feComposite);\n    var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n    filter.appendChild(feMerge); //\n  }\n\n  extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n  SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n        this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n      }\n\n      if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n        var col = this.filterManager.effectElements[0].p.v;\n        this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n      }\n\n      if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n        this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n      }\n\n      if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n        var distance = this.filterManager.effectElements[3].p.v;\n        var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n        var x = distance * Math.cos(angle);\n        var y = distance * Math.sin(angle);\n        this.feOffset.setAttribute('dx', x);\n        this.feOffset.setAttribute('dy', y);\n      }\n    }\n  };\n\n  var _svgMatteSymbols = [];\n\n  function SVGMatte3Effect(filterElem, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.filterElem = filterElem;\n    this.elem = elem;\n    elem.matteElement = createNS('g');\n    elem.matteElement.appendChild(elem.layerElement);\n    elem.matteElement.appendChild(elem.transformedElement);\n    elem.baseElement = elem.matteElement;\n  }\n\n  SVGMatte3Effect.prototype.findSymbol = function (mask) {\n    var i = 0;\n    var len = _svgMatteSymbols.length;\n\n    while (i < len) {\n      if (_svgMatteSymbols[i] === mask) {\n        return _svgMatteSymbols[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n    var parentNode = mask.layerElement.parentNode;\n\n    if (!parentNode) {\n      return;\n    }\n\n    var children = parentNode.children;\n    var i = 0;\n    var len = children.length;\n\n    while (i < len) {\n      if (children[i] === mask.layerElement) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    var nextChild;\n\n    if (i <= len - 2) {\n      nextChild = children[i + 1];\n    }\n\n    var useElem = createNS('use');\n    useElem.setAttribute('href', '#' + symbolId);\n\n    if (nextChild) {\n      parentNode.insertBefore(useElem, nextChild);\n    } else {\n      parentNode.appendChild(useElem);\n    }\n  };\n\n  SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n    if (!this.findSymbol(mask)) {\n      var symbolId = createElementID();\n      var masker = createNS('mask');\n      masker.setAttribute('id', mask.layerId);\n      masker.setAttribute('mask-type', 'alpha');\n\n      _svgMatteSymbols.push(mask);\n\n      var defs = elem.globalData.defs;\n      defs.appendChild(masker);\n      var symbol = createNS('symbol');\n      symbol.setAttribute('id', symbolId);\n      this.replaceInParent(mask, symbolId);\n      symbol.appendChild(mask.layerElement);\n      defs.appendChild(symbol);\n      var useElem = createNS('use');\n      useElem.setAttribute('href', '#' + symbolId);\n      masker.appendChild(useElem);\n      mask.data.hd = false;\n      mask.show();\n    }\n\n    elem.setMatte(mask.layerId);\n  };\n\n  SVGMatte3Effect.prototype.initialize = function () {\n    var ind = this.filterManager.effectElements[0].p.v;\n    var elements = this.elem.comp.elements;\n    var i = 0;\n    var len = elements.length;\n\n    while (i < len) {\n      if (elements[i] && elements[i].data.ind === ind) {\n        this.setElementAsMask(this.elem, elements[i]);\n      }\n\n      i += 1;\n    }\n\n    this.initialized = true;\n  };\n\n  SVGMatte3Effect.prototype.renderFrame = function () {\n    if (!this.initialized) {\n      this.initialize();\n    }\n  };\n\n  function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n    // Outset the filter region by 100% on all sides to accommodate blur expansion.\n    filter.setAttribute('x', '-100%');\n    filter.setAttribute('y', '-100%');\n    filter.setAttribute('width', '300%');\n    filter.setAttribute('height', '300%');\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('result', id);\n    filter.appendChild(feGaussianBlur);\n    this.feGaussianBlur = feGaussianBlur;\n  }\n\n  SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      // Empirical value, matching AE's blur appearance.\n      var kBlurrinessToSigma = 0.3;\n      var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n      //\n      //   1 -> horizontal & vertical\n      //   2 -> horizontal only\n      //   3 -> vertical only\n      //\n\n      var dimensions = this.filterManager.effectElements[1].p.v;\n      var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n      //\n      //   0 -> off -> duplicate\n      //   1 -> on  -> wrap\n\n      var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n    }\n  };\n\n  function TransformEffect() {}\n\n  TransformEffect.prototype.init = function (effectsManager) {\n    this.effectsManager = effectsManager;\n    this.type = effectTypes.TRANSFORM_EFFECT;\n    this.matrix = new Matrix();\n    this.opacity = -1;\n    this._mdf = false;\n    this._opMdf = false;\n  };\n\n  TransformEffect.prototype.renderFrame = function (forceFrame) {\n    this._opMdf = false;\n    this._mdf = false;\n\n    if (forceFrame || this.effectsManager._mdf) {\n      var effectElements = this.effectsManager.effectElements;\n      var anchor = effectElements[0].p.v;\n      var position = effectElements[1].p.v;\n      var isUniformScale = effectElements[2].p.v === 1;\n      var scaleHeight = effectElements[3].p.v;\n      var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n      var skew = effectElements[5].p.v;\n      var skewAxis = effectElements[6].p.v;\n      var rotation = effectElements[7].p.v;\n      this.matrix.reset();\n      this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n      this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n      this.matrix.rotate(-rotation * degToRads);\n      this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n      this.matrix.translate(position[0], position[1], 0);\n      this._mdf = true;\n\n      if (this.opacity !== effectElements[8].p.v) {\n        this.opacity = effectElements[8].p.v;\n        this._opMdf = true;\n      }\n    }\n  };\n\n  function SVGTransformEffect(_, filterManager) {\n    this.init(filterManager);\n  }\n\n  extendPrototype([TransformEffect], SVGTransformEffect);\n\n  function CVTransformEffect(effectsManager) {\n    this.init(effectsManager);\n  }\n\n  extendPrototype([TransformEffect], CVTransformEffect);\n\n  registerRenderer('canvas', CanvasRenderer);\n  registerRenderer('html', HybridRenderer);\n  registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n  ShapeModifiers.registerModifier('tm', TrimModifier);\n  ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n  ShapeModifiers.registerModifier('rp', RepeaterModifier);\n  ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n  ShapeModifiers.registerModifier('zz', ZigZagModifier);\n  ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin\n\n  setExpressionsPlugin(Expressions);\n  setExpressionInterfaces(getInterface);\n  initialize$1();\n  initialize(); // Registering svg effects\n\n  registerEffect$1(20, SVGTintFilter, true);\n  registerEffect$1(21, SVGFillFilter, true);\n  registerEffect$1(22, SVGStrokeEffect, false);\n  registerEffect$1(23, SVGTritoneFilter, true);\n  registerEffect$1(24, SVGProLevelsFilter, true);\n  registerEffect$1(25, SVGDropShadowEffect, true);\n  registerEffect$1(28, SVGMatte3Effect, false);\n  registerEffect$1(29, SVGGaussianBlurEffect, true);\n  registerEffect$1(35, SVGTransformEffect, false);\n  registerEffect(35, CVTransformEffect);\n\n  return lottie;\n\n}));\n","/**!\n * Sortable 1.10.2\n * @author\tRubaXa   <trash@rubaxa.org>\n * @author\towenm    <owen23355@gmail.com>\n * @license MIT\n */\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n}\n\nfunction _iterableToArray(iter) {\n  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar version = \"1.10.2\";\n\nfunction userAgent(pattern) {\n  if (typeof window !== 'undefined' && window.navigator) {\n    return !!\n    /*@__PURE__*/\n    navigator.userAgent.match(pattern);\n  }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n  capture: false,\n  passive: false\n};\n\nfunction on(el, event, fn) {\n  el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n  el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n  if (!selector) return;\n  selector[0] === '>' && (selector = selector.substring(1));\n\n  if (el) {\n    try {\n      if (el.matches) {\n        return el.matches(selector);\n      } else if (el.msMatchesSelector) {\n        return el.msMatchesSelector(selector);\n      } else if (el.webkitMatchesSelector) {\n        return el.webkitMatchesSelector(selector);\n      }\n    } catch (_) {\n      return false;\n    }\n  }\n\n  return false;\n}\n\nfunction getParentOrHost(el) {\n  return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n  if (el) {\n    ctx = ctx || document;\n\n    do {\n      if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n        return el;\n      }\n\n      if (el === ctx) break;\n      /* jshint boss:true */\n    } while (el = getParentOrHost(el));\n  }\n\n  return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n  if (el && name) {\n    if (el.classList) {\n      el.classList[state ? 'add' : 'remove'](name);\n    } else {\n      var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n      el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n    }\n  }\n}\n\nfunction css(el, prop, val) {\n  var style = el && el.style;\n\n  if (style) {\n    if (val === void 0) {\n      if (document.defaultView && document.defaultView.getComputedStyle) {\n        val = document.defaultView.getComputedStyle(el, '');\n      } else if (el.currentStyle) {\n        val = el.currentStyle;\n      }\n\n      return prop === void 0 ? val : val[prop];\n    } else {\n      if (!(prop in style) && prop.indexOf('webkit') === -1) {\n        prop = '-webkit-' + prop;\n      }\n\n      style[prop] = val + (typeof val === 'string' ? '' : 'px');\n    }\n  }\n}\n\nfunction matrix(el, selfOnly) {\n  var appliedTransforms = '';\n\n  if (typeof el === 'string') {\n    appliedTransforms = el;\n  } else {\n    do {\n      var transform = css(el, 'transform');\n\n      if (transform && transform !== 'none') {\n        appliedTransforms = transform + ' ' + appliedTransforms;\n      }\n      /* jshint boss:true */\n\n    } while (!selfOnly && (el = el.parentNode));\n  }\n\n  var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n  /*jshint -W056 */\n\n  return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n  if (ctx) {\n    var list = ctx.getElementsByTagName(tagName),\n        i = 0,\n        n = list.length;\n\n    if (iterator) {\n      for (; i < n; i++) {\n        iterator(list[i], i);\n      }\n    }\n\n    return list;\n  }\n\n  return [];\n}\n\nfunction getWindowScrollingElement() {\n  var scrollingElement = document.scrollingElement;\n\n  if (scrollingElement) {\n    return scrollingElement;\n  } else {\n    return document.documentElement;\n  }\n}\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted\r\n * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container\r\n * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone\r\n * @param  {[HTMLElement]} container              The parent the element will be placed in\r\n * @return {Object}                               The boundingClientRect of el, with specified adjustments\r\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n  if (!el.getBoundingClientRect && el !== window) return;\n  var elRect, top, left, bottom, right, height, width;\n\n  if (el !== window && el !== getWindowScrollingElement()) {\n    elRect = el.getBoundingClientRect();\n    top = elRect.top;\n    left = elRect.left;\n    bottom = elRect.bottom;\n    right = elRect.right;\n    height = elRect.height;\n    width = elRect.width;\n  } else {\n    top = 0;\n    left = 0;\n    bottom = window.innerHeight;\n    right = window.innerWidth;\n    height = window.innerHeight;\n    width = window.innerWidth;\n  }\n\n  if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n    // Adjust for translate()\n    container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n    // Not needed on <= IE11\n\n    if (!IE11OrLess) {\n      do {\n        if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n          var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n          top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n          left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n          bottom = top + elRect.height;\n          right = left + elRect.width;\n          break;\n        }\n        /* jshint boss:true */\n\n      } while (container = container.parentNode);\n    }\n  }\n\n  if (undoScale && el !== window) {\n    // Adjust for scale()\n    var elMatrix = matrix(container || el),\n        scaleX = elMatrix && elMatrix.a,\n        scaleY = elMatrix && elMatrix.d;\n\n    if (elMatrix) {\n      top /= scaleY;\n      left /= scaleX;\n      width /= scaleX;\n      height /= scaleY;\n      bottom = top + height;\n      right = left + width;\n    }\n  }\n\n  return {\n    top: top,\n    left: left,\n    bottom: bottom,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question\r\n * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n  var parent = getParentAutoScrollElement(el, true),\n      elSideVal = getRect(el)[elSide];\n  /* jshint boss:true */\n\n  while (parent) {\n    var parentSideVal = getRect(parent)[parentSide],\n        visible = void 0;\n\n    if (parentSide === 'top' || parentSide === 'left') {\n      visible = elSideVal >= parentSideVal;\n    } else {\n      visible = elSideVal <= parentSideVal;\n    }\n\n    if (!visible) return parent;\n    if (parent === getWindowScrollingElement()) break;\n    parent = getParentAutoScrollElement(parent, false);\n  }\n\n  return false;\n}\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param  {HTMLElement} el       The parent element\r\n * @param  {Number} childNum      The index of the child\r\n * @param  {Object} options       Parent Sortable's options\r\n * @return {HTMLElement}          The child at index childNum, or null if not found\r\n */\n\n\nfunction getChild(el, childNum, options) {\n  var currentChild = 0,\n      i = 0,\n      children = el.children;\n\n  while (i < children.length) {\n    if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {\n      if (currentChild === childNum) {\n        return children[i];\n      }\n\n      currentChild++;\n    }\n\n    i++;\n  }\n\n  return null;\n}\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param  {HTMLElement} el       Parent element\r\n * @param  {selector} selector    Any other elements that should be ignored\r\n * @return {HTMLElement}          The last child, ignoring ghostEl\r\n */\n\n\nfunction lastChild(el, selector) {\n  var last = el.lastElementChild;\n\n  while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n    last = last.previousElementSibling;\n  }\n\n  return last || null;\n}\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param  {HTMLElement} el\r\n * @param  {selector} selector\r\n * @return {number}\r\n */\n\n\nfunction index(el, selector) {\n  var index = 0;\n\n  if (!el || !el.parentNode) {\n    return -1;\n  }\n  /* jshint boss:true */\n\n\n  while (el = el.previousElementSibling) {\n    if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n      index++;\n    }\n  }\n\n  return index;\n}\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param  {HTMLElement} el\r\n * @return {Array}             Offsets in the format of [left, top]\r\n */\n\n\nfunction getRelativeScrollOffset(el) {\n  var offsetLeft = 0,\n      offsetTop = 0,\n      winScroller = getWindowScrollingElement();\n\n  if (el) {\n    do {\n      var elMatrix = matrix(el),\n          scaleX = elMatrix.a,\n          scaleY = elMatrix.d;\n      offsetLeft += el.scrollLeft * scaleX;\n      offsetTop += el.scrollTop * scaleY;\n    } while (el !== winScroller && (el = el.parentNode));\n  }\n\n  return [offsetLeft, offsetTop];\n}\n/**\r\n * Returns the index of the object within the given array\r\n * @param  {Array} arr   Array that may or may not hold the object\r\n * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number}      The index of the object in the array, or -1\r\n */\n\n\nfunction indexOfObject(arr, obj) {\n  for (var i in arr) {\n    if (!arr.hasOwnProperty(i)) continue;\n\n    for (var key in obj) {\n      if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n    }\n  }\n\n  return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n  // skip to window\n  if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n  var elem = el;\n  var gotSelf = false;\n\n  do {\n    // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n    if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n      var elemCSS = css(elem);\n\n      if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n        if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n        if (gotSelf || includeSelf) return elem;\n        gotSelf = true;\n      }\n    }\n    /* jshint boss:true */\n\n  } while (elem = elem.parentNode);\n\n  return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n  if (dst && src) {\n    for (var key in src) {\n      if (src.hasOwnProperty(key)) {\n        dst[key] = src[key];\n      }\n    }\n  }\n\n  return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n  return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n  return function () {\n    if (!_throttleTimeout) {\n      var args = arguments,\n          _this = this;\n\n      if (args.length === 1) {\n        callback.call(_this, args[0]);\n      } else {\n        callback.apply(_this, args);\n      }\n\n      _throttleTimeout = setTimeout(function () {\n        _throttleTimeout = void 0;\n      }, ms);\n    }\n  };\n}\n\nfunction cancelThrottle() {\n  clearTimeout(_throttleTimeout);\n  _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n  el.scrollLeft += x;\n  el.scrollTop += y;\n}\n\nfunction clone(el) {\n  var Polymer = window.Polymer;\n  var $ = window.jQuery || window.Zepto;\n\n  if (Polymer && Polymer.dom) {\n    return Polymer.dom(el).cloneNode(true);\n  } else if ($) {\n    return $(el).clone(true)[0];\n  } else {\n    return el.cloneNode(true);\n  }\n}\n\nfunction setRect(el, rect) {\n  css(el, 'position', 'absolute');\n  css(el, 'top', rect.top);\n  css(el, 'left', rect.left);\n  css(el, 'width', rect.width);\n  css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n  css(el, 'position', '');\n  css(el, 'top', '');\n  css(el, 'left', '');\n  css(el, 'width', '');\n  css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n  var animationStates = [],\n      animationCallbackId;\n  return {\n    captureAnimationState: function captureAnimationState() {\n      animationStates = [];\n      if (!this.options.animation) return;\n      var children = [].slice.call(this.el.children);\n      children.forEach(function (child) {\n        if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n        animationStates.push({\n          target: child,\n          rect: getRect(child)\n        });\n\n        var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n        if (child.thisAnimationDuration) {\n          var childMatrix = matrix(child, true);\n\n          if (childMatrix) {\n            fromRect.top -= childMatrix.f;\n            fromRect.left -= childMatrix.e;\n          }\n        }\n\n        child.fromRect = fromRect;\n      });\n    },\n    addAnimationState: function addAnimationState(state) {\n      animationStates.push(state);\n    },\n    removeAnimationState: function removeAnimationState(target) {\n      animationStates.splice(indexOfObject(animationStates, {\n        target: target\n      }), 1);\n    },\n    animateAll: function animateAll(callback) {\n      var _this = this;\n\n      if (!this.options.animation) {\n        clearTimeout(animationCallbackId);\n        if (typeof callback === 'function') callback();\n        return;\n      }\n\n      var animating = false,\n          animationTime = 0;\n      animationStates.forEach(function (state) {\n        var time = 0,\n            target = state.target,\n            fromRect = target.fromRect,\n            toRect = getRect(target),\n            prevFromRect = target.prevFromRect,\n            prevToRect = target.prevToRect,\n            animatingRect = state.rect,\n            targetMatrix = matrix(target, true);\n\n        if (targetMatrix) {\n          // Compensate for current animation\n          toRect.top -= targetMatrix.f;\n          toRect.left -= targetMatrix.e;\n        }\n\n        target.toRect = toRect;\n\n        if (target.thisAnimationDuration) {\n          // Could also check if animatingRect is between fromRect and toRect\n          if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n          (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n            // If returning to same place as started from animation and on same axis\n            time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n          }\n        } // if fromRect != toRect: animate\n\n\n        if (!isRectEqual(toRect, fromRect)) {\n          target.prevFromRect = fromRect;\n          target.prevToRect = toRect;\n\n          if (!time) {\n            time = _this.options.animation;\n          }\n\n          _this.animate(target, animatingRect, toRect, time);\n        }\n\n        if (time) {\n          animating = true;\n          animationTime = Math.max(animationTime, time);\n          clearTimeout(target.animationResetTimer);\n          target.animationResetTimer = setTimeout(function () {\n            target.animationTime = 0;\n            target.prevFromRect = null;\n            target.fromRect = null;\n            target.prevToRect = null;\n            target.thisAnimationDuration = null;\n          }, time);\n          target.thisAnimationDuration = time;\n        }\n      });\n      clearTimeout(animationCallbackId);\n\n      if (!animating) {\n        if (typeof callback === 'function') callback();\n      } else {\n        animationCallbackId = setTimeout(function () {\n          if (typeof callback === 'function') callback();\n        }, animationTime);\n      }\n\n      animationStates = [];\n    },\n    animate: function animate(target, currentRect, toRect, duration) {\n      if (duration) {\n        css(target, 'transition', '');\n        css(target, 'transform', '');\n        var elMatrix = matrix(this.el),\n            scaleX = elMatrix && elMatrix.a,\n            scaleY = elMatrix && elMatrix.d,\n            translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n            translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n        target.animatingX = !!translateX;\n        target.animatingY = !!translateY;\n        css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n        repaint(target); // repaint\n\n        css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n        css(target, 'transform', 'translate3d(0,0,0)');\n        typeof target.animated === 'number' && clearTimeout(target.animated);\n        target.animated = setTimeout(function () {\n          css(target, 'transition', '');\n          css(target, 'transform', '');\n          target.animated = false;\n          target.animatingX = false;\n          target.animatingY = false;\n        }, duration);\n      }\n    }\n  };\n}\n\nfunction repaint(target) {\n  return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n  return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n  initializeByDefault: true\n};\nvar PluginManager = {\n  mount: function mount(plugin) {\n    // Set default static properties\n    for (var option in defaults) {\n      if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n        plugin[option] = defaults[option];\n      }\n    }\n\n    plugins.push(plugin);\n  },\n  pluginEvent: function pluginEvent(eventName, sortable, evt) {\n    var _this = this;\n\n    this.eventCanceled = false;\n\n    evt.cancel = function () {\n      _this.eventCanceled = true;\n    };\n\n    var eventNameGlobal = eventName + 'Global';\n    plugins.forEach(function (plugin) {\n      if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n      if (sortable[plugin.pluginName][eventNameGlobal]) {\n        sortable[plugin.pluginName][eventNameGlobal](_objectSpread({\n          sortable: sortable\n        }, evt));\n      } // Only fire plugin event if plugin is enabled in this sortable,\n      // and plugin has event defined\n\n\n      if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n        sortable[plugin.pluginName][eventName](_objectSpread({\n          sortable: sortable\n        }, evt));\n      }\n    });\n  },\n  initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n    plugins.forEach(function (plugin) {\n      var pluginName = plugin.pluginName;\n      if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n      var initialized = new plugin(sortable, el, sortable.options);\n      initialized.sortable = sortable;\n      initialized.options = sortable.options;\n      sortable[pluginName] = initialized; // Add default options from plugin\n\n      _extends(defaults, initialized.defaults);\n    });\n\n    for (var option in sortable.options) {\n      if (!sortable.options.hasOwnProperty(option)) continue;\n      var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n      if (typeof modified !== 'undefined') {\n        sortable.options[option] = modified;\n      }\n    }\n  },\n  getEventProperties: function getEventProperties(name, sortable) {\n    var eventProperties = {};\n    plugins.forEach(function (plugin) {\n      if (typeof plugin.eventProperties !== 'function') return;\n\n      _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n    });\n    return eventProperties;\n  },\n  modifyOption: function modifyOption(sortable, name, value) {\n    var modifiedValue;\n    plugins.forEach(function (plugin) {\n      // Plugin must exist on the Sortable\n      if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n      if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n        modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n      }\n    });\n    return modifiedValue;\n  }\n};\n\nfunction dispatchEvent(_ref) {\n  var sortable = _ref.sortable,\n      rootEl = _ref.rootEl,\n      name = _ref.name,\n      targetEl = _ref.targetEl,\n      cloneEl = _ref.cloneEl,\n      toEl = _ref.toEl,\n      fromEl = _ref.fromEl,\n      oldIndex = _ref.oldIndex,\n      newIndex = _ref.newIndex,\n      oldDraggableIndex = _ref.oldDraggableIndex,\n      newDraggableIndex = _ref.newDraggableIndex,\n      originalEvent = _ref.originalEvent,\n      putSortable = _ref.putSortable,\n      extraEventProperties = _ref.extraEventProperties;\n  sortable = sortable || rootEl && rootEl[expando];\n  if (!sortable) return;\n  var evt,\n      options = sortable.options,\n      onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent(name, true, true);\n  }\n\n  evt.to = toEl || rootEl;\n  evt.from = fromEl || rootEl;\n  evt.item = targetEl || rootEl;\n  evt.clone = cloneEl;\n  evt.oldIndex = oldIndex;\n  evt.newIndex = newIndex;\n  evt.oldDraggableIndex = oldDraggableIndex;\n  evt.newDraggableIndex = newDraggableIndex;\n  evt.originalEvent = originalEvent;\n  evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n  var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));\n\n  for (var option in allEventProperties) {\n    evt[option] = allEventProperties[option];\n  }\n\n  if (rootEl) {\n    rootEl.dispatchEvent(evt);\n  }\n\n  if (options[onName]) {\n    options[onName].call(sortable, evt);\n  }\n}\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n      originalEvent = _ref.evt,\n      data = _objectWithoutProperties(_ref, [\"evt\"]);\n\n  PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({\n    dragEl: dragEl,\n    parentEl: parentEl,\n    ghostEl: ghostEl,\n    rootEl: rootEl,\n    nextEl: nextEl,\n    lastDownEl: lastDownEl,\n    cloneEl: cloneEl,\n    cloneHidden: cloneHidden,\n    dragStarted: moved,\n    putSortable: putSortable,\n    activeSortable: Sortable.active,\n    originalEvent: originalEvent,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex,\n    hideGhostForTarget: _hideGhostForTarget,\n    unhideGhostForTarget: _unhideGhostForTarget,\n    cloneNowHidden: function cloneNowHidden() {\n      cloneHidden = true;\n    },\n    cloneNowShown: function cloneNowShown() {\n      cloneHidden = false;\n    },\n    dispatchSortableEvent: function dispatchSortableEvent(name) {\n      _dispatchEvent({\n        sortable: sortable,\n        name: name,\n        originalEvent: originalEvent\n      });\n    }\n  }, data));\n};\n\nfunction _dispatchEvent(info) {\n  dispatchEvent(_objectSpread({\n    putSortable: putSortable,\n    cloneEl: cloneEl,\n    targetEl: dragEl,\n    rootEl: rootEl,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex\n  }, info));\n}\n\nvar dragEl,\n    parentEl,\n    ghostEl,\n    rootEl,\n    nextEl,\n    lastDownEl,\n    cloneEl,\n    cloneHidden,\n    oldIndex,\n    newIndex,\n    oldDraggableIndex,\n    newDraggableIndex,\n    activeGroup,\n    putSortable,\n    awaitingDragStarted = false,\n    ignoreNextClick = false,\n    sortables = [],\n    tapEvt,\n    touchEvt,\n    lastDx,\n    lastDy,\n    tapDistanceLeft,\n    tapDistanceTop,\n    moved,\n    lastTarget,\n    lastDirection,\n    pastFirstInvertThresh = false,\n    isCircumstantialInvert = false,\n    targetMoveDistance,\n    // For positioning ghost absolutely\nghostRelativeParent,\n    ghostRelativeParentInitialScroll = [],\n    // (left, top)\n_silent = false,\n    savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n    PositionGhostAbsolutely = IOS,\n    CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n    // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n    supportCssPointerEvents = function () {\n  if (!documentExists) return; // false when <= IE11\n\n  if (IE11OrLess) {\n    return false;\n  }\n\n  var el = document.createElement('x');\n  el.style.cssText = 'pointer-events:auto';\n  return el.style.pointerEvents === 'auto';\n}(),\n    _detectDirection = function _detectDirection(el, options) {\n  var elCSS = css(el),\n      elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n      child1 = getChild(el, 0, options),\n      child2 = getChild(el, 1, options),\n      firstChildCSS = child1 && css(child1),\n      secondChildCSS = child2 && css(child2),\n      firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n      secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n  if (elCSS.display === 'flex') {\n    return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n  }\n\n  if (elCSS.display === 'grid') {\n    return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n  }\n\n  if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n    var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n    return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n  }\n\n  return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n    _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n  var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n      dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n      dragElOppLength = vertical ? dragRect.width : dragRect.height,\n      targetS1Opp = vertical ? targetRect.left : targetRect.top,\n      targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n      targetOppLength = vertical ? targetRect.width : targetRect.height;\n  return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param  {Number} x      X position\n * @param  {Number} y      Y position\n * @return {HTMLElement}   Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n  var ret;\n  sortables.some(function (sortable) {\n    if (lastChild(sortable)) return;\n    var rect = getRect(sortable),\n        threshold = sortable[expando].options.emptyInsertThreshold,\n        insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n        insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n    if (threshold && insideHorizontally && insideVertically) {\n      return ret = sortable;\n    }\n  });\n  return ret;\n},\n    _prepareGroup = function _prepareGroup(options) {\n  function toFn(value, pull) {\n    return function (to, from, dragEl, evt) {\n      var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n      if (value == null && (pull || sameGroup)) {\n        // Default pull value\n        // Default pull and put value if same group\n        return true;\n      } else if (value == null || value === false) {\n        return false;\n      } else if (pull && value === 'clone') {\n        return value;\n      } else if (typeof value === 'function') {\n        return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n      } else {\n        var otherGroup = (pull ? to : from).options.group.name;\n        return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n      }\n    };\n  }\n\n  var group = {};\n  var originalGroup = options.group;\n\n  if (!originalGroup || _typeof(originalGroup) != 'object') {\n    originalGroup = {\n      name: originalGroup\n    };\n  }\n\n  group.name = originalGroup.name;\n  group.checkPull = toFn(originalGroup.pull, true);\n  group.checkPut = toFn(originalGroup.put);\n  group.revertClone = originalGroup.revertClone;\n  options.group = group;\n},\n    _hideGhostForTarget = function _hideGhostForTarget() {\n  if (!supportCssPointerEvents && ghostEl) {\n    css(ghostEl, 'display', 'none');\n  }\n},\n    _unhideGhostForTarget = function _unhideGhostForTarget() {\n  if (!supportCssPointerEvents && ghostEl) {\n    css(ghostEl, 'display', '');\n  }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n  document.addEventListener('click', function (evt) {\n    if (ignoreNextClick) {\n      evt.preventDefault();\n      evt.stopPropagation && evt.stopPropagation();\n      evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n      ignoreNextClick = false;\n      return false;\n    }\n  }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n  if (dragEl) {\n    evt = evt.touches ? evt.touches[0] : evt;\n\n    var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n    if (nearest) {\n      // Create imitation event\n      var event = {};\n\n      for (var i in evt) {\n        if (evt.hasOwnProperty(i)) {\n          event[i] = evt[i];\n        }\n      }\n\n      event.target = event.rootEl = nearest;\n      event.preventDefault = void 0;\n      event.stopPropagation = void 0;\n\n      nearest[expando]._onDragOver(event);\n    }\n  }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n  if (dragEl) {\n    dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n  }\n};\n/**\n * @class  Sortable\n * @param  {HTMLElement}  el\n * @param  {Object}       [options]\n */\n\n\nfunction Sortable(el, options) {\n  if (!(el && el.nodeType && el.nodeType === 1)) {\n    throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n  }\n\n  this.el = el; // root element\n\n  this.options = options = _extends({}, options); // Export instance\n\n  el[expando] = this;\n  var defaults = {\n    group: null,\n    sort: true,\n    disabled: false,\n    store: null,\n    handle: null,\n    draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n    swapThreshold: 1,\n    // percentage; 0 <= x <= 1\n    invertSwap: false,\n    // invert always\n    invertedSwapThreshold: null,\n    // will be set to same as swapThreshold if default\n    removeCloneOnHide: true,\n    direction: function direction() {\n      return _detectDirection(el, this.options);\n    },\n    ghostClass: 'sortable-ghost',\n    chosenClass: 'sortable-chosen',\n    dragClass: 'sortable-drag',\n    ignore: 'a, img',\n    filter: null,\n    preventOnFilter: true,\n    animation: 0,\n    easing: null,\n    setData: function setData(dataTransfer, dragEl) {\n      dataTransfer.setData('Text', dragEl.textContent);\n    },\n    dropBubble: false,\n    dragoverBubble: false,\n    dataIdAttr: 'data-id',\n    delay: 0,\n    delayOnTouchOnly: false,\n    touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n    forceFallback: false,\n    fallbackClass: 'sortable-fallback',\n    fallbackOnBody: false,\n    fallbackTolerance: 0,\n    fallbackOffset: {\n      x: 0,\n      y: 0\n    },\n    supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window,\n    emptyInsertThreshold: 5\n  };\n  PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n  for (var name in defaults) {\n    !(name in options) && (options[name] = defaults[name]);\n  }\n\n  _prepareGroup(options); // Bind all private methods\n\n\n  for (var fn in this) {\n    if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n      this[fn] = this[fn].bind(this);\n    }\n  } // Setup drag mode\n\n\n  this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n  if (this.nativeDraggable) {\n    // Touch start threshold cannot be greater than the native dragstart threshold\n    this.options.touchStartThreshold = 1;\n  } // Bind events\n\n\n  if (options.supportPointer) {\n    on(el, 'pointerdown', this._onTapStart);\n  } else {\n    on(el, 'mousedown', this._onTapStart);\n    on(el, 'touchstart', this._onTapStart);\n  }\n\n  if (this.nativeDraggable) {\n    on(el, 'dragover', this);\n    on(el, 'dragenter', this);\n  }\n\n  sortables.push(this.el); // Restore sorting\n\n  options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n  _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n  constructor: Sortable,\n  _isOutsideThisEl: function _isOutsideThisEl(target) {\n    if (!this.el.contains(target) && target !== this.el) {\n      lastTarget = null;\n    }\n  },\n  _getDirection: function _getDirection(evt, target) {\n    return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n  },\n  _onTapStart: function _onTapStart(\n  /** Event|TouchEvent */\n  evt) {\n    if (!evt.cancelable) return;\n\n    var _this = this,\n        el = this.el,\n        options = this.options,\n        preventOnFilter = options.preventOnFilter,\n        type = evt.type,\n        touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n        target = (touch || evt).target,\n        originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n        filter = options.filter;\n\n    _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n    if (dragEl) {\n      return;\n    }\n\n    if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n      return; // only left button and enabled\n    } // cancel dnd if original target is content editable\n\n\n    if (originalTarget.isContentEditable) {\n      return;\n    }\n\n    target = closest(target, options.draggable, el, false);\n\n    if (target && target.animated) {\n      return;\n    }\n\n    if (lastDownEl === target) {\n      // Ignoring duplicate `down`\n      return;\n    } // Get the index of the dragged element within its parent\n\n\n    oldIndex = index(target);\n    oldDraggableIndex = index(target, options.draggable); // Check filter\n\n    if (typeof filter === 'function') {\n      if (filter.call(this, evt, target, this)) {\n        _dispatchEvent({\n          sortable: _this,\n          rootEl: originalTarget,\n          name: 'filter',\n          targetEl: target,\n          toEl: el,\n          fromEl: el\n        });\n\n        pluginEvent('filter', _this, {\n          evt: evt\n        });\n        preventOnFilter && evt.cancelable && evt.preventDefault();\n        return; // cancel dnd\n      }\n    } else if (filter) {\n      filter = filter.split(',').some(function (criteria) {\n        criteria = closest(originalTarget, criteria.trim(), el, false);\n\n        if (criteria) {\n          _dispatchEvent({\n            sortable: _this,\n            rootEl: criteria,\n            name: 'filter',\n            targetEl: target,\n            fromEl: el,\n            toEl: el\n          });\n\n          pluginEvent('filter', _this, {\n            evt: evt\n          });\n          return true;\n        }\n      });\n\n      if (filter) {\n        preventOnFilter && evt.cancelable && evt.preventDefault();\n        return; // cancel dnd\n      }\n    }\n\n    if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n      return;\n    } // Prepare `dragstart`\n\n\n    this._prepareDragStart(evt, touch, target);\n  },\n  _prepareDragStart: function _prepareDragStart(\n  /** Event */\n  evt,\n  /** Touch */\n  touch,\n  /** HTMLElement */\n  target) {\n    var _this = this,\n        el = _this.el,\n        options = _this.options,\n        ownerDocument = el.ownerDocument,\n        dragStartFn;\n\n    if (target && !dragEl && target.parentNode === el) {\n      var dragRect = getRect(target);\n      rootEl = el;\n      dragEl = target;\n      parentEl = dragEl.parentNode;\n      nextEl = dragEl.nextSibling;\n      lastDownEl = target;\n      activeGroup = options.group;\n      Sortable.dragged = dragEl;\n      tapEvt = {\n        target: dragEl,\n        clientX: (touch || evt).clientX,\n        clientY: (touch || evt).clientY\n      };\n      tapDistanceLeft = tapEvt.clientX - dragRect.left;\n      tapDistanceTop = tapEvt.clientY - dragRect.top;\n      this._lastX = (touch || evt).clientX;\n      this._lastY = (touch || evt).clientY;\n      dragEl.style['will-change'] = 'all';\n\n      dragStartFn = function dragStartFn() {\n        pluginEvent('delayEnded', _this, {\n          evt: evt\n        });\n\n        if (Sortable.eventCanceled) {\n          _this._onDrop();\n\n          return;\n        } // Delayed drag has been triggered\n        // we can re-enable the events: touchmove/mousemove\n\n\n        _this._disableDelayedDragEvents();\n\n        if (!FireFox && _this.nativeDraggable) {\n          dragEl.draggable = true;\n        } // Bind the events: dragstart/dragend\n\n\n        _this._triggerDragStart(evt, touch); // Drag start event\n\n\n        _dispatchEvent({\n          sortable: _this,\n          name: 'choose',\n          originalEvent: evt\n        }); // Chosen item\n\n\n        toggleClass(dragEl, options.chosenClass, true);\n      }; // Disable \"draggable\"\n\n\n      options.ignore.split(',').forEach(function (criteria) {\n        find(dragEl, criteria.trim(), _disableDraggable);\n      });\n      on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'mouseup', _this._onDrop);\n      on(ownerDocument, 'touchend', _this._onDrop);\n      on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n      if (FireFox && this.nativeDraggable) {\n        this.options.touchStartThreshold = 4;\n        dragEl.draggable = true;\n      }\n\n      pluginEvent('delayStart', this, {\n        evt: evt\n      }); // Delay is impossible for native DnD in Edge or IE\n\n      if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n        if (Sortable.eventCanceled) {\n          this._onDrop();\n\n          return;\n        } // If the user moves the pointer or let go the click or touch\n        // before the delay has been reached:\n        // disable the delayed drag\n\n\n        on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n        on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n        on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n        on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n        on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n        options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n        _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n      } else {\n        dragStartFn();\n      }\n    }\n  },\n  _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n  /** TouchEvent|PointerEvent **/\n  e) {\n    var touch = e.touches ? e.touches[0] : e;\n\n    if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n      this._disableDelayedDrag();\n    }\n  },\n  _disableDelayedDrag: function _disableDelayedDrag() {\n    dragEl && _disableDraggable(dragEl);\n    clearTimeout(this._dragStartTimer);\n\n    this._disableDelayedDragEvents();\n  },\n  _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n    off(ownerDocument, 'touchend', this._disableDelayedDrag);\n    off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n    off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n  },\n  _triggerDragStart: function _triggerDragStart(\n  /** Event */\n  evt,\n  /** Touch */\n  touch) {\n    touch = touch || evt.pointerType == 'touch' && evt;\n\n    if (!this.nativeDraggable || touch) {\n      if (this.options.supportPointer) {\n        on(document, 'pointermove', this._onTouchMove);\n      } else if (touch) {\n        on(document, 'touchmove', this._onTouchMove);\n      } else {\n        on(document, 'mousemove', this._onTouchMove);\n      }\n    } else {\n      on(dragEl, 'dragend', this);\n      on(rootEl, 'dragstart', this._onDragStart);\n    }\n\n    try {\n      if (document.selection) {\n        // Timeout neccessary for IE9\n        _nextTick(function () {\n          document.selection.empty();\n        });\n      } else {\n        window.getSelection().removeAllRanges();\n      }\n    } catch (err) {}\n  },\n  _dragStarted: function _dragStarted(fallback, evt) {\n\n    awaitingDragStarted = false;\n\n    if (rootEl && dragEl) {\n      pluginEvent('dragStarted', this, {\n        evt: evt\n      });\n\n      if (this.nativeDraggable) {\n        on(document, 'dragover', _checkOutsideTargetEl);\n      }\n\n      var options = this.options; // Apply effect\n\n      !fallback && toggleClass(dragEl, options.dragClass, false);\n      toggleClass(dragEl, options.ghostClass, true);\n      Sortable.active = this;\n      fallback && this._appendGhost(); // Drag start event\n\n      _dispatchEvent({\n        sortable: this,\n        name: 'start',\n        originalEvent: evt\n      });\n    } else {\n      this._nulling();\n    }\n  },\n  _emulateDragOver: function _emulateDragOver() {\n    if (touchEvt) {\n      this._lastX = touchEvt.clientX;\n      this._lastY = touchEvt.clientY;\n\n      _hideGhostForTarget();\n\n      var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n      var parent = target;\n\n      while (target && target.shadowRoot) {\n        target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n        if (target === parent) break;\n        parent = target;\n      }\n\n      dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n      if (parent) {\n        do {\n          if (parent[expando]) {\n            var inserted = void 0;\n            inserted = parent[expando]._onDragOver({\n              clientX: touchEvt.clientX,\n              clientY: touchEvt.clientY,\n              target: target,\n              rootEl: parent\n            });\n\n            if (inserted && !this.options.dragoverBubble) {\n              break;\n            }\n          }\n\n          target = parent; // store last element\n        }\n        /* jshint boss:true */\n        while (parent = parent.parentNode);\n      }\n\n      _unhideGhostForTarget();\n    }\n  },\n  _onTouchMove: function _onTouchMove(\n  /**TouchEvent*/\n  evt) {\n    if (tapEvt) {\n      var options = this.options,\n          fallbackTolerance = options.fallbackTolerance,\n          fallbackOffset = options.fallbackOffset,\n          touch = evt.touches ? evt.touches[0] : evt,\n          ghostMatrix = ghostEl && matrix(ghostEl, true),\n          scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n          scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n          relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n          dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n          dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n      if (!Sortable.active && !awaitingDragStarted) {\n        if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n          return;\n        }\n\n        this._onDragStart(evt, true);\n      }\n\n      if (ghostEl) {\n        if (ghostMatrix) {\n          ghostMatrix.e += dx - (lastDx || 0);\n          ghostMatrix.f += dy - (lastDy || 0);\n        } else {\n          ghostMatrix = {\n            a: 1,\n            b: 0,\n            c: 0,\n            d: 1,\n            e: dx,\n            f: dy\n          };\n        }\n\n        var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n        css(ghostEl, 'webkitTransform', cssMatrix);\n        css(ghostEl, 'mozTransform', cssMatrix);\n        css(ghostEl, 'msTransform', cssMatrix);\n        css(ghostEl, 'transform', cssMatrix);\n        lastDx = dx;\n        lastDy = dy;\n        touchEvt = touch;\n      }\n\n      evt.cancelable && evt.preventDefault();\n    }\n  },\n  _appendGhost: function _appendGhost() {\n    // Bug if using scale(): https://stackoverflow.com/questions/2637058\n    // Not being adjusted for\n    if (!ghostEl) {\n      var container = this.options.fallbackOnBody ? document.body : rootEl,\n          rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n          options = this.options; // Position absolutely\n\n      if (PositionGhostAbsolutely) {\n        // Get relatively positioned parent\n        ghostRelativeParent = container;\n\n        while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n          ghostRelativeParent = ghostRelativeParent.parentNode;\n        }\n\n        if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n          if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n          rect.top += ghostRelativeParent.scrollTop;\n          rect.left += ghostRelativeParent.scrollLeft;\n        } else {\n          ghostRelativeParent = getWindowScrollingElement();\n        }\n\n        ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n      }\n\n      ghostEl = dragEl.cloneNode(true);\n      toggleClass(ghostEl, options.ghostClass, false);\n      toggleClass(ghostEl, options.fallbackClass, true);\n      toggleClass(ghostEl, options.dragClass, true);\n      css(ghostEl, 'transition', '');\n      css(ghostEl, 'transform', '');\n      css(ghostEl, 'box-sizing', 'border-box');\n      css(ghostEl, 'margin', 0);\n      css(ghostEl, 'top', rect.top);\n      css(ghostEl, 'left', rect.left);\n      css(ghostEl, 'width', rect.width);\n      css(ghostEl, 'height', rect.height);\n      css(ghostEl, 'opacity', '0.8');\n      css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n      css(ghostEl, 'zIndex', '100000');\n      css(ghostEl, 'pointerEvents', 'none');\n      Sortable.ghost = ghostEl;\n      container.appendChild(ghostEl); // Set transform-origin\n\n      css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n    }\n  },\n  _onDragStart: function _onDragStart(\n  /**Event*/\n  evt,\n  /**boolean*/\n  fallback) {\n    var _this = this;\n\n    var dataTransfer = evt.dataTransfer;\n    var options = _this.options;\n    pluginEvent('dragStart', this, {\n      evt: evt\n    });\n\n    if (Sortable.eventCanceled) {\n      this._onDrop();\n\n      return;\n    }\n\n    pluginEvent('setupClone', this);\n\n    if (!Sortable.eventCanceled) {\n      cloneEl = clone(dragEl);\n      cloneEl.draggable = false;\n      cloneEl.style['will-change'] = '';\n\n      this._hideClone();\n\n      toggleClass(cloneEl, this.options.chosenClass, false);\n      Sortable.clone = cloneEl;\n    } // #1143: IFrame support workaround\n\n\n    _this.cloneId = _nextTick(function () {\n      pluginEvent('clone', _this);\n      if (Sortable.eventCanceled) return;\n\n      if (!_this.options.removeCloneOnHide) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      }\n\n      _this._hideClone();\n\n      _dispatchEvent({\n        sortable: _this,\n        name: 'clone'\n      });\n    });\n    !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n    if (fallback) {\n      ignoreNextClick = true;\n      _this._loopId = setInterval(_this._emulateDragOver, 50);\n    } else {\n      // Undo what was set in _prepareDragStart before drag started\n      off(document, 'mouseup', _this._onDrop);\n      off(document, 'touchend', _this._onDrop);\n      off(document, 'touchcancel', _this._onDrop);\n\n      if (dataTransfer) {\n        dataTransfer.effectAllowed = 'move';\n        options.setData && options.setData.call(_this, dataTransfer, dragEl);\n      }\n\n      on(document, 'drop', _this); // #1276 fix:\n\n      css(dragEl, 'transform', 'translateZ(0)');\n    }\n\n    awaitingDragStarted = true;\n    _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n    on(document, 'selectstart', _this);\n    moved = true;\n\n    if (Safari) {\n      css(document.body, 'user-select', 'none');\n    }\n  },\n  // Returns true - if no further action is needed (either inserted or another condition)\n  _onDragOver: function _onDragOver(\n  /**Event*/\n  evt) {\n    var el = this.el,\n        target = evt.target,\n        dragRect,\n        targetRect,\n        revert,\n        options = this.options,\n        group = options.group,\n        activeSortable = Sortable.active,\n        isOwner = activeGroup === group,\n        canSort = options.sort,\n        fromSortable = putSortable || activeSortable,\n        vertical,\n        _this = this,\n        completedFired = false;\n\n    if (_silent) return;\n\n    function dragOverEvent(name, extra) {\n      pluginEvent(name, _this, _objectSpread({\n        evt: evt,\n        isOwner: isOwner,\n        axis: vertical ? 'vertical' : 'horizontal',\n        revert: revert,\n        dragRect: dragRect,\n        targetRect: targetRect,\n        canSort: canSort,\n        fromSortable: fromSortable,\n        target: target,\n        completed: completed,\n        onMove: function onMove(target, after) {\n          return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n        },\n        changed: changed\n      }, extra));\n    } // Capture animation state\n\n\n    function capture() {\n      dragOverEvent('dragOverAnimationCapture');\n\n      _this.captureAnimationState();\n\n      if (_this !== fromSortable) {\n        fromSortable.captureAnimationState();\n      }\n    } // Return invocation when dragEl is inserted (or completed)\n\n\n    function completed(insertion) {\n      dragOverEvent('dragOverCompleted', {\n        insertion: insertion\n      });\n\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        } else {\n          activeSortable._showClone(_this);\n        }\n\n        if (_this !== fromSortable) {\n          // Set ghost class to new sortable's ghost class\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n          toggleClass(dragEl, options.ghostClass, true);\n        }\n\n        if (putSortable !== _this && _this !== Sortable.active) {\n          putSortable = _this;\n        } else if (_this === Sortable.active && putSortable) {\n          putSortable = null;\n        } // Animation\n\n\n        if (fromSortable === _this) {\n          _this._ignoreWhileAnimating = target;\n        }\n\n        _this.animateAll(function () {\n          dragOverEvent('dragOverAnimationComplete');\n          _this._ignoreWhileAnimating = null;\n        });\n\n        if (_this !== fromSortable) {\n          fromSortable.animateAll();\n          fromSortable._ignoreWhileAnimating = null;\n        }\n      } // Null lastTarget if it is not inside a previously swapped element\n\n\n      if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n        lastTarget = null;\n      } // no bubbling and not fallback\n\n\n      if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n        dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n        !insertion && nearestEmptyInsertDetectEvent(evt);\n      }\n\n      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n      return completedFired = true;\n    } // Call when dragEl has been inserted\n\n\n    function changed() {\n      newIndex = index(dragEl);\n      newDraggableIndex = index(dragEl, options.draggable);\n\n      _dispatchEvent({\n        sortable: _this,\n        name: 'change',\n        toEl: el,\n        newIndex: newIndex,\n        newDraggableIndex: newDraggableIndex,\n        originalEvent: evt\n      });\n    }\n\n    if (evt.preventDefault !== void 0) {\n      evt.cancelable && evt.preventDefault();\n    }\n\n    target = closest(target, options.draggable, el, true);\n    dragOverEvent('dragOver');\n    if (Sortable.eventCanceled) return completedFired;\n\n    if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n      return completed(false);\n    }\n\n    ignoreNextClick = false;\n\n    if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n    : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n      vertical = this._getDirection(evt, target) === 'vertical';\n      dragRect = getRect(dragEl);\n      dragOverEvent('dragOverValid');\n      if (Sortable.eventCanceled) return completedFired;\n\n      if (revert) {\n        parentEl = rootEl; // actualization\n\n        capture();\n\n        this._hideClone();\n\n        dragOverEvent('revert');\n\n        if (!Sortable.eventCanceled) {\n          if (nextEl) {\n            rootEl.insertBefore(dragEl, nextEl);\n          } else {\n            rootEl.appendChild(dragEl);\n          }\n        }\n\n        return completed(true);\n      }\n\n      var elLastChild = lastChild(el, options.draggable);\n\n      if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n        // If already at end of list: Do not insert\n        if (elLastChild === dragEl) {\n          return completed(false);\n        } // assign target only if condition is true\n\n\n        if (elLastChild && el === evt.target) {\n          target = elLastChild;\n        }\n\n        if (target) {\n          targetRect = getRect(target);\n        }\n\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n          capture();\n          el.appendChild(dragEl);\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (target.parentNode === el) {\n        targetRect = getRect(target);\n        var direction = 0,\n            targetBeforeFirstSwap,\n            differentLevel = dragEl.parentNode !== el,\n            differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n            side1 = vertical ? 'top' : 'left',\n            scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n            scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n        if (lastTarget !== target) {\n          targetBeforeFirstSwap = targetRect[side1];\n          pastFirstInvertThresh = false;\n          isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n        }\n\n        direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n        var sibling;\n\n        if (direction !== 0) {\n          // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n          var dragIndex = index(dragEl);\n\n          do {\n            dragIndex -= direction;\n            sibling = parentEl.children[dragIndex];\n          } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n        } // If dragEl is already beside target: Do not insert\n\n\n        if (direction === 0 || sibling === target) {\n          return completed(false);\n        }\n\n        lastTarget = target;\n        lastDirection = direction;\n        var nextSibling = target.nextElementSibling,\n            after = false;\n        after = direction === 1;\n\n        var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n        if (moveVector !== false) {\n          if (moveVector === 1 || moveVector === -1) {\n            after = moveVector === 1;\n          }\n\n          _silent = true;\n          setTimeout(_unsilent, 30);\n          capture();\n\n          if (after && !nextSibling) {\n            el.appendChild(dragEl);\n          } else {\n            target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n          } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n          if (scrolledPastTop) {\n            scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n          }\n\n          parentEl = dragEl.parentNode; // actualization\n          // must be done before animation\n\n          if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n            targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n          }\n\n          changed();\n          return completed(true);\n        }\n      }\n\n      if (el.contains(dragEl)) {\n        return completed(false);\n      }\n    }\n\n    return false;\n  },\n  _ignoreWhileAnimating: null,\n  _offMoveEvents: function _offMoveEvents() {\n    off(document, 'mousemove', this._onTouchMove);\n    off(document, 'touchmove', this._onTouchMove);\n    off(document, 'pointermove', this._onTouchMove);\n    off(document, 'dragover', nearestEmptyInsertDetectEvent);\n    off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n    off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n  },\n  _offUpEvents: function _offUpEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._onDrop);\n    off(ownerDocument, 'touchend', this._onDrop);\n    off(ownerDocument, 'pointerup', this._onDrop);\n    off(ownerDocument, 'touchcancel', this._onDrop);\n    off(document, 'selectstart', this);\n  },\n  _onDrop: function _onDrop(\n  /**Event*/\n  evt) {\n    var el = this.el,\n        options = this.options; // Get the index of the dragged element within its parent\n\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    pluginEvent('drop', this, {\n      evt: evt\n    });\n    parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n\n    if (Sortable.eventCanceled) {\n      this._nulling();\n\n      return;\n    }\n\n    awaitingDragStarted = false;\n    isCircumstantialInvert = false;\n    pastFirstInvertThresh = false;\n    clearInterval(this._loopId);\n    clearTimeout(this._dragStartTimer);\n\n    _cancelNextTick(this.cloneId);\n\n    _cancelNextTick(this._dragStartId); // Unbind events\n\n\n    if (this.nativeDraggable) {\n      off(document, 'drop', this);\n      off(el, 'dragstart', this._onDragStart);\n    }\n\n    this._offMoveEvents();\n\n    this._offUpEvents();\n\n    if (Safari) {\n      css(document.body, 'user-select', '');\n    }\n\n    css(dragEl, 'transform', '');\n\n    if (evt) {\n      if (moved) {\n        evt.cancelable && evt.preventDefault();\n        !options.dropBubble && evt.stopPropagation();\n      }\n\n      ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        // Remove clone(s)\n        cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n      }\n\n      if (dragEl) {\n        if (this.nativeDraggable) {\n          off(dragEl, 'dragend', this);\n        }\n\n        _disableDraggable(dragEl);\n\n        dragEl.style['will-change'] = ''; // Remove classes\n        // ghostClass is added in dragStarted\n\n        if (moved && !awaitingDragStarted) {\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n        }\n\n        toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n        _dispatchEvent({\n          sortable: this,\n          name: 'unchoose',\n          toEl: parentEl,\n          newIndex: null,\n          newDraggableIndex: null,\n          originalEvent: evt\n        });\n\n        if (rootEl !== parentEl) {\n          if (newIndex >= 0) {\n            // Add event\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'add',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            }); // Remove event\n\n\n            _dispatchEvent({\n              sortable: this,\n              name: 'remove',\n              toEl: parentEl,\n              originalEvent: evt\n            }); // drag from one list and drop into another\n\n\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'sort',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            });\n\n            _dispatchEvent({\n              sortable: this,\n              name: 'sort',\n              toEl: parentEl,\n              originalEvent: evt\n            });\n          }\n\n          putSortable && putSortable.save();\n        } else {\n          if (newIndex !== oldIndex) {\n            if (newIndex >= 0) {\n              // drag & drop within the same list\n              _dispatchEvent({\n                sortable: this,\n                name: 'update',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n\n              _dispatchEvent({\n                sortable: this,\n                name: 'sort',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n            }\n          }\n        }\n\n        if (Sortable.active) {\n          /* jshint eqnull:true */\n          if (newIndex == null || newIndex === -1) {\n            newIndex = oldIndex;\n            newDraggableIndex = oldDraggableIndex;\n          }\n\n          _dispatchEvent({\n            sortable: this,\n            name: 'end',\n            toEl: parentEl,\n            originalEvent: evt\n          }); // Save sorting\n\n\n          this.save();\n        }\n      }\n    }\n\n    this._nulling();\n  },\n  _nulling: function _nulling() {\n    pluginEvent('nulling', this);\n    rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n    savedInputChecked.forEach(function (el) {\n      el.checked = true;\n    });\n    savedInputChecked.length = lastDx = lastDy = 0;\n  },\n  handleEvent: function handleEvent(\n  /**Event*/\n  evt) {\n    switch (evt.type) {\n      case 'drop':\n      case 'dragend':\n        this._onDrop(evt);\n\n        break;\n\n      case 'dragenter':\n      case 'dragover':\n        if (dragEl) {\n          this._onDragOver(evt);\n\n          _globalDragOver(evt);\n        }\n\n        break;\n\n      case 'selectstart':\n        evt.preventDefault();\n        break;\n    }\n  },\n\n  /**\n   * Serializes the item into an array of string.\n   * @returns {String[]}\n   */\n  toArray: function toArray() {\n    var order = [],\n        el,\n        children = this.el.children,\n        i = 0,\n        n = children.length,\n        options = this.options;\n\n    for (; i < n; i++) {\n      el = children[i];\n\n      if (closest(el, options.draggable, this.el, false)) {\n        order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n      }\n    }\n\n    return order;\n  },\n\n  /**\n   * Sorts the elements according to the array.\n   * @param  {String[]}  order  order of the items\n   */\n  sort: function sort(order) {\n    var items = {},\n        rootEl = this.el;\n    this.toArray().forEach(function (id, i) {\n      var el = rootEl.children[i];\n\n      if (closest(el, this.options.draggable, rootEl, false)) {\n        items[id] = el;\n      }\n    }, this);\n    order.forEach(function (id) {\n      if (items[id]) {\n        rootEl.removeChild(items[id]);\n        rootEl.appendChild(items[id]);\n      }\n    });\n  },\n\n  /**\n   * Save the current sorting\n   */\n  save: function save() {\n    var store = this.options.store;\n    store && store.set && store.set(this);\n  },\n\n  /**\n   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n   * @param   {HTMLElement}  el\n   * @param   {String}       [selector]  default: `options.draggable`\n   * @returns {HTMLElement|null}\n   */\n  closest: function closest$1(el, selector) {\n    return closest(el, selector || this.options.draggable, this.el, false);\n  },\n\n  /**\n   * Set/get option\n   * @param   {string} name\n   * @param   {*}      [value]\n   * @returns {*}\n   */\n  option: function option(name, value) {\n    var options = this.options;\n\n    if (value === void 0) {\n      return options[name];\n    } else {\n      var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n      if (typeof modifiedValue !== 'undefined') {\n        options[name] = modifiedValue;\n      } else {\n        options[name] = value;\n      }\n\n      if (name === 'group') {\n        _prepareGroup(options);\n      }\n    }\n  },\n\n  /**\n   * Destroy\n   */\n  destroy: function destroy() {\n    pluginEvent('destroy', this);\n    var el = this.el;\n    el[expando] = null;\n    off(el, 'mousedown', this._onTapStart);\n    off(el, 'touchstart', this._onTapStart);\n    off(el, 'pointerdown', this._onTapStart);\n\n    if (this.nativeDraggable) {\n      off(el, 'dragover', this);\n      off(el, 'dragenter', this);\n    } // Remove draggable attributes\n\n\n    Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n      el.removeAttribute('draggable');\n    });\n\n    this._onDrop();\n\n    this._disableDelayedDragEvents();\n\n    sortables.splice(sortables.indexOf(this.el), 1);\n    this.el = el = null;\n  },\n  _hideClone: function _hideClone() {\n    if (!cloneHidden) {\n      pluginEvent('hideClone', this);\n      if (Sortable.eventCanceled) return;\n      css(cloneEl, 'display', 'none');\n\n      if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n        cloneEl.parentNode.removeChild(cloneEl);\n      }\n\n      cloneHidden = true;\n    }\n  },\n  _showClone: function _showClone(putSortable) {\n    if (putSortable.lastPutMode !== 'clone') {\n      this._hideClone();\n\n      return;\n    }\n\n    if (cloneHidden) {\n      pluginEvent('showClone', this);\n      if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n      if (rootEl.contains(dragEl) && !this.options.group.revertClone) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      } else if (nextEl) {\n        rootEl.insertBefore(cloneEl, nextEl);\n      } else {\n        rootEl.appendChild(cloneEl);\n      }\n\n      if (this.options.group.revertClone) {\n        this.animate(dragEl, cloneEl);\n      }\n\n      css(cloneEl, 'display', '');\n      cloneHidden = false;\n    }\n  }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n  if (evt.dataTransfer) {\n    evt.dataTransfer.dropEffect = 'move';\n  }\n\n  evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n  var evt,\n      sortable = fromEl[expando],\n      onMoveFn = sortable.options.onMove,\n      retVal; // Support for new CustomEvent feature\n\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent('move', {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent('move', true, true);\n  }\n\n  evt.to = toEl;\n  evt.from = fromEl;\n  evt.dragged = dragEl;\n  evt.draggedRect = dragRect;\n  evt.related = targetEl || toEl;\n  evt.relatedRect = targetRect || getRect(toEl);\n  evt.willInsertAfter = willInsertAfter;\n  evt.originalEvent = originalEvent;\n  fromEl.dispatchEvent(evt);\n\n  if (onMoveFn) {\n    retVal = onMoveFn.call(sortable, evt, originalEvent);\n  }\n\n  return retVal;\n}\n\nfunction _disableDraggable(el) {\n  el.draggable = false;\n}\n\nfunction _unsilent() {\n  _silent = false;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n  var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n  var spacer = 10;\n  return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n  var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n      targetLength = vertical ? targetRect.height : targetRect.width,\n      targetS1 = vertical ? targetRect.top : targetRect.left,\n      targetS2 = vertical ? targetRect.bottom : targetRect.right,\n      invert = false;\n\n  if (!invertSwap) {\n    // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n    if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n      // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n      // check if past first invert threshold on side opposite of lastDirection\n      if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n        // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n        pastFirstInvertThresh = true;\n      }\n\n      if (!pastFirstInvertThresh) {\n        // dragEl shadow (target move distance shadow)\n        if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n        : mouseOnAxis > targetS2 - targetMoveDistance) {\n          return -lastDirection;\n        }\n      } else {\n        invert = true;\n      }\n    } else {\n      // Regular\n      if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n        return _getInsertDirection(target);\n      }\n    }\n  }\n\n  invert = invert || invertSwap;\n\n  if (invert) {\n    // Invert of regular\n    if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n      return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n    }\n  }\n\n  return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param  {HTMLElement} target       The target whose position dragEl is being inserted at\n * @return {Number}                   Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n  if (index(dragEl) < index(target)) {\n    return 1;\n  } else {\n    return -1;\n  }\n}\n/**\n * Generate id\n * @param   {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n  var str = el.tagName + el.className + el.src + el.href + el.textContent,\n      i = str.length,\n      sum = 0;\n\n  while (i--) {\n    sum += str.charCodeAt(i);\n  }\n\n  return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n  savedInputChecked.length = 0;\n  var inputs = root.getElementsByTagName('input');\n  var idx = inputs.length;\n\n  while (idx--) {\n    var el = inputs[idx];\n    el.checked && savedInputChecked.push(el);\n  }\n}\n\nfunction _nextTick(fn) {\n  return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n  return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n  on(document, 'touchmove', function (evt) {\n    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n      evt.preventDefault();\n    }\n  });\n} // Export utils\n\n\nSortable.utils = {\n  on: on,\n  off: off,\n  css: css,\n  find: find,\n  is: function is(el, selector) {\n    return !!closest(el, selector, el, false);\n  },\n  extend: extend,\n  throttle: throttle,\n  closest: closest,\n  toggleClass: toggleClass,\n  clone: clone,\n  index: index,\n  nextTick: _nextTick,\n  cancelNextTick: _cancelNextTick,\n  detectDirection: _detectDirection,\n  getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param  {HTMLElement} element The element\n * @return {Sortable|undefined}         The instance of Sortable\n */\n\nSortable.get = function (element) {\n  return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted\n */\n\n\nSortable.mount = function () {\n  for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n    plugins[_key] = arguments[_key];\n  }\n\n  if (plugins[0].constructor === Array) plugins = plugins[0];\n  plugins.forEach(function (plugin) {\n    if (!plugin.prototype || !plugin.prototype.constructor) {\n      throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n    }\n\n    if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);\n    PluginManager.mount(plugin);\n  });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement}  el\n * @param {Object}      [options]\n */\n\n\nSortable.create = function (el, options) {\n  return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n    scrollEl,\n    scrollRootEl,\n    scrolling = false,\n    lastAutoScrollX,\n    lastAutoScrollY,\n    touchEvt$1,\n    pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n  function AutoScroll() {\n    this.defaults = {\n      scroll: true,\n      scrollSensitivity: 30,\n      scrollSpeed: 10,\n      bubbleScroll: true\n    }; // Bind all private methods\n\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n  }\n\n  AutoScroll.prototype = {\n    dragStarted: function dragStarted(_ref) {\n      var originalEvent = _ref.originalEvent;\n\n      if (this.sortable.nativeDraggable) {\n        on(document, 'dragover', this._handleAutoScroll);\n      } else {\n        if (this.options.supportPointer) {\n          on(document, 'pointermove', this._handleFallbackAutoScroll);\n        } else if (originalEvent.touches) {\n          on(document, 'touchmove', this._handleFallbackAutoScroll);\n        } else {\n          on(document, 'mousemove', this._handleFallbackAutoScroll);\n        }\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref2) {\n      var originalEvent = _ref2.originalEvent;\n\n      // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n      if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n        this._handleAutoScroll(originalEvent);\n      }\n    },\n    drop: function drop() {\n      if (this.sortable.nativeDraggable) {\n        off(document, 'dragover', this._handleAutoScroll);\n      } else {\n        off(document, 'pointermove', this._handleFallbackAutoScroll);\n        off(document, 'touchmove', this._handleFallbackAutoScroll);\n        off(document, 'mousemove', this._handleFallbackAutoScroll);\n      }\n\n      clearPointerElemChangedInterval();\n      clearAutoScrolls();\n      cancelThrottle();\n    },\n    nulling: function nulling() {\n      touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n      autoScrolls.length = 0;\n    },\n    _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n      this._handleAutoScroll(evt, true);\n    },\n    _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n      var _this = this;\n\n      var x = (evt.touches ? evt.touches[0] : evt).clientX,\n          y = (evt.touches ? evt.touches[0] : evt).clientY,\n          elem = document.elementFromPoint(x, y);\n      touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n      // Edge's autoscroll seems too conditional,\n      // MACOS Safari does not have autoscroll,\n      // Firefox and Chrome are good\n\n      if (fallback || Edge || IE11OrLess || Safari) {\n        autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n        var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n        if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n          pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n          pointerElemChangedInterval = setInterval(function () {\n            var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n            if (newElem !== ogElemScroller) {\n              ogElemScroller = newElem;\n              clearAutoScrolls();\n            }\n\n            autoScroll(evt, _this.options, newElem, fallback);\n          }, 10);\n          lastAutoScrollX = x;\n          lastAutoScrollY = y;\n        }\n      } else {\n        // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n        if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n          clearAutoScrolls();\n          return;\n        }\n\n        autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n      }\n    }\n  };\n  return _extends(AutoScroll, {\n    pluginName: 'scroll',\n    initializeByDefault: true\n  });\n}\n\nfunction clearAutoScrolls() {\n  autoScrolls.forEach(function (autoScroll) {\n    clearInterval(autoScroll.pid);\n  });\n  autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n  clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n  if (!options.scroll) return;\n  var x = (evt.touches ? evt.touches[0] : evt).clientX,\n      y = (evt.touches ? evt.touches[0] : evt).clientY,\n      sens = options.scrollSensitivity,\n      speed = options.scrollSpeed,\n      winScroller = getWindowScrollingElement();\n  var scrollThisInstance = false,\n      scrollCustomFn; // New scroll root, set scrollEl\n\n  if (scrollRootEl !== rootEl) {\n    scrollRootEl = rootEl;\n    clearAutoScrolls();\n    scrollEl = options.scroll;\n    scrollCustomFn = options.scrollFn;\n\n    if (scrollEl === true) {\n      scrollEl = getParentAutoScrollElement(rootEl, true);\n    }\n  }\n\n  var layersOut = 0;\n  var currentParent = scrollEl;\n\n  do {\n    var el = currentParent,\n        rect = getRect(el),\n        top = rect.top,\n        bottom = rect.bottom,\n        left = rect.left,\n        right = rect.right,\n        width = rect.width,\n        height = rect.height,\n        canScrollX = void 0,\n        canScrollY = void 0,\n        scrollWidth = el.scrollWidth,\n        scrollHeight = el.scrollHeight,\n        elCSS = css(el),\n        scrollPosX = el.scrollLeft,\n        scrollPosY = el.scrollTop;\n\n    if (el === winScroller) {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n    } else {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n    }\n\n    var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n    var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n    if (!autoScrolls[layersOut]) {\n      for (var i = 0; i <= layersOut; i++) {\n        if (!autoScrolls[i]) {\n          autoScrolls[i] = {};\n        }\n      }\n    }\n\n    if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n      autoScrolls[layersOut].el = el;\n      autoScrolls[layersOut].vx = vx;\n      autoScrolls[layersOut].vy = vy;\n      clearInterval(autoScrolls[layersOut].pid);\n\n      if (vx != 0 || vy != 0) {\n        scrollThisInstance = true;\n        /* jshint loopfunc:true */\n\n        autoScrolls[layersOut].pid = setInterval(function () {\n          // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n          if (isFallback && this.layer === 0) {\n            Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n          }\n\n          var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n          var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n          if (typeof scrollCustomFn === 'function') {\n            if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n              return;\n            }\n          }\n\n          scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n        }.bind({\n          layer: layersOut\n        }), 24);\n      }\n    }\n\n    layersOut++;\n  } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n  scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n  var originalEvent = _ref.originalEvent,\n      putSortable = _ref.putSortable,\n      dragEl = _ref.dragEl,\n      activeSortable = _ref.activeSortable,\n      dispatchSortableEvent = _ref.dispatchSortableEvent,\n      hideGhostForTarget = _ref.hideGhostForTarget,\n      unhideGhostForTarget = _ref.unhideGhostForTarget;\n  if (!originalEvent) return;\n  var toSortable = putSortable || activeSortable;\n  hideGhostForTarget();\n  var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n  var target = document.elementFromPoint(touch.clientX, touch.clientY);\n  unhideGhostForTarget();\n\n  if (toSortable && !toSortable.el.contains(target)) {\n    dispatchSortableEvent('spill');\n    this.onSpill({\n      dragEl: dragEl,\n      putSortable: putSortable\n    });\n  }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n  startIndex: null,\n  dragStart: function dragStart(_ref2) {\n    var oldDraggableIndex = _ref2.oldDraggableIndex;\n    this.startIndex = oldDraggableIndex;\n  },\n  onSpill: function onSpill(_ref3) {\n    var dragEl = _ref3.dragEl,\n        putSortable = _ref3.putSortable;\n    this.sortable.captureAnimationState();\n\n    if (putSortable) {\n      putSortable.captureAnimationState();\n    }\n\n    var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n    if (nextSibling) {\n      this.sortable.el.insertBefore(dragEl, nextSibling);\n    } else {\n      this.sortable.el.appendChild(dragEl);\n    }\n\n    this.sortable.animateAll();\n\n    if (putSortable) {\n      putSortable.animateAll();\n    }\n  },\n  drop: drop\n};\n\n_extends(Revert, {\n  pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n  onSpill: function onSpill(_ref4) {\n    var dragEl = _ref4.dragEl,\n        putSortable = _ref4.putSortable;\n    var parentSortable = putSortable || this.sortable;\n    parentSortable.captureAnimationState();\n    dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n    parentSortable.animateAll();\n  },\n  drop: drop\n};\n\n_extends(Remove, {\n  pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n  function Swap() {\n    this.defaults = {\n      swapClass: 'sortable-swap-highlight'\n    };\n  }\n\n  Swap.prototype = {\n    dragStart: function dragStart(_ref) {\n      var dragEl = _ref.dragEl;\n      lastSwapEl = dragEl;\n    },\n    dragOverValid: function dragOverValid(_ref2) {\n      var completed = _ref2.completed,\n          target = _ref2.target,\n          onMove = _ref2.onMove,\n          activeSortable = _ref2.activeSortable,\n          changed = _ref2.changed,\n          cancel = _ref2.cancel;\n      if (!activeSortable.options.swap) return;\n      var el = this.sortable.el,\n          options = this.options;\n\n      if (target && target !== el) {\n        var prevSwapEl = lastSwapEl;\n\n        if (onMove(target) !== false) {\n          toggleClass(target, options.swapClass, true);\n          lastSwapEl = target;\n        } else {\n          lastSwapEl = null;\n        }\n\n        if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n          toggleClass(prevSwapEl, options.swapClass, false);\n        }\n      }\n\n      changed();\n      completed(true);\n      cancel();\n    },\n    drop: function drop(_ref3) {\n      var activeSortable = _ref3.activeSortable,\n          putSortable = _ref3.putSortable,\n          dragEl = _ref3.dragEl;\n      var toSortable = putSortable || this.sortable;\n      var options = this.options;\n      lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n      if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n        if (dragEl !== lastSwapEl) {\n          toSortable.captureAnimationState();\n          if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n          swapNodes(dragEl, lastSwapEl);\n          toSortable.animateAll();\n          if (toSortable !== activeSortable) activeSortable.animateAll();\n        }\n      }\n    },\n    nulling: function nulling() {\n      lastSwapEl = null;\n    }\n  };\n  return _extends(Swap, {\n    pluginName: 'swap',\n    eventProperties: function eventProperties() {\n      return {\n        swapItem: lastSwapEl\n      };\n    }\n  });\n}\n\nfunction swapNodes(n1, n2) {\n  var p1 = n1.parentNode,\n      p2 = n2.parentNode,\n      i1,\n      i2;\n  if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n  i1 = index(n1);\n  i2 = index(n2);\n\n  if (p1.isEqualNode(p2) && i1 < i2) {\n    i2++;\n  }\n\n  p1.insertBefore(n2, p1.children[i1]);\n  p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n    multiDragClones = [],\n    lastMultiDragSelect,\n    // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n    initialFolding = false,\n    // Initial multi-drag fold when drag started\nfolding = false,\n    // Folding any other time\ndragStarted = false,\n    dragEl$1,\n    clonesFromRect,\n    clonesHidden;\n\nfunction MultiDragPlugin() {\n  function MultiDrag(sortable) {\n    // Bind all private methods\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n\n    if (sortable.options.supportPointer) {\n      on(document, 'pointerup', this._deselectMultiDrag);\n    } else {\n      on(document, 'mouseup', this._deselectMultiDrag);\n      on(document, 'touchend', this._deselectMultiDrag);\n    }\n\n    on(document, 'keydown', this._checkKeyDown);\n    on(document, 'keyup', this._checkKeyUp);\n    this.defaults = {\n      selectedClass: 'sortable-selected',\n      multiDragKey: null,\n      setData: function setData(dataTransfer, dragEl) {\n        var data = '';\n\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          multiDragElements.forEach(function (multiDragElement, i) {\n            data += (!i ? '' : ', ') + multiDragElement.textContent;\n          });\n        } else {\n          data = dragEl.textContent;\n        }\n\n        dataTransfer.setData('Text', data);\n      }\n    };\n  }\n\n  MultiDrag.prototype = {\n    multiDragKeyDown: false,\n    isMultiDrag: false,\n    delayStartGlobal: function delayStartGlobal(_ref) {\n      var dragged = _ref.dragEl;\n      dragEl$1 = dragged;\n    },\n    delayEnded: function delayEnded() {\n      this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n    },\n    setupClone: function setupClone(_ref2) {\n      var sortable = _ref2.sortable,\n          cancel = _ref2.cancel;\n      if (!this.isMultiDrag) return;\n\n      for (var i = 0; i < multiDragElements.length; i++) {\n        multiDragClones.push(clone(multiDragElements[i]));\n        multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n        multiDragClones[i].draggable = false;\n        multiDragClones[i].style['will-change'] = '';\n        toggleClass(multiDragClones[i], this.options.selectedClass, false);\n        multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n      }\n\n      sortable._hideClone();\n\n      cancel();\n    },\n    clone: function clone(_ref3) {\n      var sortable = _ref3.sortable,\n          rootEl = _ref3.rootEl,\n          dispatchSortableEvent = _ref3.dispatchSortableEvent,\n          cancel = _ref3.cancel;\n      if (!this.isMultiDrag) return;\n\n      if (!this.options.removeCloneOnHide) {\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          insertMultiDragClones(true, rootEl);\n          dispatchSortableEvent('clone');\n          cancel();\n        }\n      }\n    },\n    showClone: function showClone(_ref4) {\n      var cloneNowShown = _ref4.cloneNowShown,\n          rootEl = _ref4.rootEl,\n          cancel = _ref4.cancel;\n      if (!this.isMultiDrag) return;\n      insertMultiDragClones(false, rootEl);\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', '');\n      });\n      cloneNowShown();\n      clonesHidden = false;\n      cancel();\n    },\n    hideClone: function hideClone(_ref5) {\n      var _this = this;\n\n      var sortable = _ref5.sortable,\n          cloneNowHidden = _ref5.cloneNowHidden,\n          cancel = _ref5.cancel;\n      if (!this.isMultiDrag) return;\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', 'none');\n\n        if (_this.options.removeCloneOnHide && clone.parentNode) {\n          clone.parentNode.removeChild(clone);\n        }\n      });\n      cloneNowHidden();\n      clonesHidden = true;\n      cancel();\n    },\n    dragStartGlobal: function dragStartGlobal(_ref6) {\n      var sortable = _ref6.sortable;\n\n      if (!this.isMultiDrag && multiDragSortable) {\n        multiDragSortable.multiDrag._deselectMultiDrag();\n      }\n\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.sortableIndex = index(multiDragElement);\n      }); // Sort multi-drag elements\n\n      multiDragElements = multiDragElements.sort(function (a, b) {\n        return a.sortableIndex - b.sortableIndex;\n      });\n      dragStarted = true;\n    },\n    dragStarted: function dragStarted(_ref7) {\n      var _this2 = this;\n\n      var sortable = _ref7.sortable;\n      if (!this.isMultiDrag) return;\n\n      if (this.options.sort) {\n        // Capture rects,\n        // hide multi drag elements (by positioning them absolute),\n        // set multi drag elements rects to dragRect,\n        // show multi drag elements,\n        // animate to rects,\n        // unset rects & remove from DOM\n        sortable.captureAnimationState();\n\n        if (this.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            css(multiDragElement, 'position', 'absolute');\n          });\n          var dragRect = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRect);\n          });\n          folding = true;\n          initialFolding = true;\n        }\n      }\n\n      sortable.animateAll(function () {\n        folding = false;\n        initialFolding = false;\n\n        if (_this2.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n        } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n        if (_this2.options.sort) {\n          removeMultiDragElements();\n        }\n      });\n    },\n    dragOver: function dragOver(_ref8) {\n      var target = _ref8.target,\n          completed = _ref8.completed,\n          cancel = _ref8.cancel;\n\n      if (folding && ~multiDragElements.indexOf(target)) {\n        completed(false);\n        cancel();\n      }\n    },\n    revert: function revert(_ref9) {\n      var fromSortable = _ref9.fromSortable,\n          rootEl = _ref9.rootEl,\n          sortable = _ref9.sortable,\n          dragRect = _ref9.dragRect;\n\n      if (multiDragElements.length > 1) {\n        // Setup unfold animation\n        multiDragElements.forEach(function (multiDragElement) {\n          sortable.addAnimationState({\n            target: multiDragElement,\n            rect: folding ? getRect(multiDragElement) : dragRect\n          });\n          unsetRect(multiDragElement);\n          multiDragElement.fromRect = dragRect;\n          fromSortable.removeAnimationState(multiDragElement);\n        });\n        folding = false;\n        insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref10) {\n      var sortable = _ref10.sortable,\n          isOwner = _ref10.isOwner,\n          insertion = _ref10.insertion,\n          activeSortable = _ref10.activeSortable,\n          parentEl = _ref10.parentEl,\n          putSortable = _ref10.putSortable;\n      var options = this.options;\n\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        }\n\n        initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n        if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n          // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n          var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n            // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n            parentEl.appendChild(multiDragElement);\n          });\n          folding = true;\n        } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n        if (!isOwner) {\n          // Only remove if not folding (folding will remove them anyways)\n          if (!folding) {\n            removeMultiDragElements();\n          }\n\n          if (multiDragElements.length > 1) {\n            var clonesHiddenBefore = clonesHidden;\n\n            activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n            if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n              multiDragClones.forEach(function (clone) {\n                activeSortable.addAnimationState({\n                  target: clone,\n                  rect: clonesFromRect\n                });\n                clone.fromRect = clonesFromRect;\n                clone.thisAnimationDuration = null;\n              });\n            }\n          } else {\n            activeSortable._showClone(sortable);\n          }\n        }\n      }\n    },\n    dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n      var dragRect = _ref11.dragRect,\n          isOwner = _ref11.isOwner,\n          activeSortable = _ref11.activeSortable;\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.thisAnimationDuration = null;\n      });\n\n      if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n        clonesFromRect = _extends({}, dragRect);\n        var dragMatrix = matrix(dragEl$1, true);\n        clonesFromRect.top -= dragMatrix.f;\n        clonesFromRect.left -= dragMatrix.e;\n      }\n    },\n    dragOverAnimationComplete: function dragOverAnimationComplete() {\n      if (folding) {\n        folding = false;\n        removeMultiDragElements();\n      }\n    },\n    drop: function drop(_ref12) {\n      var evt = _ref12.originalEvent,\n          rootEl = _ref12.rootEl,\n          parentEl = _ref12.parentEl,\n          sortable = _ref12.sortable,\n          dispatchSortableEvent = _ref12.dispatchSortableEvent,\n          oldIndex = _ref12.oldIndex,\n          putSortable = _ref12.putSortable;\n      var toSortable = putSortable || this.sortable;\n      if (!evt) return;\n      var options = this.options,\n          children = parentEl.children; // Multi-drag selection\n\n      if (!dragStarted) {\n        if (options.multiDragKey && !this.multiDragKeyDown) {\n          this._deselectMultiDrag();\n        }\n\n        toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n        if (!~multiDragElements.indexOf(dragEl$1)) {\n          multiDragElements.push(dragEl$1);\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'select',\n            targetEl: dragEl$1,\n            originalEvt: evt\n          }); // Modifier activated, select from last to dragEl\n\n          if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n            var lastIndex = index(lastMultiDragSelect),\n                currentIndex = index(dragEl$1);\n\n            if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n              // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n              // (but previous selection existed)\n              var n, i;\n\n              if (currentIndex > lastIndex) {\n                i = lastIndex;\n                n = currentIndex;\n              } else {\n                i = currentIndex;\n                n = lastIndex + 1;\n              }\n\n              for (; i < n; i++) {\n                if (~multiDragElements.indexOf(children[i])) continue;\n                toggleClass(children[i], options.selectedClass, true);\n                multiDragElements.push(children[i]);\n                dispatchEvent({\n                  sortable: sortable,\n                  rootEl: rootEl,\n                  name: 'select',\n                  targetEl: children[i],\n                  originalEvt: evt\n                });\n              }\n            }\n          } else {\n            lastMultiDragSelect = dragEl$1;\n          }\n\n          multiDragSortable = toSortable;\n        } else {\n          multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n          lastMultiDragSelect = null;\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'deselect',\n            targetEl: dragEl$1,\n            originalEvt: evt\n          });\n        }\n      } // Multi-drag drop\n\n\n      if (dragStarted && this.isMultiDrag) {\n        // Do not \"unfold\" after around dragEl if reverted\n        if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n          var dragRect = getRect(dragEl$1),\n              multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n          if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n          toSortable.captureAnimationState();\n\n          if (!initialFolding) {\n            if (options.animation) {\n              dragEl$1.fromRect = dragRect;\n              multiDragElements.forEach(function (multiDragElement) {\n                multiDragElement.thisAnimationDuration = null;\n\n                if (multiDragElement !== dragEl$1) {\n                  var rect = folding ? getRect(multiDragElement) : dragRect;\n                  multiDragElement.fromRect = rect; // Prepare unfold animation\n\n                  toSortable.addAnimationState({\n                    target: multiDragElement,\n                    rect: rect\n                  });\n                }\n              });\n            } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n            // properly they must all be removed\n\n\n            removeMultiDragElements();\n            multiDragElements.forEach(function (multiDragElement) {\n              if (children[multiDragIndex]) {\n                parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n              } else {\n                parentEl.appendChild(multiDragElement);\n              }\n\n              multiDragIndex++;\n            }); // If initial folding is done, the elements may have changed position because they are now\n            // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n            // must be fired here as Sortable will not.\n\n            if (oldIndex === index(dragEl$1)) {\n              var update = false;\n              multiDragElements.forEach(function (multiDragElement) {\n                if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n                  update = true;\n                  return;\n                }\n              });\n\n              if (update) {\n                dispatchSortableEvent('update');\n              }\n            }\n          } // Must be done after capturing individual rects (scroll bar)\n\n\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n          toSortable.animateAll();\n        }\n\n        multiDragSortable = toSortable;\n      } // Remove clones if necessary\n\n\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        multiDragClones.forEach(function (clone) {\n          clone.parentNode && clone.parentNode.removeChild(clone);\n        });\n      }\n    },\n    nullingGlobal: function nullingGlobal() {\n      this.isMultiDrag = dragStarted = false;\n      multiDragClones.length = 0;\n    },\n    destroyGlobal: function destroyGlobal() {\n      this._deselectMultiDrag();\n\n      off(document, 'pointerup', this._deselectMultiDrag);\n      off(document, 'mouseup', this._deselectMultiDrag);\n      off(document, 'touchend', this._deselectMultiDrag);\n      off(document, 'keydown', this._checkKeyDown);\n      off(document, 'keyup', this._checkKeyUp);\n    },\n    _deselectMultiDrag: function _deselectMultiDrag(evt) {\n      if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n      if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n      if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n      if (evt && evt.button !== 0) return;\n\n      while (multiDragElements.length) {\n        var el = multiDragElements[0];\n        toggleClass(el, this.options.selectedClass, false);\n        multiDragElements.shift();\n        dispatchEvent({\n          sortable: this.sortable,\n          rootEl: this.sortable.el,\n          name: 'deselect',\n          targetEl: el,\n          originalEvt: evt\n        });\n      }\n    },\n    _checkKeyDown: function _checkKeyDown(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = true;\n      }\n    },\n    _checkKeyUp: function _checkKeyUp(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = false;\n      }\n    }\n  };\n  return _extends(MultiDrag, {\n    // Static methods & properties\n    pluginName: 'multiDrag',\n    utils: {\n      /**\r\n       * Selects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be selected\r\n       */\n      select: function select(el) {\n        var sortable = el.parentNode[expando];\n        if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n        if (multiDragSortable && multiDragSortable !== sortable) {\n          multiDragSortable.multiDrag._deselectMultiDrag();\n\n          multiDragSortable = sortable;\n        }\n\n        toggleClass(el, sortable.options.selectedClass, true);\n        multiDragElements.push(el);\n      },\n\n      /**\r\n       * Deselects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be deselected\r\n       */\n      deselect: function deselect(el) {\n        var sortable = el.parentNode[expando],\n            index = multiDragElements.indexOf(el);\n        if (!sortable || !sortable.options.multiDrag || !~index) return;\n        toggleClass(el, sortable.options.selectedClass, false);\n        multiDragElements.splice(index, 1);\n      }\n    },\n    eventProperties: function eventProperties() {\n      var _this3 = this;\n\n      var oldIndicies = [],\n          newIndicies = [];\n      multiDragElements.forEach(function (multiDragElement) {\n        oldIndicies.push({\n          multiDragElement: multiDragElement,\n          index: multiDragElement.sortableIndex\n        }); // multiDragElements will already be sorted if folding\n\n        var newIndex;\n\n        if (folding && multiDragElement !== dragEl$1) {\n          newIndex = -1;\n        } else if (folding) {\n          newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n        } else {\n          newIndex = index(multiDragElement);\n        }\n\n        newIndicies.push({\n          multiDragElement: multiDragElement,\n          index: newIndex\n        });\n      });\n      return {\n        items: _toConsumableArray(multiDragElements),\n        clones: [].concat(multiDragClones),\n        oldIndicies: oldIndicies,\n        newIndicies: newIndicies\n      };\n    },\n    optionListeners: {\n      multiDragKey: function multiDragKey(key) {\n        key = key.toLowerCase();\n\n        if (key === 'ctrl') {\n          key = 'Control';\n        } else if (key.length > 1) {\n          key = key.charAt(0).toUpperCase() + key.substr(1);\n        }\n\n        return key;\n      }\n    }\n  });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n  multiDragElements.forEach(function (multiDragElement, i) {\n    var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n    if (target) {\n      rootEl.insertBefore(multiDragElement, target);\n    } else {\n      rootEl.appendChild(multiDragElement);\n    }\n  });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted\r\n * @param  {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n  multiDragClones.forEach(function (clone, i) {\n    var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n    if (target) {\n      rootEl.insertBefore(clone, target);\n    } else {\n      rootEl.appendChild(clone);\n    }\n  });\n}\n\nfunction removeMultiDragElements() {\n  multiDragElements.forEach(function (multiDragElement) {\n    if (multiDragElement === dragEl$1) return;\n    multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n  });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"sortablejs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"sortablejs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vuedraggable\"] = factory(require(\"sortablejs\"));\n\telse\n\t\troot[\"vuedraggable\"] = factory(root[\"Sortable\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE_a352__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"01f9\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar LIBRARY = __webpack_require__(\"2d00\");\nvar $export = __webpack_require__(\"5ca1\");\nvar redefine = __webpack_require__(\"2aba\");\nvar hide = __webpack_require__(\"32e9\");\nvar Iterators = __webpack_require__(\"84f2\");\nvar $iterCreate = __webpack_require__(\"41a0\");\nvar setToStringTag = __webpack_require__(\"7f20\");\nvar getPrototypeOf = __webpack_require__(\"38fd\");\nvar ITERATOR = __webpack_require__(\"2b4c\")('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n/***/ }),\n\n/***/ \"02f4\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"4588\");\nvar defined = __webpack_require__(\"be13\");\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n/***/ }),\n\n/***/ \"0390\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar at = __webpack_require__(\"02f4\")(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n\n\n/***/ }),\n\n/***/ \"0bfb\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(\"cb7c\");\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n\n\n/***/ }),\n\n/***/ \"0d58\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(\"ce10\");\nvar enumBugKeys = __webpack_require__(\"e11e\");\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ \"1495\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(\"86cc\");\nvar anObject = __webpack_require__(\"cb7c\");\nvar getKeys = __webpack_require__(\"0d58\");\n\nmodule.exports = __webpack_require__(\"9e1e\") ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n/***/ }),\n\n/***/ \"214f\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n__webpack_require__(\"b0c5\");\nvar redefine = __webpack_require__(\"2aba\");\nvar hide = __webpack_require__(\"32e9\");\nvar fails = __webpack_require__(\"79e5\");\nvar defined = __webpack_require__(\"be13\");\nvar wks = __webpack_require__(\"2b4c\");\nvar regexpExec = __webpack_require__(\"520a\");\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\n          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n            // The native String method already delegates to @@method (this\n            // polyfilled function), leasing to infinite recursion.\n            // We avoid it by directly calling the native @@method method.\n            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n\n\n/***/ }),\n\n/***/ \"230e\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"d3f4\");\nvar document = __webpack_require__(\"7726\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ \"23c6\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(\"2d95\");\nvar TAG = __webpack_require__(\"2b4c\")('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n/***/ }),\n\n/***/ \"2621\":\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ \"2aba\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"7726\");\nvar hide = __webpack_require__(\"32e9\");\nvar has = __webpack_require__(\"69a8\");\nvar SRC = __webpack_require__(\"ca5a\")('src');\nvar $toString = __webpack_require__(\"fa5b\");\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(\"8378\").inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n\n/***/ }),\n\n/***/ \"2aeb\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(\"cb7c\");\nvar dPs = __webpack_require__(\"1495\");\nvar enumBugKeys = __webpack_require__(\"e11e\");\nvar IE_PROTO = __webpack_require__(\"613b\")('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = __webpack_require__(\"230e\")('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  __webpack_require__(\"fab2\").appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n/***/ }),\n\n/***/ \"2b4c\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar store = __webpack_require__(\"5537\")('wks');\nvar uid = __webpack_require__(\"ca5a\");\nvar Symbol = __webpack_require__(\"7726\").Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n/***/ }),\n\n/***/ \"2d00\":\n/***/ (function(module, exports) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ \"2d95\":\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n\n/***/ \"2fdb\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(\"5ca1\");\nvar context = __webpack_require__(\"d2c8\");\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(\"5147\")(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ \"32e9\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(\"86cc\");\nvar createDesc = __webpack_require__(\"4630\");\nmodule.exports = __webpack_require__(\"9e1e\") ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n/***/ }),\n\n/***/ \"38fd\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(\"69a8\");\nvar toObject = __webpack_require__(\"4bf8\");\nvar IE_PROTO = __webpack_require__(\"613b\")('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n/***/ }),\n\n/***/ \"41a0\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar create = __webpack_require__(\"2aeb\");\nvar descriptor = __webpack_require__(\"4630\");\nvar setToStringTag = __webpack_require__(\"7f20\");\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(\"32e9\")(IteratorPrototype, __webpack_require__(\"2b4c\")('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n/***/ }),\n\n/***/ \"456d\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(\"4bf8\");\nvar $keys = __webpack_require__(\"0d58\");\n\n__webpack_require__(\"5eda\")('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n\n\n/***/ }),\n\n/***/ \"4588\":\n/***/ (function(module, exports) {\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n/***/ }),\n\n/***/ \"4630\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n/***/ }),\n\n/***/ \"4bf8\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(\"be13\");\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n\n\n/***/ }),\n\n/***/ \"5147\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar MATCH = __webpack_require__(\"2b4c\")('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n\n\n/***/ }),\n\n/***/ \"520a\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar regexpFlags = __webpack_require__(\"0bfb\");\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n\n\n/***/ }),\n\n/***/ \"52a7\":\n/***/ (function(module, exports) {\n\nexports.f = {}.propertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ \"5537\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar core = __webpack_require__(\"8378\");\nvar global = __webpack_require__(\"7726\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: __webpack_require__(\"2d00\") ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ \"5ca1\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"7726\");\nvar core = __webpack_require__(\"8378\");\nvar hide = __webpack_require__(\"32e9\");\nvar redefine = __webpack_require__(\"2aba\");\nvar ctx = __webpack_require__(\"9b43\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n/***/ }),\n\n/***/ \"5eda\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(\"5ca1\");\nvar core = __webpack_require__(\"8378\");\nvar fails = __webpack_require__(\"79e5\");\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n/***/ }),\n\n/***/ \"5f1b\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar classof = __webpack_require__(\"23c6\");\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n\n\n/***/ }),\n\n/***/ \"613b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(\"5537\")('keys');\nvar uid = __webpack_require__(\"ca5a\");\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ \"626a\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(\"2d95\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n/***/ }),\n\n/***/ \"6762\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(\"5ca1\");\nvar $includes = __webpack_require__(\"c366\")(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n__webpack_require__(\"9c6c\")('includes');\n\n\n/***/ }),\n\n/***/ \"6821\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(\"626a\");\nvar defined = __webpack_require__(\"be13\");\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n\n\n/***/ }),\n\n/***/ \"69a8\":\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n\n/***/ \"6a99\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(\"d3f4\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ \"7333\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = __webpack_require__(\"0d58\");\nvar gOPS = __webpack_require__(\"2621\");\nvar pIE = __webpack_require__(\"52a7\");\nvar toObject = __webpack_require__(\"4bf8\");\nvar IObject = __webpack_require__(\"626a\");\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(\"79e5\")(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n/***/ }),\n\n/***/ \"7726\":\n/***/ (function(module, exports) {\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n/***/ }),\n\n/***/ \"77f1\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"4588\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n/***/ }),\n\n/***/ \"79e5\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n\n/***/ }),\n\n/***/ \"7f20\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar def = __webpack_require__(\"86cc\").f;\nvar has = __webpack_require__(\"69a8\");\nvar TAG = __webpack_require__(\"2b4c\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n/***/ }),\n\n/***/ \"8378\":\n/***/ (function(module, exports) {\n\nvar core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n/***/ }),\n\n/***/ \"84f2\":\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ \"86cc\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(\"cb7c\");\nvar IE8_DOM_DEFINE = __webpack_require__(\"c69a\");\nvar toPrimitive = __webpack_require__(\"6a99\");\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(\"9e1e\") ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n/***/ }),\n\n/***/ \"9b43\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// optional / simple context binding\nvar aFunction = __webpack_require__(\"d8e8\");\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/***/ }),\n\n/***/ \"9c6c\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(\"2b4c\")('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(\"32e9\")(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n\n/***/ \"9def\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.15 ToLength\nvar toInteger = __webpack_require__(\"4588\");\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ \"9e1e\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(\"79e5\")(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ \"a352\":\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_a352__;\n\n/***/ }),\n\n/***/ \"a481\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar anObject = __webpack_require__(\"cb7c\");\nvar toObject = __webpack_require__(\"4bf8\");\nvar toLength = __webpack_require__(\"9def\");\nvar toInteger = __webpack_require__(\"4588\");\nvar advanceStringIndex = __webpack_require__(\"0390\");\nvar regExpExec = __webpack_require__(\"5f1b\");\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(\"214f\")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = defined(this);\n      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return fn !== undefined\n        ? fn.call(searchValue, O, replaceValue)\n        : $replace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      var res = maybeCallNative($replace, regexp, this, replaceValue);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n        results.push(result);\n        if (!global) break;\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n    // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n    var tailPos = position + matched.length;\n    var m = captures.length;\n    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n    if (namedCaptures !== undefined) {\n      namedCaptures = toObject(namedCaptures);\n      symbols = SUBSTITUTION_SYMBOLS;\n    }\n    return $replace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(1, -1)];\n          break;\n        default: // \\d\\d?\n          var n = +ch;\n          if (n === 0) return match;\n          if (n > m) {\n            var f = floor(n / 10);\n            if (f === 0) return match;\n            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n\n\n/***/ }),\n\n/***/ \"aae3\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(\"d3f4\");\nvar cof = __webpack_require__(\"2d95\");\nvar MATCH = __webpack_require__(\"2b4c\")('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n\n/***/ }),\n\n/***/ \"ac6a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $iterators = __webpack_require__(\"cadf\");\nvar getKeys = __webpack_require__(\"0d58\");\nvar redefine = __webpack_require__(\"2aba\");\nvar global = __webpack_require__(\"7726\");\nvar hide = __webpack_require__(\"32e9\");\nvar Iterators = __webpack_require__(\"84f2\");\nvar wks = __webpack_require__(\"2b4c\");\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n\n\n/***/ }),\n\n/***/ \"b0c5\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar regexpExec = __webpack_require__(\"520a\");\n__webpack_require__(\"5ca1\")({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n\n\n/***/ }),\n\n/***/ \"be13\":\n/***/ (function(module, exports) {\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n/***/ }),\n\n/***/ \"c366\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = __webpack_require__(\"6821\");\nvar toLength = __webpack_require__(\"9def\");\nvar toAbsoluteIndex = __webpack_require__(\"77f1\");\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n/***/ }),\n\n/***/ \"c649\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return insertNodeAt; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return camelize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return console; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return removeNode; });\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"a481\");\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction getConsole() {\n  if (typeof window !== \"undefined\") {\n    return window.console;\n  }\n\n  return global.console;\n}\n\nvar console = getConsole();\n\nfunction cached(fn) {\n  var cache = Object.create(null);\n  return function cachedFn(str) {\n    var hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n}\n\nvar regex = /-(\\w)/g;\nvar camelize = cached(function (str) {\n  return str.replace(regex, function (_, c) {\n    return c ? c.toUpperCase() : \"\";\n  });\n});\n\nfunction removeNode(node) {\n  if (node.parentElement !== null) {\n    node.parentElement.removeChild(node);\n  }\n}\n\nfunction insertNodeAt(fatherNode, node, position) {\n  var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\n  fatherNode.insertBefore(node, refNode);\n}\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(\"c8ba\")))\n\n/***/ }),\n\n/***/ \"c69a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = !__webpack_require__(\"9e1e\") && !__webpack_require__(\"79e5\")(function () {\n  return Object.defineProperty(__webpack_require__(\"230e\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ \"c8ba\":\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n\n/***/ \"ca5a\":\n/***/ (function(module, exports) {\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n/***/ }),\n\n/***/ \"cadf\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar addToUnscopables = __webpack_require__(\"9c6c\");\nvar step = __webpack_require__(\"d53b\");\nvar Iterators = __webpack_require__(\"84f2\");\nvar toIObject = __webpack_require__(\"6821\");\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(\"01f9\")(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n\n/***/ \"cb7c\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"d3f4\");\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n/***/ }),\n\n/***/ \"ce10\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(\"69a8\");\nvar toIObject = __webpack_require__(\"6821\");\nvar arrayIndexOf = __webpack_require__(\"c366\")(false);\nvar IE_PROTO = __webpack_require__(\"613b\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n/***/ }),\n\n/***/ \"d2c8\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(\"aae3\");\nvar defined = __webpack_require__(\"be13\");\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n\n\n/***/ }),\n\n/***/ \"d3f4\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n\n/***/ \"d53b\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n\n\n/***/ }),\n\n/***/ \"d8e8\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n/***/ }),\n\n/***/ \"e11e\":\n/***/ (function(module, exports) {\n\n// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n/***/ }),\n\n/***/ \"f559\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(\"5ca1\");\nvar toLength = __webpack_require__(\"9def\");\nvar context = __webpack_require__(\"d2c8\");\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(\"5147\")(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n\n\n/***/ }),\n\n/***/ \"f6fd\":\n/***/ (function(module, exports) {\n\n// document.currentScript polyfill by Adam Miller\n\n// MIT license\n\n(function(document){\n  var currentScript = \"currentScript\",\n      scripts = document.getElementsByTagName('script'); // Live NodeList collection\n\n  // If browser needs currentScript polyfill, add get currentScript() to the document object\n  if (!(currentScript in document)) {\n    Object.defineProperty(document, currentScript, {\n      get: function(){\n\n        // IE 6-10 supports script readyState\n        // IE 10+ support stack trace\n        try { throw new Error(); }\n        catch (err) {\n\n          // Find the second match for the \"at\" string to get file src url from stack.\n          // Specifically works with the format of stack traces in IE.\n          var i, res = ((/.*at [^\\(]*\\((.*):.+:.+\\)$/ig).exec(err.stack) || [false])[1];\n\n          // For all scripts on the page, if src matches or if ready state is interactive, return the script tag\n          for(i in scripts){\n            if(scripts[i].src == res || scripts[i].readyState == \"interactive\"){\n              return scripts[i];\n            }\n          }\n\n          // If no match, return null\n          return null;\n        }\n      }\n    });\n  }\n})(document);\n\n\n/***/ }),\n\n/***/ \"f751\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(\"5ca1\");\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(\"7333\") });\n\n\n/***/ }),\n\n/***/ \"fa5b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(\"5537\")('native-function-to-string', Function.toString);\n\n\n/***/ }),\n\n/***/ \"fab2\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar document = __webpack_require__(\"7726\").document;\nmodule.exports = document && document.documentElement;\n\n\n/***/ }),\n\n/***/ \"fb15\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n  if (true) {\n    __webpack_require__(\"f6fd\")\n  }\n\n  var setPublicPath_i\n  if ((setPublicPath_i = window.document.currentScript) && (setPublicPath_i = setPublicPath_i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n    __webpack_require__.p = setPublicPath_i[1] // eslint-disable-line\n  }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.assign.js\nvar es6_object_assign = __webpack_require__(\"f751\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.starts-with.js\nvar es6_string_starts_with = __webpack_require__(\"f559\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom.iterable.js\nvar web_dom_iterable = __webpack_require__(\"ac6a\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.array.iterator.js\nvar es6_array_iterator = __webpack_require__(\"cadf\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.keys.js\nvar es6_object_keys = __webpack_require__(\"456d\");\n\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\n\n\n\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es7.array.includes.js\nvar es7_array_includes = __webpack_require__(\"6762\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.includes.js\nvar es6_string_includes = __webpack_require__(\"2fdb\");\n\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\n\n\n\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n// EXTERNAL MODULE: external {\"commonjs\":\"sortablejs\",\"commonjs2\":\"sortablejs\",\"amd\":\"sortablejs\",\"root\":\"Sortable\"}\nvar external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_ = __webpack_require__(\"a352\");\nvar external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_);\n\n// EXTERNAL MODULE: ./src/util/helper.js\nvar helper = __webpack_require__(\"c649\");\n\n// CONCATENATED MODULE: ./src/vuedraggable.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction buildAttribute(object, propName, value) {\n  if (value === undefined) {\n    return object;\n  }\n\n  object = object || {};\n  object[propName] = value;\n  return object;\n}\n\nfunction computeVmIndex(vnodes, element) {\n  return vnodes.map(function (elt) {\n    return elt.elm;\n  }).indexOf(element);\n}\n\nfunction _computeIndexes(slots, children, isTransition, footerOffset) {\n  if (!slots) {\n    return [];\n  }\n\n  var elmFromNodes = slots.map(function (elt) {\n    return elt.elm;\n  });\n  var footerIndex = children.length - footerOffset;\n\n  var rawIndexes = _toConsumableArray(children).map(function (elt, idx) {\n    return idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt);\n  });\n\n  return isTransition ? rawIndexes.filter(function (ind) {\n    return ind !== -1;\n  }) : rawIndexes;\n}\n\nfunction emit(evtName, evtData) {\n  var _this = this;\n\n  this.$nextTick(function () {\n    return _this.$emit(evtName.toLowerCase(), evtData);\n  });\n}\n\nfunction delegateAndEmit(evtName) {\n  var _this2 = this;\n\n  return function (evtData) {\n    if (_this2.realList !== null) {\n      _this2[\"onDrag\" + evtName](evtData);\n    }\n\n    emit.call(_this2, evtName, evtData);\n  };\n}\n\nfunction isTransitionName(name) {\n  return [\"transition-group\", \"TransitionGroup\"].includes(name);\n}\n\nfunction vuedraggable_isTransition(slots) {\n  if (!slots || slots.length !== 1) {\n    return false;\n  }\n\n  var _slots = _slicedToArray(slots, 1),\n      componentOptions = _slots[0].componentOptions;\n\n  if (!componentOptions) {\n    return false;\n  }\n\n  return isTransitionName(componentOptions.tag);\n}\n\nfunction getSlot(slot, scopedSlot, key) {\n  return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined);\n}\n\nfunction computeChildrenAndOffsets(children, slot, scopedSlot) {\n  var headerOffset = 0;\n  var footerOffset = 0;\n  var header = getSlot(slot, scopedSlot, \"header\");\n\n  if (header) {\n    headerOffset = header.length;\n    children = children ? [].concat(_toConsumableArray(header), _toConsumableArray(children)) : _toConsumableArray(header);\n  }\n\n  var footer = getSlot(slot, scopedSlot, \"footer\");\n\n  if (footer) {\n    footerOffset = footer.length;\n    children = children ? [].concat(_toConsumableArray(children), _toConsumableArray(footer)) : _toConsumableArray(footer);\n  }\n\n  return {\n    children: children,\n    headerOffset: headerOffset,\n    footerOffset: footerOffset\n  };\n}\n\nfunction getComponentAttributes($attrs, componentData) {\n  var attributes = null;\n\n  var update = function update(name, value) {\n    attributes = buildAttribute(attributes, name, value);\n  };\n\n  var attrs = Object.keys($attrs).filter(function (key) {\n    return key === \"id\" || key.startsWith(\"data-\");\n  }).reduce(function (res, key) {\n    res[key] = $attrs[key];\n    return res;\n  }, {});\n  update(\"attrs\", attrs);\n\n  if (!componentData) {\n    return attributes;\n  }\n\n  var on = componentData.on,\n      props = componentData.props,\n      componentDataAttrs = componentData.attrs;\n  update(\"on\", on);\n  update(\"props\", props);\n  Object.assign(attributes.attrs, componentDataAttrs);\n  return attributes;\n}\n\nvar eventsListened = [\"Start\", \"Add\", \"Remove\", \"Update\", \"End\"];\nvar eventsToEmit = [\"Choose\", \"Unchoose\", \"Sort\", \"Filter\", \"Clone\"];\nvar readonlyProperties = [\"Move\"].concat(eventsListened, eventsToEmit).map(function (evt) {\n  return \"on\" + evt;\n});\nvar draggingElement = null;\nvar props = {\n  options: Object,\n  list: {\n    type: Array,\n    required: false,\n    default: null\n  },\n  value: {\n    type: Array,\n    required: false,\n    default: null\n  },\n  noTransitionOnDrag: {\n    type: Boolean,\n    default: false\n  },\n  clone: {\n    type: Function,\n    default: function _default(original) {\n      return original;\n    }\n  },\n  element: {\n    type: String,\n    default: \"div\"\n  },\n  tag: {\n    type: String,\n    default: null\n  },\n  move: {\n    type: Function,\n    default: null\n  },\n  componentData: {\n    type: Object,\n    required: false,\n    default: null\n  }\n};\nvar draggableComponent = {\n  name: \"draggable\",\n  inheritAttrs: false,\n  props: props,\n  data: function data() {\n    return {\n      transitionMode: false,\n      noneFunctionalComponentMode: false\n    };\n  },\n  render: function render(h) {\n    var slots = this.$slots.default;\n    this.transitionMode = vuedraggable_isTransition(slots);\n\n    var _computeChildrenAndOf = computeChildrenAndOffsets(slots, this.$slots, this.$scopedSlots),\n        children = _computeChildrenAndOf.children,\n        headerOffset = _computeChildrenAndOf.headerOffset,\n        footerOffset = _computeChildrenAndOf.footerOffset;\n\n    this.headerOffset = headerOffset;\n    this.footerOffset = footerOffset;\n    var attributes = getComponentAttributes(this.$attrs, this.componentData);\n    return h(this.getTag(), attributes, children);\n  },\n  created: function created() {\n    if (this.list !== null && this.value !== null) {\n      helper[\"b\" /* console */].error(\"Value and list props are mutually exclusive! Please set one or another.\");\n    }\n\n    if (this.element !== \"div\") {\n      helper[\"b\" /* console */].warn(\"Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props\");\n    }\n\n    if (this.options !== undefined) {\n      helper[\"b\" /* console */].warn(\"Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props\");\n    }\n  },\n  mounted: function mounted() {\n    var _this3 = this;\n\n    this.noneFunctionalComponentMode = this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() && !this.getIsFunctional();\n\n    if (this.noneFunctionalComponentMode && this.transitionMode) {\n      throw new Error(\"Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: \".concat(this.getTag()));\n    }\n\n    var optionsAdded = {};\n    eventsListened.forEach(function (elt) {\n      optionsAdded[\"on\" + elt] = delegateAndEmit.call(_this3, elt);\n    });\n    eventsToEmit.forEach(function (elt) {\n      optionsAdded[\"on\" + elt] = emit.bind(_this3, elt);\n    });\n    var attributes = Object.keys(this.$attrs).reduce(function (res, key) {\n      res[Object(helper[\"a\" /* camelize */])(key)] = _this3.$attrs[key];\n      return res;\n    }, {});\n    var options = Object.assign({}, this.options, attributes, optionsAdded, {\n      onMove: function onMove(evt, originalEvent) {\n        return _this3.onDragMove(evt, originalEvent);\n      }\n    });\n    !(\"draggable\" in options) && (options.draggable = \">*\");\n    this._sortable = new external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default.a(this.rootContainer, options);\n    this.computeIndexes();\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this._sortable !== undefined) this._sortable.destroy();\n  },\n  computed: {\n    rootContainer: function rootContainer() {\n      return this.transitionMode ? this.$el.children[0] : this.$el;\n    },\n    realList: function realList() {\n      return this.list ? this.list : this.value;\n    }\n  },\n  watch: {\n    options: {\n      handler: function handler(newOptionValue) {\n        this.updateOptions(newOptionValue);\n      },\n      deep: true\n    },\n    $attrs: {\n      handler: function handler(newOptionValue) {\n        this.updateOptions(newOptionValue);\n      },\n      deep: true\n    },\n    realList: function realList() {\n      this.computeIndexes();\n    }\n  },\n  methods: {\n    getIsFunctional: function getIsFunctional() {\n      var fnOptions = this._vnode.fnOptions;\n      return fnOptions && fnOptions.functional;\n    },\n    getTag: function getTag() {\n      return this.tag || this.element;\n    },\n    updateOptions: function updateOptions(newOptionValue) {\n      for (var property in newOptionValue) {\n        var value = Object(helper[\"a\" /* camelize */])(property);\n\n        if (readonlyProperties.indexOf(value) === -1) {\n          this._sortable.option(value, newOptionValue[property]);\n        }\n      }\n    },\n    getChildrenNodes: function getChildrenNodes() {\n      if (this.noneFunctionalComponentMode) {\n        return this.$children[0].$slots.default;\n      }\n\n      var rawNodes = this.$slots.default;\n      return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\n    },\n    computeIndexes: function computeIndexes() {\n      var _this4 = this;\n\n      this.$nextTick(function () {\n        _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode, _this4.footerOffset);\n      });\n    },\n    getUnderlyingVm: function getUnderlyingVm(htmlElt) {\n      var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\n\n      if (index === -1) {\n        //Edge case during move callback: related element might be\n        //an element different from collection\n        return null;\n      }\n\n      var element = this.realList[index];\n      return {\n        index: index,\n        element: element\n      };\n    },\n    getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {\n      var vue = _ref.__vue__;\n\n      if (!vue || !vue.$options || !isTransitionName(vue.$options._componentTag)) {\n        if (!(\"realList\" in vue) && vue.$children.length === 1 && \"realList\" in vue.$children[0]) return vue.$children[0];\n        return vue;\n      }\n\n      return vue.$parent;\n    },\n    emitChanges: function emitChanges(evt) {\n      var _this5 = this;\n\n      this.$nextTick(function () {\n        _this5.$emit(\"change\", evt);\n      });\n    },\n    alterList: function alterList(onList) {\n      if (this.list) {\n        onList(this.list);\n        return;\n      }\n\n      var newList = _toConsumableArray(this.value);\n\n      onList(newList);\n      this.$emit(\"input\", newList);\n    },\n    spliceList: function spliceList() {\n      var _arguments = arguments;\n\n      var spliceList = function spliceList(list) {\n        return list.splice.apply(list, _toConsumableArray(_arguments));\n      };\n\n      this.alterList(spliceList);\n    },\n    updatePosition: function updatePosition(oldIndex, newIndex) {\n      var updatePosition = function updatePosition(list) {\n        return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\n      };\n\n      this.alterList(updatePosition);\n    },\n    getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {\n      var to = _ref2.to,\n          related = _ref2.related;\n      var component = this.getUnderlyingPotencialDraggableComponent(to);\n\n      if (!component) {\n        return {\n          component: component\n        };\n      }\n\n      var list = component.realList;\n      var context = {\n        list: list,\n        component: component\n      };\n\n      if (to !== related && list && component.getUnderlyingVm) {\n        var destination = component.getUnderlyingVm(related);\n\n        if (destination) {\n          return Object.assign(destination, context);\n        }\n      }\n\n      return context;\n    },\n    getVmIndex: function getVmIndex(domIndex) {\n      var indexes = this.visibleIndexes;\n      var numberIndexes = indexes.length;\n      return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\n    },\n    getComponent: function getComponent() {\n      return this.$slots.default[0].componentInstance;\n    },\n    resetTransitionData: function resetTransitionData(index) {\n      if (!this.noTransitionOnDrag || !this.transitionMode) {\n        return;\n      }\n\n      var nodes = this.getChildrenNodes();\n      nodes[index].data = null;\n      var transitionContainer = this.getComponent();\n      transitionContainer.children = [];\n      transitionContainer.kept = undefined;\n    },\n    onDragStart: function onDragStart(evt) {\n      this.context = this.getUnderlyingVm(evt.item);\n      evt.item._underlying_vm_ = this.clone(this.context.element);\n      draggingElement = evt.item;\n    },\n    onDragAdd: function onDragAdd(evt) {\n      var element = evt.item._underlying_vm_;\n\n      if (element === undefined) {\n        return;\n      }\n\n      Object(helper[\"d\" /* removeNode */])(evt.item);\n      var newIndex = this.getVmIndex(evt.newIndex);\n      this.spliceList(newIndex, 0, element);\n      this.computeIndexes();\n      var added = {\n        element: element,\n        newIndex: newIndex\n      };\n      this.emitChanges({\n        added: added\n      });\n    },\n    onDragRemove: function onDragRemove(evt) {\n      Object(helper[\"c\" /* insertNodeAt */])(this.rootContainer, evt.item, evt.oldIndex);\n\n      if (evt.pullMode === \"clone\") {\n        Object(helper[\"d\" /* removeNode */])(evt.clone);\n        return;\n      }\n\n      var oldIndex = this.context.index;\n      this.spliceList(oldIndex, 1);\n      var removed = {\n        element: this.context.element,\n        oldIndex: oldIndex\n      };\n      this.resetTransitionData(oldIndex);\n      this.emitChanges({\n        removed: removed\n      });\n    },\n    onDragUpdate: function onDragUpdate(evt) {\n      Object(helper[\"d\" /* removeNode */])(evt.item);\n      Object(helper[\"c\" /* insertNodeAt */])(evt.from, evt.item, evt.oldIndex);\n      var oldIndex = this.context.index;\n      var newIndex = this.getVmIndex(evt.newIndex);\n      this.updatePosition(oldIndex, newIndex);\n      var moved = {\n        element: this.context.element,\n        oldIndex: oldIndex,\n        newIndex: newIndex\n      };\n      this.emitChanges({\n        moved: moved\n      });\n    },\n    updateProperty: function updateProperty(evt, propertyName) {\n      evt.hasOwnProperty(propertyName) && (evt[propertyName] += this.headerOffset);\n    },\n    computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\n      if (!relatedContext.element) {\n        return 0;\n      }\n\n      var domChildren = _toConsumableArray(evt.to.children).filter(function (el) {\n        return el.style[\"display\"] !== \"none\";\n      });\n\n      var currentDOMIndex = domChildren.indexOf(evt.related);\n      var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\n      var draggedInList = domChildren.indexOf(draggingElement) !== -1;\n      return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\n    },\n    onDragMove: function onDragMove(evt, originalEvent) {\n      var onMove = this.move;\n\n      if (!onMove || !this.realList) {\n        return true;\n      }\n\n      var relatedContext = this.getRelatedContextFromMoveEvent(evt);\n      var draggedContext = this.context;\n      var futureIndex = this.computeFutureIndex(relatedContext, evt);\n      Object.assign(draggedContext, {\n        futureIndex: futureIndex\n      });\n      var sendEvt = Object.assign({}, evt, {\n        relatedContext: relatedContext,\n        draggedContext: draggedContext\n      });\n      return onMove(sendEvt, originalEvent);\n    },\n    onDragEnd: function onDragEnd() {\n      this.computeIndexes();\n      draggingElement = null;\n    }\n  }\n};\n\nif (typeof window !== \"undefined\" && \"Vue\" in window) {\n  window.Vue.component(\"draggable\", draggableComponent);\n}\n\n/* harmony default export */ var vuedraggable = (draggableComponent);\n// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = __webpack_exports__[\"default\"] = (vuedraggable);\n\n\n\n/***/ })\n\n/******/ })[\"default\"];\n});\n//# sourceMappingURL=vuedraggable.umd.js.map","// extracted by mini-css-extract-plugin\nexport {};","// Styles\nimport \"../../../src/components/VAlert/VAlert.sass\"; // Extensions\n\nimport VSheet from '../VSheet'; // Components\n\nimport VBtn from '../VBtn';\nimport VIcon from '../VIcon'; // Mixins\n\nimport Toggleable from '../../mixins/toggleable';\nimport Themeable from '../../mixins/themeable';\nimport Transitionable from '../../mixins/transitionable'; // Utilities\n\nimport mixins from '../../util/mixins';\nimport { breaking } from '../../util/console';\n/* @vue/component */\n\nexport default mixins(VSheet, Toggleable, Transitionable).extend({\n  name: 'v-alert',\n  props: {\n    border: {\n      type: String,\n\n      validator(val) {\n        return ['top', 'right', 'bottom', 'left'].includes(val);\n      }\n\n    },\n    closeLabel: {\n      type: String,\n      default: '$vuetify.close'\n    },\n    coloredBorder: Boolean,\n    dense: Boolean,\n    dismissible: Boolean,\n    closeIcon: {\n      type: String,\n      default: '$cancel'\n    },\n    icon: {\n      default: '',\n      type: [Boolean, String],\n\n      validator(val) {\n        return typeof val === 'string' || val === false;\n      }\n\n    },\n    outlined: Boolean,\n    prominent: Boolean,\n    text: Boolean,\n    type: {\n      type: String,\n\n      validator(val) {\n        return ['info', 'error', 'success', 'warning'].includes(val);\n      }\n\n    },\n    value: {\n      type: Boolean,\n      default: true\n    }\n  },\n  computed: {\n    __cachedBorder() {\n      if (!this.border) return null;\n      let data = {\n        staticClass: 'v-alert__border',\n        class: {\n          [`v-alert__border--${this.border}`]: true\n        }\n      };\n\n      if (this.coloredBorder) {\n        data = this.setBackgroundColor(this.computedColor, data);\n        data.class['v-alert__border--has-color'] = true;\n      }\n\n      return this.$createElement('div', data);\n    },\n\n    __cachedDismissible() {\n      if (!this.dismissible) return null;\n      const color = this.iconColor;\n      return this.$createElement(VBtn, {\n        staticClass: 'v-alert__dismissible',\n        props: {\n          color,\n          icon: true,\n          small: true\n        },\n        attrs: {\n          'aria-label': this.$vuetify.lang.t(this.closeLabel)\n        },\n        on: {\n          click: () => this.isActive = false\n        }\n      }, [this.$createElement(VIcon, {\n        props: {\n          color\n        }\n      }, this.closeIcon)]);\n    },\n\n    __cachedIcon() {\n      if (!this.computedIcon) return null;\n      return this.$createElement(VIcon, {\n        staticClass: 'v-alert__icon',\n        props: {\n          color: this.iconColor\n        }\n      }, this.computedIcon);\n    },\n\n    classes() {\n      const classes = { ...VSheet.options.computed.classes.call(this),\n        'v-alert--border': Boolean(this.border),\n        'v-alert--dense': this.dense,\n        'v-alert--outlined': this.outlined,\n        'v-alert--prominent': this.prominent,\n        'v-alert--text': this.text\n      };\n\n      if (this.border) {\n        classes[`v-alert--border-${this.border}`] = true;\n      }\n\n      return classes;\n    },\n\n    computedColor() {\n      return this.color || this.type;\n    },\n\n    computedIcon() {\n      if (this.icon === false) return false;\n      if (typeof this.icon === 'string' && this.icon) return this.icon;\n      if (!['error', 'info', 'success', 'warning'].includes(this.type)) return false;\n      return `$${this.type}`;\n    },\n\n    hasColoredIcon() {\n      return this.hasText || Boolean(this.border) && this.coloredBorder;\n    },\n\n    hasText() {\n      return this.text || this.outlined;\n    },\n\n    iconColor() {\n      return this.hasColoredIcon ? this.computedColor : undefined;\n    },\n\n    isDark() {\n      if (this.type && !this.coloredBorder && !this.outlined) return true;\n      return Themeable.options.computed.isDark.call(this);\n    }\n\n  },\n\n  created() {\n    /* istanbul ignore next */\n    if (this.$attrs.hasOwnProperty('outline')) {\n      breaking('outline', 'outlined', this);\n    }\n  },\n\n  methods: {\n    genWrapper() {\n      const children = [this.$slots.prepend || this.__cachedIcon, this.genContent(), this.__cachedBorder, this.$slots.append, this.$scopedSlots.close ? this.$scopedSlots.close({\n        toggle: this.toggle\n      }) : this.__cachedDismissible];\n      const data = {\n        staticClass: 'v-alert__wrapper'\n      };\n      return this.$createElement('div', data, children);\n    },\n\n    genContent() {\n      return this.$createElement('div', {\n        staticClass: 'v-alert__content'\n      }, this.$slots.default);\n    },\n\n    genAlert() {\n      let data = {\n        staticClass: 'v-alert',\n        attrs: {\n          role: 'alert'\n        },\n        on: this.listeners$,\n        class: this.classes,\n        style: this.styles,\n        directives: [{\n          name: 'show',\n          value: this.isActive\n        }]\n      };\n\n      if (!this.coloredBorder) {\n        const setColor = this.hasText ? this.setTextColor : this.setBackgroundColor;\n        data = setColor(this.computedColor, data);\n      }\n\n      return this.$createElement('div', data, [this.genWrapper()]);\n    },\n\n    /** @public */\n    toggle() {\n      this.isActive = !this.isActive;\n    }\n\n  },\n\n  render(h) {\n    const render = this.genAlert();\n    if (!this.transition) return render;\n    return h('transition', {\n      props: {\n        name: this.transition,\n        origin: this.origin,\n        mode: this.mode\n      }\n    }, [render]);\n  }\n\n});\n//# sourceMappingURL=VAlert.js.map","// Styles\nimport \"../../../src/components/VAutocomplete/VAutocomplete.sass\"; // Extensions\n\nimport VSelect, { defaultMenuProps as VSelectMenuProps } from '../VSelect/VSelect';\nimport VTextField from '../VTextField/VTextField'; // Utilities\n\nimport mergeData from '../../util/mergeData';\nimport { getObjectValueByPath, getPropertyFromItem, keyCodes } from '../../util/helpers';\nconst defaultMenuProps = { ...VSelectMenuProps,\n  offsetY: true,\n  offsetOverflow: true,\n  transition: false\n};\n/* @vue/component */\n\nexport default VSelect.extend({\n  name: 'v-autocomplete',\n  props: {\n    autoSelectFirst: {\n      type: Boolean,\n      default: false\n    },\n    filter: {\n      type: Function,\n      default: (item, queryText, itemText) => {\n        return itemText.toLocaleLowerCase().indexOf(queryText.toLocaleLowerCase()) > -1;\n      }\n    },\n    hideNoData: Boolean,\n    menuProps: {\n      type: VSelect.options.props.menuProps.type,\n      default: () => defaultMenuProps\n    },\n    noFilter: Boolean,\n    searchInput: {\n      type: String\n    }\n  },\n\n  data() {\n    return {\n      lazySearch: this.searchInput\n    };\n  },\n\n  computed: {\n    classes() {\n      return { ...VSelect.options.computed.classes.call(this),\n        'v-autocomplete': true,\n        'v-autocomplete--is-selecting-index': this.selectedIndex > -1\n      };\n    },\n\n    computedItems() {\n      return this.filteredItems;\n    },\n\n    selectedValues() {\n      return this.selectedItems.map(item => this.getValue(item));\n    },\n\n    hasDisplayedItems() {\n      return this.hideSelected ? this.filteredItems.some(item => !this.hasItem(item)) : this.filteredItems.length > 0;\n    },\n\n    currentRange() {\n      if (this.selectedItem == null) return 0;\n      return String(this.getText(this.selectedItem)).length;\n    },\n\n    filteredItems() {\n      if (!this.isSearching || this.noFilter || this.internalSearch == null) return this.allItems;\n      return this.allItems.filter(item => {\n        const value = getPropertyFromItem(item, this.itemText);\n        const text = value != null ? String(value) : '';\n        return this.filter(item, String(this.internalSearch), text);\n      });\n    },\n\n    internalSearch: {\n      get() {\n        return this.lazySearch;\n      },\n\n      set(val) {\n        // emit update event only when the new\n        // search value is different from previous\n        if (this.lazySearch !== val) {\n          this.lazySearch = val;\n          this.$emit('update:search-input', val);\n        }\n      }\n\n    },\n\n    isAnyValueAllowed() {\n      return false;\n    },\n\n    isDirty() {\n      return this.searchIsDirty || this.selectedItems.length > 0;\n    },\n\n    isSearching() {\n      return this.multiple && this.searchIsDirty || this.searchIsDirty && this.internalSearch !== this.getText(this.selectedItem);\n    },\n\n    menuCanShow() {\n      if (!this.isFocused) return false;\n      return this.hasDisplayedItems || !this.hideNoData;\n    },\n\n    $_menuProps() {\n      const props = VSelect.options.computed.$_menuProps.call(this);\n      props.contentClass = `v-autocomplete__content ${props.contentClass || ''}`.trim();\n      return { ...defaultMenuProps,\n        ...props\n      };\n    },\n\n    searchIsDirty() {\n      return this.internalSearch != null && this.internalSearch !== '';\n    },\n\n    selectedItem() {\n      if (this.multiple) return null;\n      return this.selectedItems.find(i => {\n        return this.valueComparator(this.getValue(i), this.getValue(this.internalValue));\n      });\n    },\n\n    listData() {\n      const data = VSelect.options.computed.listData.call(this);\n      data.props = { ...data.props,\n        items: this.virtualizedItems,\n        noFilter: this.noFilter || !this.isSearching || !this.filteredItems.length,\n        searchInput: this.internalSearch\n      };\n      return data;\n    }\n\n  },\n  watch: {\n    filteredItems: 'onFilteredItemsChanged',\n    internalValue: 'setSearch',\n\n    isFocused(val) {\n      if (val) {\n        document.addEventListener('copy', this.onCopy);\n        this.$refs.input && this.$refs.input.select();\n      } else {\n        document.removeEventListener('copy', this.onCopy);\n        this.blur();\n        this.updateSelf();\n      }\n    },\n\n    isMenuActive(val) {\n      if (val || !this.hasSlot) return;\n      this.lazySearch = null;\n    },\n\n    items(val, oldVal) {\n      // If we are focused, the menu\n      // is not active, hide no data is enabled,\n      // and items change\n      // User is probably async loading\n      // items, try to activate the menu\n      if (!(oldVal && oldVal.length) && this.hideNoData && this.isFocused && !this.isMenuActive && val.length) this.activateMenu();\n    },\n\n    searchInput(val) {\n      this.lazySearch = val;\n    },\n\n    internalSearch: 'onInternalSearchChanged',\n    itemText: 'updateSelf'\n  },\n\n  created() {\n    this.setSearch();\n  },\n\n  destroyed() {\n    document.removeEventListener('copy', this.onCopy);\n  },\n\n  methods: {\n    onFilteredItemsChanged(val, oldVal) {\n      // TODO: How is the watcher triggered\n      // for duplicate items? no idea\n      if (val === oldVal) return;\n\n      if (!this.autoSelectFirst) {\n        const preSelectedItem = oldVal[this.$refs.menu.listIndex];\n\n        if (preSelectedItem) {\n          this.setMenuIndex(val.findIndex(i => i === preSelectedItem));\n        } else {\n          this.setMenuIndex(-1);\n        }\n\n        this.$emit('update:list-index', this.$refs.menu.listIndex);\n      }\n\n      this.$nextTick(() => {\n        if (!this.internalSearch || val.length !== 1 && !this.autoSelectFirst) return;\n        this.$refs.menu.getTiles();\n\n        if (this.autoSelectFirst && val.length) {\n          this.setMenuIndex(0);\n          this.$emit('update:list-index', this.$refs.menu.listIndex);\n        }\n      });\n    },\n\n    onInternalSearchChanged() {\n      this.updateMenuDimensions();\n    },\n\n    updateMenuDimensions() {\n      // Type from menuable is not making it through\n      this.isMenuActive && this.$refs.menu && this.$refs.menu.updateDimensions();\n    },\n\n    changeSelectedIndex(keyCode) {\n      // Do not allow changing of selectedIndex\n      // when search is dirty\n      if (this.searchIsDirty) return;\n\n      if (this.multiple && keyCode === keyCodes.left) {\n        if (this.selectedIndex === -1) {\n          this.selectedIndex = this.selectedItems.length - 1;\n        } else {\n          this.selectedIndex--;\n        }\n      } else if (this.multiple && keyCode === keyCodes.right) {\n        if (this.selectedIndex >= this.selectedItems.length - 1) {\n          this.selectedIndex = -1;\n        } else {\n          this.selectedIndex++;\n        }\n      } else if (keyCode === keyCodes.backspace || keyCode === keyCodes.delete) {\n        this.deleteCurrentItem();\n      }\n    },\n\n    deleteCurrentItem() {\n      const curIndex = this.selectedIndex;\n      const curItem = this.selectedItems[curIndex]; // Do nothing if input or item is disabled\n\n      if (!this.isInteractive || this.getDisabled(curItem)) return;\n      const lastIndex = this.selectedItems.length - 1; // Select the last item if\n      // there is no selection\n\n      if (this.selectedIndex === -1 && lastIndex !== 0) {\n        this.selectedIndex = lastIndex;\n        return;\n      }\n\n      const length = this.selectedItems.length;\n      const nextIndex = curIndex !== length - 1 ? curIndex : curIndex - 1;\n      const nextItem = this.selectedItems[nextIndex];\n\n      if (!nextItem) {\n        this.setValue(this.multiple ? [] : null);\n      } else {\n        this.selectItem(curItem);\n      }\n\n      this.selectedIndex = nextIndex;\n    },\n\n    clearableCallback() {\n      this.internalSearch = null;\n      VSelect.options.methods.clearableCallback.call(this);\n    },\n\n    genInput() {\n      const input = VTextField.options.methods.genInput.call(this);\n      input.data = mergeData(input.data, {\n        attrs: {\n          'aria-activedescendant': getObjectValueByPath(this.$refs.menu, 'activeTile.id'),\n          autocomplete: getObjectValueByPath(input.data, 'attrs.autocomplete', 'off')\n        },\n        domProps: {\n          value: this.internalSearch\n        }\n      });\n      return input;\n    },\n\n    genInputSlot() {\n      const slot = VSelect.options.methods.genInputSlot.call(this);\n      slot.data.attrs.role = 'combobox';\n      return slot;\n    },\n\n    genSelections() {\n      return this.hasSlot || this.multiple ? VSelect.options.methods.genSelections.call(this) : [];\n    },\n\n    onClick(e) {\n      if (!this.isInteractive) return;\n      this.selectedIndex > -1 ? this.selectedIndex = -1 : this.onFocus();\n      if (!this.isAppendInner(e.target)) this.activateMenu();\n    },\n\n    onInput(e) {\n      if (this.selectedIndex > -1 || !e.target) return;\n      const target = e.target;\n      const value = target.value; // If typing and menu is not currently active\n\n      if (target.value) this.activateMenu();\n      if (!this.multiple && value === '') this.deleteCurrentItem();\n      this.internalSearch = value;\n      this.badInput = target.validity && target.validity.badInput;\n    },\n\n    onKeyDown(e) {\n      const keyCode = e.keyCode;\n\n      if (e.ctrlKey || ![keyCodes.home, keyCodes.end].includes(keyCode)) {\n        VSelect.options.methods.onKeyDown.call(this, e);\n      } // The ordering is important here\n      // allows new value to be updated\n      // and then moves the index to the\n      // proper location\n\n\n      this.changeSelectedIndex(keyCode);\n    },\n\n    onSpaceDown(e) {},\n\n    onTabDown(e) {\n      VSelect.options.methods.onTabDown.call(this, e);\n      this.updateSelf();\n    },\n\n    onUpDown(e) {\n      // Prevent screen from scrolling\n      e.preventDefault(); // For autocomplete / combobox, cycling\n      // interfers with native up/down behavior\n      // instead activate the menu\n\n      this.activateMenu();\n    },\n\n    selectItem(item) {\n      VSelect.options.methods.selectItem.call(this, item);\n      this.setSearch();\n    },\n\n    setSelectedItems() {\n      VSelect.options.methods.setSelectedItems.call(this); // #4273 Don't replace if searching\n      // #4403 Don't replace if focused\n\n      if (!this.isFocused) this.setSearch();\n    },\n\n    setSearch() {\n      // Wait for nextTick so selectedItem\n      // has had time to update\n      this.$nextTick(() => {\n        if (!this.multiple || !this.internalSearch || !this.isMenuActive) {\n          this.internalSearch = !this.selectedItems.length || this.multiple || this.hasSlot ? null : this.getText(this.selectedItem);\n        }\n      });\n    },\n\n    updateSelf() {\n      if (!this.searchIsDirty && !this.internalValue) return;\n\n      if (!this.multiple && !this.valueComparator(this.internalSearch, this.getValue(this.internalValue))) {\n        this.setSearch();\n      }\n    },\n\n    hasItem(item) {\n      return this.selectedValues.indexOf(this.getValue(item)) > -1;\n    },\n\n    onCopy(event) {\n      var _a, _b;\n\n      if (this.selectedIndex === -1) return;\n      const currentItem = this.selectedItems[this.selectedIndex];\n      const currentItemText = this.getText(currentItem);\n      (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.setData('text/plain', currentItemText);\n      (_b = event.clipboardData) === null || _b === void 0 ? void 0 : _b.setData('text/vnd.vuetify.autocomplete.item+plain', currentItemText);\n      event.preventDefault();\n    }\n\n  }\n});\n//# sourceMappingURL=VAutocomplete.js.map","// Mixins\nimport Measurable from '../../mixins/measurable';\nimport Toggleable from '../../mixins/toggleable'; // Directives\n\nimport intersect from '../../directives/intersect'; // Utilities\n\nimport mixins from '../../util/mixins';\nimport { getSlot } from '../../util/helpers';\nexport default mixins(Measurable, Toggleable).extend({\n  name: 'VLazy',\n  directives: {\n    intersect\n  },\n  props: {\n    options: {\n      type: Object,\n      // For more information on types, navigate to:\n      // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n      default: () => ({\n        root: undefined,\n        rootMargin: undefined,\n        threshold: undefined\n      })\n    },\n    tag: {\n      type: String,\n      default: 'div'\n    },\n    transition: {\n      type: String,\n      default: 'fade-transition'\n    }\n  },\n  computed: {\n    styles() {\n      return { ...this.measurableStyles\n      };\n    }\n\n  },\n  methods: {\n    genContent() {\n      const children = this.isActive && getSlot(this);\n      return this.transition ? this.$createElement('transition', {\n        props: {\n          name: this.transition\n        }\n      }, children) : children;\n    },\n\n    onObserve(entries, observer, isIntersecting) {\n      if (this.isActive) return;\n      this.isActive = isIntersecting;\n    }\n\n  },\n\n  render(h) {\n    return h(this.tag, {\n      staticClass: 'v-lazy',\n      attrs: this.$attrs,\n      directives: [{\n        name: 'intersect',\n        value: {\n          handler: this.onObserve,\n          options: this.options\n        }\n      }],\n      on: this.$listeners,\n      style: this.styles\n    }, [this.genContent()]);\n  }\n\n});\n//# sourceMappingURL=VLazy.js.map","// extracted by mini-css-extract-plugin\nexport {};","// Styles\nimport \"../../../src/components/VStepper/VStepper.sass\"; // Extensions\n\nimport VSheet from '../VSheet'; // Mixins\n\nimport { provide as RegistrableProvide } from '../../mixins/registrable';\nimport Proxyable from '../../mixins/proxyable'; // Utilities\n\nimport mixins from '../../util/mixins';\nimport { breaking } from '../../util/console';\nconst baseMixins = mixins(VSheet, RegistrableProvide('stepper'), Proxyable);\n/* @vue/component */\n\nexport default baseMixins.extend({\n  name: 'v-stepper',\n\n  provide() {\n    return {\n      stepClick: this.stepClick,\n      isVertical: this.vertical\n    };\n  },\n\n  props: {\n    altLabels: Boolean,\n    nonLinear: Boolean,\n    flat: Boolean,\n    vertical: Boolean\n  },\n\n  data() {\n    const data = {\n      isBooted: false,\n      steps: [],\n      content: [],\n      isReverse: false\n    };\n    data.internalLazyValue = this.value != null ? this.value : (data[0] || {}).step || 1;\n    return data;\n  },\n\n  computed: {\n    classes() {\n      return {\n        'v-stepper--flat': this.flat,\n        'v-stepper--is-booted': this.isBooted,\n        'v-stepper--vertical': this.vertical,\n        'v-stepper--alt-labels': this.altLabels,\n        'v-stepper--non-linear': this.nonLinear,\n        ...VSheet.options.computed.classes.call(this)\n      };\n    },\n\n    styles() {\n      return { ...VSheet.options.computed.styles.call(this)\n      };\n    }\n\n  },\n  watch: {\n    internalValue(val, oldVal) {\n      this.isReverse = Number(val) < Number(oldVal);\n      oldVal && (this.isBooted = true);\n      this.updateView();\n    }\n\n  },\n\n  created() {\n    /* istanbul ignore next */\n    if (this.$listeners.input) {\n      breaking('@input', '@change', this);\n    }\n  },\n\n  mounted() {\n    this.updateView();\n  },\n\n  methods: {\n    register(item) {\n      if (item.$options.name === 'v-stepper-step') {\n        this.steps.push(item);\n      } else if (item.$options.name === 'v-stepper-content') {\n        item.isVertical = this.vertical;\n        this.content.push(item);\n      }\n    },\n\n    unregister(item) {\n      if (item.$options.name === 'v-stepper-step') {\n        this.steps = this.steps.filter(i => i !== item);\n      } else if (item.$options.name === 'v-stepper-content') {\n        item.isVertical = this.vertical;\n        this.content = this.content.filter(i => i !== item);\n      }\n    },\n\n    stepClick(step) {\n      this.$nextTick(() => this.internalValue = step);\n    },\n\n    updateView() {\n      for (let index = this.steps.length; --index >= 0;) {\n        this.steps[index].toggle(this.internalValue);\n      }\n\n      for (let index = this.content.length; --index >= 0;) {\n        this.content[index].toggle(this.internalValue, this.isReverse);\n      }\n    }\n\n  },\n\n  render(h) {\n    return h(this.tag, {\n      staticClass: 'v-stepper',\n      class: this.classes,\n      style: this.styles\n    }, this.$slots.default);\n  }\n\n});\n//# sourceMappingURL=VStepper.js.map","// Components\nimport { VTabTransition, VTabReverseTransition } from '../transitions'; // Mixins\n\nimport { inject as RegistrableInject } from '../../mixins/registrable'; // Helpers\n\nimport { convertToUnit } from '../../util/helpers'; // Utilities\n\nimport mixins from '../../util/mixins';\nconst baseMixins = mixins(RegistrableInject('stepper', 'v-stepper-content', 'v-stepper'));\n/* @vue/component */\n\nexport default baseMixins.extend().extend({\n  name: 'v-stepper-content',\n  inject: {\n    isVerticalProvided: {\n      from: 'isVertical'\n    }\n  },\n  props: {\n    step: {\n      type: [Number, String],\n      required: true\n    }\n  },\n\n  data() {\n    return {\n      height: 0,\n      // Must be null to allow\n      // previous comparison\n      isActive: null,\n      isReverse: false,\n      isVertical: this.isVerticalProvided\n    };\n  },\n\n  computed: {\n    computedTransition() {\n      // Fix for #8978\n      const reverse = this.$vuetify.rtl ? !this.isReverse : this.isReverse;\n      return reverse ? VTabReverseTransition : VTabTransition;\n    },\n\n    styles() {\n      if (!this.isVertical) return {};\n      return {\n        height: convertToUnit(this.height)\n      };\n    }\n\n  },\n  watch: {\n    isActive(current, previous) {\n      // If active and the previous state\n      // was null, is just booting up\n      if (current && previous == null) {\n        this.height = 'auto';\n        return;\n      }\n\n      if (!this.isVertical) return;\n      if (this.isActive) this.enter();else this.leave();\n    }\n\n  },\n\n  mounted() {\n    this.$refs.wrapper.addEventListener('transitionend', this.onTransition, false);\n    this.stepper && this.stepper.register(this);\n  },\n\n  beforeDestroy() {\n    this.$refs.wrapper.removeEventListener('transitionend', this.onTransition, false);\n    this.stepper && this.stepper.unregister(this);\n  },\n\n  methods: {\n    onTransition(e) {\n      if (!this.isActive || e.propertyName !== 'height') return;\n      this.height = 'auto';\n    },\n\n    enter() {\n      let scrollHeight = 0; // Render bug with height\n\n      requestAnimationFrame(() => {\n        scrollHeight = this.$refs.wrapper.scrollHeight;\n      });\n      this.height = 0; // Give the collapsing element time to collapse\n\n      setTimeout(() => this.isActive && (this.height = scrollHeight || 'auto'), 450);\n    },\n\n    leave() {\n      this.height = this.$refs.wrapper.clientHeight;\n      setTimeout(() => this.height = 0, 10);\n    },\n\n    toggle(step, reverse) {\n      this.isActive = step.toString() === this.step.toString();\n      this.isReverse = reverse;\n    }\n\n  },\n\n  render(h) {\n    const contentData = {\n      staticClass: 'v-stepper__content'\n    };\n    const wrapperData = {\n      staticClass: 'v-stepper__wrapper',\n      style: this.styles,\n      ref: 'wrapper'\n    };\n\n    if (!this.isVertical) {\n      contentData.directives = [{\n        name: 'show',\n        value: this.isActive\n      }];\n    }\n\n    const wrapper = h('div', wrapperData, [this.$slots.default]);\n    const content = h('div', contentData, [wrapper]);\n    return h(this.computedTransition, {\n      on: this.$listeners\n    }, [content]);\n  }\n\n});\n//# sourceMappingURL=VStepperContent.js.map","// Components\nimport VIcon from '../VIcon'; // Mixins\n\nimport Colorable from '../../mixins/colorable';\nimport { inject as RegistrableInject } from '../../mixins/registrable'; // Directives\n\nimport ripple from '../../directives/ripple'; // Utilities\n\nimport mixins from '../../util/mixins';\nimport { keyCodes } from '../../util/helpers';\nconst baseMixins = mixins(Colorable, RegistrableInject('stepper', 'v-stepper-step', 'v-stepper'));\n/* @vue/component */\n\nexport default baseMixins.extend().extend({\n  name: 'v-stepper-step',\n  directives: {\n    ripple\n  },\n  inject: ['stepClick'],\n  props: {\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    complete: Boolean,\n    completeIcon: {\n      type: String,\n      default: '$complete'\n    },\n    editable: Boolean,\n    editIcon: {\n      type: String,\n      default: '$edit'\n    },\n    errorIcon: {\n      type: String,\n      default: '$error'\n    },\n    rules: {\n      type: Array,\n      default: () => []\n    },\n    step: [Number, String]\n  },\n\n  data() {\n    return {\n      isActive: false,\n      isInactive: true\n    };\n  },\n\n  computed: {\n    classes() {\n      return {\n        'v-stepper__step--active': this.isActive,\n        'v-stepper__step--editable': this.editable,\n        'v-stepper__step--inactive': this.isInactive,\n        'v-stepper__step--error error--text': this.hasError,\n        'v-stepper__step--complete': this.complete\n      };\n    },\n\n    hasError() {\n      return this.rules.some(validate => validate() !== true);\n    }\n\n  },\n\n  mounted() {\n    this.stepper && this.stepper.register(this);\n  },\n\n  beforeDestroy() {\n    this.stepper && this.stepper.unregister(this);\n  },\n\n  methods: {\n    click(e) {\n      e.stopPropagation();\n      this.$emit('click', e);\n\n      if (this.editable) {\n        this.stepClick(this.step);\n      }\n    },\n\n    genIcon(icon) {\n      return this.$createElement(VIcon, icon);\n    },\n\n    genLabel() {\n      return this.$createElement('div', {\n        staticClass: 'v-stepper__label'\n      }, this.$slots.default);\n    },\n\n    genStep() {\n      const color = !this.hasError && (this.complete || this.isActive) ? this.color : false;\n      return this.$createElement('span', this.setBackgroundColor(color, {\n        staticClass: 'v-stepper__step__step'\n      }), this.genStepContent());\n    },\n\n    genStepContent() {\n      const children = [];\n\n      if (this.hasError) {\n        children.push(this.genIcon(this.errorIcon));\n      } else if (this.complete) {\n        if (this.editable) {\n          children.push(this.genIcon(this.editIcon));\n        } else {\n          children.push(this.genIcon(this.completeIcon));\n        }\n      } else {\n        children.push(String(this.step));\n      }\n\n      return children;\n    },\n\n    keyboardClick(e) {\n      if (e.keyCode === keyCodes.space) {\n        this.click(e);\n      }\n    },\n\n    toggle(step) {\n      this.isActive = step.toString() === this.step.toString();\n      this.isInactive = Number(step) < Number(this.step);\n    }\n\n  },\n\n  render(h) {\n    return h('div', {\n      attrs: {\n        tabindex: this.editable ? 0 : -1\n      },\n      staticClass: 'v-stepper__step',\n      class: this.classes,\n      directives: [{\n        name: 'ripple',\n        value: this.editable\n      }],\n      on: {\n        click: this.click,\n        keydown: this.keyboardClick\n      }\n    }, [this.genStep(), this.genLabel()]);\n  }\n\n});\n//# sourceMappingURL=VStepperStep.js.map","import { createSimpleFunctional } from '../../util/helpers';\nimport VStepper from './VStepper';\nimport VStepperStep from './VStepperStep';\nimport VStepperContent from './VStepperContent';\nconst VStepperHeader = createSimpleFunctional('v-stepper__header');\nconst VStepperItems = createSimpleFunctional('v-stepper__items');\nexport { VStepper, VStepperContent, VStepperStep, VStepperHeader, VStepperItems };\nexport default {\n  $_vuetify_subcomponents: {\n    VStepper,\n    VStepperContent,\n    VStepperStep,\n    VStepperHeader,\n    VStepperItems\n  }\n};\n//# sourceMappingURL=index.js.map"],"names":[],"sourceRoot":""}